- 浏览: 364255 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (148)
- java (89)
- flex (7)
- sns (3)
- jquery mobile gwt html5 (1)
- VirtualBox Centos 安装 (2)
- tomcat (1)
- nginx (2)
- centOS (7)
- memcache (2)
- hadoop (3)
- hbase (3)
- install (1)
- cloudera (3)
- tools (0)
- gen code (0)
- Mysql (2)
- KinderEditor (1)
- flash chart (1)
- ntsysv (1)
- hibernate search (2)
- compass (1)
- lucence (2)
- hibernate (1)
- jboss cache (0)
- 二级缓存 (1)
- maven (1)
- debian (1)
- go (1)
- golang (2)
- html5 (1)
最新评论
-
llh1985:
wave牛人~~求联系~~~邮箱llh1985@163.com ...
GWT Wave 开源代码运行跑通分析(1) -
zhengliming123:
[img][img][*][*][/flash][*]|[/i ...
hibernate Search 学习研究 附件是maven工程 -
di1984HIT:
写得很嗯好啊。
CentOS 安装 hadoop hbase 使用 cloudera 版本。(一) -
itfanr:
楼主写的真好 本地godoc
Golang 1.0 文档使用。godoc ,go 命令 学习 ,本地运行 gotour -
phe441:
灰常感谢楼主,爱死你了
URL rewrite 3.2 jar 和 文档 pdf 下载
最近 看到 appgeng 被封了。。开始担心起自己的应用了。
使用 google 的appengine 进行开发的时候的成都在 而且 appeng 运行速度 还比tomcat 跑的快些
google 没有给出 在本地 如何集群 如何 连接 数据库的 方案。
我想应该从 appeng 白名单开始。google的白名单包括了一些java 中用到的类。
我想在本地 的环境下面运行这些类。。服务器上面就肯定不行了。。那个google说了算。
首先修改下白名单
package com.google.apphosting.runtime.security; import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import org.apache.commons.io.FileUtils; public class GenWhiteListMain { public static void main(String args[]) throws IOException { JarFile jarFile = new JarFile("/opt/jdk/jdk1.6/jre/lib/rt.jar"); Enumeration enum1 = jarFile.entries(); StringBuffer buffer = new StringBuffer(); while (enum1.hasMoreElements()) { JarEntry entry = (JarEntry) enum1.nextElement(); String name = entry.getName(); name = name.replace("/", "."); if (name.indexOf("com.sun") >= 0) { continue; } if (name.indexOf("sun.") == 0) { continue; } if (name.indexOf("com.sun") >= 0) { continue; } if (name.indexOf("javax.swing") >= 0) { continue; } if (name.indexOf("org.omg") >= 0) { continue; } if (name.indexOf("org.ietf") >= 0) { continue; } if (name.indexOf(".class") >= 0) { name = name.replace(".class", ""); // System.out.println("\"" + name + "\","); buffer.append("\"" + name + "\",\n"); } } System.out.println("finish"); FileUtils.writeStringToFile(new File("src/WhiteList.txt"), buffer.toString()); } }
读取jar 文件里面的所有文件 并去除一些 不常用户的。
然后修改将白名单修改
(这里就不贴了。好几千行的东西。)
然后发现运行的时候需要 重启 eclipse 否则编译报错。
然后运行 google appeng 还是报不能访问 继续修改一个类
package com.google.appengine.tools.development; import com.google.apphosting.utils.security.SecurityManagerInstaller; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.security.Permission; import java.security.Permissions; import java.util.PropertyPermission; public class DevAppServerFactory { static final String DEV_APP_SERVER_CLASS = "com.google.appengine.tools.development.DevAppServerImpl"; public DevAppServer createDevAppServer(File appLocation, String address, int port) { return createDevAppServer(new Class[] { File.class, String.class, Integer.TYPE }, new Object[] { appLocation, address, Integer.valueOf(port) }); } private DevAppServer createDevAppServer(File appLocation, String appEngineWebXml, String address, int port, boolean useCustomStreamHandler) { return createDevAppServer( new Class[] { File.class, String.class, String.class, String.class, Integer.TYPE, Boolean.TYPE }, new Object[] { appLocation, null, appEngineWebXml, address, Integer.valueOf(port), Boolean.valueOf(useCustomStreamHandler) }); } private DevAppServer createDevAppServer(Class[] ctorArgTypes, Object[] ctorArgs) { SecurityManagerInstaller.install(new URL[0]); DevAppServerClassLoader loader = DevAppServerClassLoader .newClassLoader(DevAppServerFactory.class.getClassLoader()); testAgentIsInstalled(); DevAppServer devAppServer; try { Class devAppServerClass = Class.forName( "com.google.appengine.tools.development.DevAppServerImpl", true, loader); Constructor cons = devAppServerClass.getConstructor(ctorArgTypes); cons.setAccessible(true); devAppServer = (DevAppServer) cons.newInstance(ctorArgs); } catch (Exception e) { Throwable t = e; if (e instanceof InvocationTargetException) { t = e.getCause(); } throw new RuntimeException("Unable to create a DevAppServer", t); } System.setSecurityManager(new CustomSecurityManager(devAppServer)); return devAppServer; } private void testAgentIsInstalled() { try { // AppEngineDevAgent.getAgent(); } catch (Throwable t) { String msg = "Unable to locate the App Engine agent. Please use dev_appserver, KickStart, or set the jvm flag: \"-javaagent:<sdk_root>/lib/agent/appengine-agent.jar\""; throw new RuntimeException(msg, t); } } private static class CustomSecurityManager extends SecurityManager { private static final RuntimePermission PERMISSION_MODIFY_THREAD_GROUP = new RuntimePermission( "modifyThreadGroup"); private static final RuntimePermission PERMISSION_MODIFY_THREAD = new RuntimePermission( "modifyThread"); private static final String KEYCHAIN_JNILIB = "/libkeychain.jnilib"; private static final Object PERMISSION_LOCK = new Object(); private final DevAppServer devAppServer; public CustomSecurityManager(DevAppServer devAppServer) { this.devAppServer = devAppServer; } private synchronized boolean appHasPermission(Permission perm) { return true; /** 直接返回 */ } public void checkPermission(Permission perm) { if (true) { return; /** 直接返回 */ } } public void checkPermission(Permission perm, Object context) { if (true) { return; /** 直接返回 */ } } public void checkAccess(ThreadGroup g) { if (true) { return; /** 直接返回 */ } } public void checkAccess(Thread t) { if (true) { return; /** 直接返回 */ } } public boolean isDevAppServerThread() { // return Boolean.getBoolean("devappserver-thread-" // + Thread.currentThread().getName()); return true; } } }
将一些判断直接 返回。
然后继续重启 eclispe 发现可以写文件 运行 线程了。。
测试servletpackage com.test;
import java.io.File; import java.io.IOException; import java.net.Socket; import javax.servlet.http.*; import org.apache.commons.io.FileUtils; @SuppressWarnings("serial") public class TestWhiteServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); FileUtils.writeStringToFile(new File("/tmp/app.write.txt"), "1234"); TestThread thread = new TestThread(); thread.start(); resp.getWriter().println("Hello, world"); } }
一个写文件一个创建线程。没有报错。
附件
是我自己源文件。
appengine-tools-api.jar 是替换后的文件
放到 appengine-sdk/lib 目录下面替换
想着是 如果 老是上不去 app服务器。可以自己本地跑程序了。自己写点线程。
上传照片的时候可以直接传到 自己的服务器上了。
这样 appengine 就和一个 tomcat 一样了。不过带一个 文件数据库。
但appengine 有一些配置挺方便的如:
<static-files> <include path="/**.png" expiration="4d 5h" /> </static-files>
缓存图片
http://code.google.com/appengine/docs/java/config/appconfig.html
接下来研究 appengine 本地集群 性能如何。我想应该有这些配置。只不过 文档没说。
- appengine-tools-api.jar (8.8 MB)
- 下载次数: 10
- testWhiteList_src.tar.gz (235.2 KB)
- 下载次数: 10
发表评论
-
在CSDN上面也开通了博客
2013-02-27 22:41 827在CSDN上面也开通了博客 CSDN 现在发布文章 ... -
resin 服务器学习 配置 单点和 集群
2011-12-08 00:45 2017使用的 resin 4 服务器 ... -
CentOS 安装 Memcache 服务器. java 做客户端.
2011-11-07 18:35 36351,下载安装第三方源: CentOS 6 或 R ... -
CentOS rpm 安装 java 环境 tomcat nginx.
2011-11-03 19:17 7441首先测试更新. yum update ... -
android 源文件 zip包下载.地址
2011-06-20 15:19 1827android 源文件 zip包下载. 网络上面提供了 ... -
读取 jpa 的配置文件.添加自己的属性.
2011-06-15 16:03 1745package com.freewebsys.sns.c ... -
构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码
2011-05-05 11:44 1537构建富客户端程序 GWT2.3 + Guice3.0 + ... -
Guice 3.0 学习 persist jpa
2011-03-18 17:39 1488guice 3.0 的 persist 实现 使用的是 ... -
自己弄 开源 CMS 内容发布系统 主要表设计。
2011-03-10 11:34 3788--CMS栏目表 CREATE TABLE ... -
坚信 Debian是比Ubuntu更稳定的操作系统
2011-03-07 14:28 2259坚信 Debian是比Ubuntu更稳定的操作系统 自 ... -
eclipse 3.6 sp2 减肥记录
2011-03-04 09:46 1611喜欢 eclipse 但是 发现 eclipse 的功能很多 ... -
记录 2010 01 12 开始 给 自己 2 年 的时间 去弄 一个 gwt sns
2011-01-13 12:57 1271记录 2010 01 12 开始 给 自己 2 ... -
mac os x86 下 intel 无限驱动下载
2011-01-09 10:45 1370是在 googlecode 的项目 http://co ... -
Macos 下面 开源软件 下载
2011-01-06 16:06 1841macos 常用 软件 下载 macos 官方网站下载 ... -
Ubuntu 更新文件 桌面 菜单丢失, 打算 换 mac os
2011-01-04 11:32 1972ubuntu 是 2009 年 安装 ... -
做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 spring hibernate 如何 ?
2010-12-27 12:48 1411做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 ... -
Goolge appengine 又可以用了。高兴啊。。
2010-12-15 09:37 693突然想访问下自己的应用。 发现 自己的 appengi ... -
设计 一个 oa 当中 的日历显示 跳转 上月 下月
2010-12-01 13:36 1309主要就是利用 java的Calendar 类 ... -
设计实现 一个 基于extjs2.0 做皮肤的 struts2 样式
2010-11-29 14:37 1775想法在 一年前 产生的。 首先使用 extjs2.0 ... -
Google wave 开源代码更新 wave-libraries-2010-11-17.zip 可以下载
2010-11-18 16:28 1292google wave 的代码更新 还是够快的。 ...
相关推荐
This practical guide shows intermediate and advanced web and mobile app developers how to build highly scalable Java applications in the cloud with Google App Engine. The flagship of Google's Cloud ...
A good book to learn Google App Engine.
Google App Engine Documentation
clock.rar 这是我今天做的一个基于google app engine写的一个在该平台上开发app的示例,通过该示例的学习,我们可以很快上手学会怎样在GAE上开发属于你的应用程序了,希望对大家有用!
在搭建WebRTC(AppRTC)时,我们会遇到需要部署Google App Engine的难题,并且最近墙的厉害,所以我特地把我珍藏的Google App Engine 最新版(2020-7-5)分享出来,希望可以方便想搭建WebRTC(AppRTC)的同学们
Google App Engine文档
云应用开发——Google App Engine & Google Web Toolkit入门指南 Google App Engine入门 Google App Engine 开发人员指南
Using Google App Engine
Google App Engine is a web application hosting service. By “web application,” we mean an application or service accessed over the Web, usually with a web browser: storefronts with shopping carts, ...
Eclipse Google 插件 Google App Engine SDK for Java Google App Engine文档 按钮 Google App Engine 开发包
云端代码Google App Engine编程指南 人民邮电出版社 高清带书签
Google App Engine 入门
Google云端的一个重要部分,主要介绍了Google中App Engine的限制。
Google App Engine 入门教程 eclipse插件 详情请参考我的博客
appengine-tools-api.jar中文乱码, 修改appengine-tools-api.jar 以实现以UTF-8文件,编译. 使用方法: ...用你下载的包中Application.class替换om.google.appengine.tools.admin包里的Application.class文件
Google App Engine is a key component of the Google Cloud Platform and one of the most comprehensive cloud services. Together with Python, the first programming language ever supported by the platform,...
Google App Engine for Java 中文指南,Google App Engine for Java 中文指南
appengine-java-sdk-1.3.1 GoogleApp开发的SDK(Java版)
google app Engine for java中文api,