模块化Java:声明式模块化
本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。
作者 Scott Delap 译者 张龙 发布于 2009年4月17日 上午12时2分
除了Python以外,Google App Engine(GAE)又增加了Java支持,这对Java生态圈相关的工具、框架及语言(像JRuby和Clojure)都产生了很大的影响。然而这么做的结果将对GAE Java应用造成很多限制,使其无法轻松扩展和集成这些应用。Google官方博客对此说到:
...我们想给开发者一些惊喜,但深知必须要将Google App Engine的简单性与Java平台的强大功能及灵活性结合起来,同时我们还想利用App Engine的基础设施,尽量去扩展这些内容,但又要保持与现有的Java标准和工具的兼容性。
我们就是这么做的。现在App Engine对标准(这些标准对Java工具起到了至关重要的作用)提供了支持(我们也从事着工具的开发——Google Plugin for Eclipse),它使用标准(如Java Servlet API、JDO、JPA、javax.cache及javax.mail)对当前的App Engine API进行了包装,同时还提供了足够强大的安全的沙箱,这样你的代码就可以安全地运行在Google Server上而又不会丧失灵活性...
CNet注意到GAE运行的是Java 6。但就像上面提到的,Java要想融入到GAE模型上还不是那么容易的事情,因为限制实在太多。GAE Java基于Java 2.4 Servlet API:
再往上就是几个沙箱限制了:
java.lang.System有如下限制:
除此以外,还有其他一些限制,如JRE类加载的白名单等等。从文档来看,GAE通过自定义的类装载器对此作了很好的处理,然而应该让其他应用级的类装载器也可以处理上面这些限制,这是一个不足之处。
接下来的问题是上面这些限制能给GAE应用带来什么好处呢?首先就是可伸缩性。App Engine使用多个Web Server运行应用并能自动调整所使用的服务器数量。它可以将到来的请求路由到任意的服务器上,而该服务器很可能并不是处理该用户前一个请求的那个服务器。以下内容来自于文档:
...一个应用可以同时处理大约30个动态请求,这意味着平均的服务器请求处理时间为75毫秒的应用可以处理(1000 ms/second / 75 ms/request)*30=400 requests/second的请求量而不会出现延时。CPU处理密集的应用可能会在长时间的请求中出现延时,这是为了让其他应用可以共享同一个服务器。对静态文件的请求不会受到该限制的影响...
Google还提供了一个BigTable版的JPO和JPA以及Google Plugin for Eclipse,以此简化GAE的开发。
尽管还处在开发当中,但Google已经让为数不少的开发者试用GAE的Java支持了。Paul Hammant说到:
...还要注意来自于同一客户端的多个并发请求也不一定会被同一个Servlet容器处理。即使来自于同一个域名(没有资源转发的情况出现),响应请求的Servlet容器实例也很可能是不同的。对于无状态应用来说这没什么问题,但对于那些利用session存储属性的应用来说就会出现并发问题了:向同一个资源写两次...
...Google已经实现了一个完善的沙箱。毋庸置疑,这会防止恶意代码的侵袭...而XStream是Java社区所推崇的一个工具,其最新版为1.3.1,但它却在GAE初始化时抛出异常。
其他一些工程师正在着手Clojure、JRuby及Groovy的支持开发工作,而ThoughtWorks的Ola Bini则在其博客上详述了GAE对动态语言的处理。
查看英文原文:Google Brings App Engine's Pros and Cons to Java
GAE的这些限制对于大多数对性能要求不高的应用来说都不成大问题
只是希望JAVA社区能保持一致,不要因为GOOGLE加入而引起兼容性问题。
自说自话, 如果你要用到这些,你就不会这么说了
Google已经实现了一个完善的沙箱。毋庸置疑,这会防止恶意代码的侵袭...XStream是Java社区所推崇的一个工具,其最新版为1.3.1,它会在GAE抛异常时进行初始化。
原文的意思是:
xstream运行在GAE上面,初始化时会抛异常。XStream is one that is particularly beloved of a section of the Java community. The latest version is 1.3.1 and on initialization anywhere within the realm of GAE is throws exceptions. These are security exceptions that cause the entire app to not function. Exceptions have a way of curtailing the fun of running code. In the case of XStream it is possible to fix it to be compatible with GAE (and all security constrained environments).
你好,此文是我翻译的。对于你所说的原文这块我觉得本身语法就有些问题,拿捏了很久,如果翻译错误的话最主要的原因还在于对XStream不甚了解,不管怎样,谢谢你的指出。如有进一步的信息可以与我联系:zhanglong217@yahoo.com.cn
xstream是thoughtworks公司的一个java转XML的一个工具,按照原文的意思应该是stream在GAE初始化的时候会出异常。
ok,已经更新了,多谢指正!
本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。
项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。
在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。
Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。
Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。
6 条回复
关注此讨论 回复