- 浏览: 371170 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 902在CSDN上面也开通了博客 CSDN 现在发布文章 ... -
resin 服务器学习 配置 单点和 集群
2011-12-08 00:45 2062使用的 resin 4 服务器 ... -
CentOS 安装 Memcache 服务器. java 做客户端.
2011-11-07 18:35 37031,下载安装第三方源: CentOS 6 或 R ... -
CentOS rpm 安装 java 环境 tomcat nginx.
2011-11-03 19:17 7490首先测试更新. yum update ... -
android 源文件 zip包下载.地址
2011-06-20 15:19 1875android 源文件 zip包下载. 网络上面提供了 ... -
读取 jpa 的配置文件.添加自己的属性.
2011-06-15 16:03 1793package com.freewebsys.sns.c ... -
构建富客户端程序 GWT2.3 + Guice3.0 + hibernateJPA 程序代码
2011-05-05 11:44 1591构建富客户端程序 GWT2.3 + Guice3.0 + ... -
Guice 3.0 学习 persist jpa
2011-03-18 17:39 1534guice 3.0 的 persist 实现 使用的是 ... -
自己弄 开源 CMS 内容发布系统 主要表设计。
2011-03-10 11:34 3836--CMS栏目表 CREATE TABLE ... -
坚信 Debian是比Ubuntu更稳定的操作系统
2011-03-07 14:28 2302坚信 Debian是比Ubuntu更稳定的操作系统 自 ... -
eclipse 3.6 sp2 减肥记录
2011-03-04 09:46 1666喜欢 eclipse 但是 发现 eclipse 的功能很多 ... -
记录 2010 01 12 开始 给 自己 2 年 的时间 去弄 一个 gwt sns
2011-01-13 12:57 1311记录 2010 01 12 开始 给 自己 2 ... -
mac os x86 下 intel 无限驱动下载
2011-01-09 10:45 1412是在 googlecode 的项目 http://co ... -
Macos 下面 开源软件 下载
2011-01-06 16:06 1892macos 常用 软件 下载 macos 官方网站下载 ... -
Ubuntu 更新文件 桌面 菜单丢失, 打算 换 mac os
2011-01-04 11:32 2021ubuntu 是 2009 年 安装 ... -
做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 spring hibernate 如何 ?
2010-12-27 12:48 1465做 一个 sns 的项目 考虑 使用 GWT 做 前台 后台 ... -
Goolge appengine 又可以用了。高兴啊。。
2010-12-15 09:37 737突然想访问下自己的应用。 发现 自己的 appengi ... -
设计 一个 oa 当中 的日历显示 跳转 上月 下月
2010-12-01 13:36 1347主要就是利用 java的Calendar 类 ... -
设计实现 一个 基于extjs2.0 做皮肤的 struts2 样式
2010-11-29 14:37 1813想法在 一年前 产生的。 首先使用 extjs2.0 ... -
Google wave 开源代码更新 wave-libraries-2010-11-17.zip 可以下载
2010-11-18 16:28 1339google wave 的代码更新 还是够快的。 ...
相关推荐
【百度App Engine】是百度推出的一个面向互联网应用开发者的云端服务平台,旨在提供便捷的应用开发、运行和维护环境。它不仅支持单机环境的开发,也支持分布式环境的程序执行,同时还具备面向运维的自动化工具链,...
【标题】:“Android-Gradle-Localization-Plugin-1.0.7.zip”是一个与Android应用程序本地化相关的Gradle插件的压缩包。这个插件主要用于帮助开发者更方便地管理和更新应用中的多语言资源。 【描述】:“fluent-...
Google App Engine是一个托管服务,允许开发者构建并部署可伸缩的Web应用,而Dropbox API则是用于与Dropbox云存储平台进行交互的接口。通过将两者结合,开发者可以创建应用,如文件上传、下载、同步或其他与Dropbox...
此外,Go语言还支持文件处理,可以读写本地文件系统中的文件,以及处理文件上传。 模板引擎的使用可以将动态数据嵌入HTML页面中,Go语言的html/template包提供了模板渲染的功能。通过模板,我们可以将数据传递到...
你可以根据用户选择的语言设置`QLocale`,然后使用其提供的方法进行格式化和本地化操作。 6. **动态更新界面** 当切换语言时,可能需要更新一些UI元素,如菜单项、对话框的标题等。确保在切换语言后调用`QObject::...
例如,它可以用于创建Google App Engine上的服务,因为Google App Engine支持protobuf和protorpc。 下载并安装`protorpc_standalone-0.12.0a2-py3-none-any.whl`文件非常简单,只需将该文件移动到Python环境的安装...
在C#编程环境中,操作Microsoft Word文件是一项常见的任务,尤其在数据处理、自动化报告和文档管理等场景下。本文将汇总几种主要的C#方法,用于提取和操作Word文件,特别是涉及图片和文字的处理。 首先,我们需要...
在Android开发中,ICE(Internet Communication Engine)服务是一种用于设备间通信的技术,它允许设备通过互联网进行实时数据交换。ICE服务通常被用在分布式系统、物联网(IoT)项目或者需要远程控制和监控的应用场景...
2. 使用Manager App控制台部署,在tomcat主页点击“Manager App” 进入应用管理控制台,可以指定一个web应用的路径或war文件。 3. 修改conf/server.xml文件部署,修改conf/server.xml文件,增加Context节点可以部署...
其文档还介绍如何将Tornado与WSGI和其他Python框架及服务器进行互操作,提供了与Google App Engine集成的示例。 Tornado的核心Web框架包括RequestHandler和Application类,用于处理请求和应用程序逻辑。tornado....
除了Android平台之外,还包括Google Web Toolkit (GWT) 和 Google App Engine。尽管这些技术并非移动技术,但它们之所以是非标准的原因超出了本文的讨论范围。但是,这种趋势可能适用于Java ME空间中发生的情况:非...
Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...
12. **Localizations**: 多语言支持让游戏能够吸引全球用户,iOS提供了强大的本地化工具。 【fir】:在提供的压缩包子文件名称列表中只有一个文件名为"fir",这可能是"FIR.iml"的缩写,FIR代表Firebase Integration...
2. 设计游戏场景:利用Egret Wing的可视化编辑器进行界面布局,添加图像、文本等元素。 3. 编写代码:用TypeScript编写游戏逻辑,Egret提供丰富的API供开发者调用。 4. 资源管理:通过Egret Resource加载和管理游戏...
6. **数据持久化**:游戏进度、用户设置等数据需要保存在本地。Android提供了SQLite数据库、SharedPreferences以及文件存储等方式。开发者可能通过`SQLiteDatabase`类来创建和操作数据库,保存游戏状态。 7. **事件...
Quip自动化API 这是的官方存储库。客户图书馆官方的 社区 (来自 ) (来自 ) (来自 ) (来自 ) ... App Engine上的Python :将Quip文档发布到 。 命令行上的Python :实时接收来自Quip的消息。 命令行上的Python
利用协程,开发者能够将线程执行的代码转换为轻量级的任务,并且这些任务可以在适度的硬件资源下进行高效调度,从而适应大量并发请求。 互操作性是Kotlin的另一大优势。它能够与所有基于Java的框架和库无缝兼容,这...
在Android开发中,MINA(Java Minimal Asynchronous Network Engine)是一个强大的网络通信框架,它提供了高性能、异步I/O操作的能力,广泛应用于TCP/IP和UDP/IP协议栈的应用开发。本实例将详细介绍如何利用MINA框架...
《深入理解Java虚拟机》是Java开发者深入了解JVM(Java Virtual Machine)的必备书籍,尤其对于想要提升技术深度、优化程序性能的工程师来说,更是不可或缺的参考资料。这本书的第二版全面覆盖了JVM的最新发展,包括...