GAE中JAVA版本沙盒的现原理

 

GAE沙盒的官方说明如下:

http://code.google.com/intl/zh-CN/appengine/docs/java/runtime.html#The_Sandbox。 

 

 

   用过GAE中JAVA版本的都知道,GAE是使用JETTY作为WEB容器的,并且采用了沙箱安全模型隔离各个应用。现在要探讨的问题就是,这个具体是如何实现的? 
经过鄙人粗略的研究,沙盒不仅仅使用了JAVA内含的基于安全管理器的沙箱,而且似乎还新建了特别的类加载器(使某些类不能使用),还有其它一些措施(比如无法新增新线程,无法使用JNI等,这个方面目前还在研究中),大概可能还是用自定义的ClassLoader来实现对类的选择过滤,即建立了一个所谓JRE白名单(http://code.google.com/intl/zh-CN/appengine/docs/java/jrewhitelist.html)


   联想到TOMCAT的自定义ClassLoader模型,我觉得其实GAE所谓的“沙盒”无非其原理也就是类似于TOMCAT这样一个应用服务器中间件,在继承自通用的JDK特性前提下,进行了更多的功能屏蔽,同时提供了JAVA级别的API来访问其开放的服务功能,比如通过JDO和JPA两种方式来实现和其“数据存储区”交互并借助于其GFS分布式部署的特性以达到巨大的可伸缩性。


 

 

你可能感兴趣的:(java,tomcat,应用服务器,jpa,GAE)