面向Flex/Java EE应用的全新企业平台
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2011/07/graniteds-ep
上周,Granite Data Services发布了其用于构建富Internet应用的企业平台(后端使用Flex与Java EE)。整个Granite DS框架都是开源的,基于LGPL v2许可。
Granite DS是由一个客户端开发框架(Tide)构成的,这将人们所熟知的Java EE概念引入到了Flex领域:依赖注入、上下文管理、认证与安全访问以及Bean验证等等。它集成了所有主流的Java EE应用服务器、框架与JPA引擎:JBoss、GlassFish、WebLogic、WebSphere、Tomcat及Jetty;Hibernate、EclipseLink、OpenJPA及DataNucleus。它还带有一个高效的实时模块(Gravity),该模块基于Comet实现,支持可伸缩的数据推送。
InfoQ有幸采访到了Granite DS的CEO与联合创始人Frank Wolff以了解他对RIA的看法。
InfoQ:由于可伸缩性、移动性以及HTML5等的影响,企业软件栈,特别是RIA的发展异常迅猛,Granite DS在这场变革中处于什么位置呢?
Frank:在集群环境下,Web应用的可伸缩性主要是通过负载平衡实现的。新的GraniteDS企业平台目前运行在JBoss 5.1(Community或EAP)上,它带有开箱即用的集群支持(负载平衡与故障恢复)。对于其他服务器来说(WebLogic、GlassFish、Tomcat及Jetty等),我们在JBoss上所做的工作是可以复用的,可以实现所有集群结点的会话与认证复制。可伸缩性的另一方面与连接/线程管理有关:GraniteDS使用了异步的Servlet(也叫做Comet)来处理实时消息,与传统的同步Servlet模型相比,这极大地提升了系统的可伸缩性。
最近,Adobe通过新的Flex与Flash Builder 4.5不断强化Flex开发,但移动却是Flex开发所面临的一个问题。基本上,Flex开发者可以创建适合于尺寸较小的移动屏幕的特定的Flex皮肤,然后针对Android/iOS平台将其Flex/Flash软件编译为Air应用。这是个好消息(现在iPhone/iPad也支持了),但这么做却有一些限制:应用依旧是Flash应用,需要运行在Flash虚拟机上,看起来并不像原生的Android/iOS应用,并且无法利用目标平台提供的所有原生特性。最近,GraniteDS发布了原生库(Java/Objective-C))以克服这些限制:你现在可以创建连接到GraniteDS服务器上的原生Android/iOS应用,并且通过AMF3格式交换数据(AMF3是Flex应用所用的一种非常紧凑的二进制序列化格式)。目前,这项工作还在进行当中(这两个库都是Beta版),但它已经为这两种平台和语言提供了AMF3远程访问手段。
HTML5距离企业级应用还有一段距离。规范直到明年末才会发布,浏览器提供商一时半会儿还不会完全支持它,人们不可避免地会担心围绕着规范会掀起新一轮的浏览器大战:主要厂商对于规范的第一步并没有达成一致,那就是视频格式。除了所有HTML开发者所熟知的浏览器兼容性问题外,HTML5目前还没有类型安全的编译型语言可用:你只能使用当前版本的JavaScript,在开发大型的客户端应用时,你会发现它是一种有很多限制且比较弱的语言。最后,并没有真正的IDE可用于这种开发(除了GWT以外,因为它使用了一种相当聪明的办法绕过了这种限制:JavaScript是通过Java代码生成的)。相比较而言,Flex/ActionScript3/Flash Builder能够提供一个真实、强大的开发环境,这在HTML世界中是没有对手的。然而,HTML5还在路上,它代表了过去十年间巨大的技术变迁:GraniteDS计划发布一个JavaScript库以便让人们能够构建HTML5应用以连接到GraniteDS服务器并充分利用平台所提供的AMF3格式、实时消息以及高级的数据管理特性。
InfoQ:从上世纪90年代中期ORM出现以来,持久化已经走过了漫长的征途。JPA似乎是每个人都在寻求的解决方案,对此你有什么看法?
Frank:GraniteDS最初的一个目标就是利用JPA引擎的所有特性,从延迟加载和Hibernate开始。在GraniteDS 5年的开发过程中,完整的JPA支持已经延伸到了所有主流的引擎中:TopLink/EclipseLink、OpenJPA与DataNucleus。GraniteDS的JPA支持使用非常广泛,随着时间的流逝已经变得很成熟了。透明的延迟加载也可以通过Tide客户端框架得以实现:当在客户端首次访问时,延迟初始化的数据就可以自动获取到(比如说通过Flex绑定)。
一般来说,GraniteDS旨在集成所有主流的Java EE框架与特性:EJB3、Spring与JBoss/Seam、JPA引擎、Bean Validation等。主要目标在于让Java开发者熟悉Flex开发,这是通过集成他们钟爱的框架并在Flex端替换掉Java EE概念而实现的(依赖注入、客户端实体管理器、带有观察者的事件总线等等)。
InfoQ:双向与实时协议在RIA与移动应用中变得越来越重要。你如何看待复合应用世界中远程访问的前景?
Frank:实时协议为Web开发者提供了新的、有趣的可能,在过去十年间的使用率不断增长。这当然非常棒了,因为用户体验会从这种变化中受益,人们也可以在任何地方访问其应用与数据,但Web开发者与框架提供者还要面临两个主要的挑战:
- 服务器的可伸缩性:HTTP中并没有所谓的“数据推送”。客户端应用需要发送请求,该请求会在服务器端暂停,等待可用的数据。服务器需要处理成百上千个同时发出的持续连接,异步模型(在Servlet 3.0规范中成为了标准)有助于减少资源的消耗。然而,HTTP协议的扩展可以让客户端作为服务器,这样服务器就可以将真正的数据推送给客户端,这是个伟大的变革。
- 网络拥塞:蜂窝网络无法满足需要几个持续HTTP连接的应用的需要。用于创建智能手机应用的远程API必须要提供限制打开连接数量的方式,而且要尽可能地使用特定于平台的通知机制来处理实时消息。否则,3G或4G网络就会被这些新应用完全淹没。
我们的平台开发注意到了这些问题,比如说原生(Java/Objective-C)移动库实现就负责通过典型的HTTP连接查询所有的远程调用。在实现适合于新的复合应用世界所有设备一致的远程解决方案前,我们还要不少工作要做,还要不断学习。
查看英文原文:A New Enterprise Platform for Flex/Java EE Applications
posted on 2011-07-28 22:10 Hibernate4 阅读(173) 评论(0) 编辑 收藏 举报