上周,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
评论