Gavin King谈JSR-299和Weld 1.0对Java EE与JBoss的影响
作者
Charles Humble
译者
张龙
发布于
2009年11月23日 下午11时24分
前不久Red Hat的JBoss部门发布了Weld1.0.0——Java EE 6对JSR-299(Java EE的上下文与依赖注入
,
即Contexts and Dependency Injection for Java EE,后文简称为CDI)的参考实现。Sun
GlassFish Application Server v3和即将发布的JBoss AS
5.2.0都使用了Weld实现,然而Weld并不需要完整的应用服务器。它可以运行在Servlet容器内如Jetty 6.1或是Tomcat
6,同时也能用于Java SE 5.0+。为了阐明后一点,Weld发布包
中还带有一个示例性的控制台应用及一个Swing应用示例。
在JSR-299草案首次发布后,Google与SpringSource又联合提交了JSR-330,旨在标准化“一个久经考验、无可辩驳的注解
集以使得注入类能够跨越多个框架”,因此在我碰到CDI规范的领导者Gavin King时就迫不及待地询问他JSR-330对CDI有何影响。
CDI现在使用JSR-330所定义的注解来声明注入点。这种影响是微乎其微的,因为330所使用的模型基本上与299大同小异。归结起来,只是注解名有所区别罢了。
要知道330并没有定义完整的依赖注入方案。它只定义了带有修饰符的注入点而已,其他的都没有定义。
InfoQ:
CDI和EJB是如何处理EE 6所引入的Managed Bean模型的?
新的Managed Bean规范是JSR-299的工作成果(在规范的早期草案中我们称之为“简单Web Bean”)。简单Web Bean支持依赖注入、EL名字与拦截器,但却没有EJB那些编程约束。
Managed Bean规范引起了很多争议,Red Hat说我们确实需要支持普通Java类的注入,而其他EE涉众则表示对299定义这样一个新EE“组件”的行径感到非常不爽。
经过多次讨论后,我们认为这种“简单”组件的想法应该自成一个规范,以此构成所有其他EE组件编程模型的基础,包括EJB等等。这是一个非常棒的愿景,我们都很赞同这个观点,但EE 6并没有完全实现它。
最后的结果是:CDI可以用在普通的Java类(现在叫做“Managed Bean”)以及EJB上。现在的EJB可以看作是一种特殊的Managed Bean,只不过有一些额外的编程约束和功能。这种编程模型能够极大地降低新用户学习EE的曲线。
InfoQ:
EJB还需要自己的组件模型么?
我认为EE平台的未来发展方向是逐渐将EJB特有的功能通用化,将其应用在所有的Managed Bean上。举个例子,为何不是所有的Managed Bean都支持@TransactionAttribute和@RolesAllowed呢?简直没有道理嘛。
然而EJB在为消息传输定义端点、远程与异步方法调用、定时器等领域还是有一席之地的。在这些情况下,EJB生命周期模型还是非常有意义的。
InfoQ:
Seam为JSF 2和CDI创造了灵感。在JSF中修复这些问题要比在Seam中解决好在哪呢?
在尽力透明化用户体验的过程中,我们从来都没有真正满意过。用户总是注意到何时在使用JSF的特性,何时在使用本应放在JSF中的Seam特性。
CDI来源于Red Hat的开源Seam框架,从广义上来讲,它将Seam的编程模型标准化为Java EE
6的编程模型。CDI实现了Java EE
6的3个主要目的。首先,它提供了声明的方式来管理绑定到上下文组件的范围、状态与生命周期。其次,它为平台提供了标准化、注解驱动、类型安全的依赖注入
框架,方式类似于Google Guice。最后,它为Java EE平台的扩展开发提供了Service Provider
Interface(SPI)。
CDI的Service Provider Interface已经成为Java EE可扩展性的一个关键组成部分,而可扩展性则是Java EE 6的一个中心议题。JSR-316规范
说到:
...我们相信大家都很渴望将这些技术用于Java
EE应用服务器之上,或是以插件的形式使用。通过增加更多的扩展点和服务供应商接口,其他技术就可以插件的形式用于平台实现了,这么做既整洁又高效,对于
开发者来说使用起来也是非常简单的,就像是内置于平台上的设备一样。
这一点大家可以从下一版的Seam(也就是Seam 3)中看到,Seam 3将CDI作为其核心引擎并使用CDI Service
Provider
Interface提供了CDI中并没有涵盖的众多特性,如BPM集成、Drools集成、PDF与Email模板支持以及Excel生成等等。这些扩展
(也包括第三方厂商提供的其他扩展)可以运行在支持JSR-299的任何环境中,也包括任何Java EE 6环境。CDI规范说到:
可移植的扩展可以通过如下方式与容器集成:
• 提供自己的Bean、拦截器和装饰器。
• 通过依赖注入服务将依赖注入到自己的对象中。
• 为客户化的范围(custom scope)提供一个上下文实现。
• 通过外部注解增强或是提供基于注解的元数据。
Gavin King说到:
CDI和JSF 2的出现预示了Seam的新方向。
在Seam 2中,我们花费了巨大的精力填补JSF的漏洞,结果造成了没有时间集成那些非常吸引我们的表示层技术。JSF 2可以让我们将精力放在其他领域中。
最重要的是,CDI现在提供了一个核心“引擎”,可以在所有的EE
6应用服务器之间移植,甚至还可以用在Tomcat、Jetty和Resin上。该核心并不依赖于任何特定的表示层技术。其所拥有的仅仅是为可移植扩展开
发者所提供的一套定义良好的SPI。该SPI作为整个生态系统的根基。如果你是一位框架开发者,那现在就会明确要想将框架与CDI及EE环境集成起来(通
过扩展)需要做哪些事情。这也许是CDI最令人激动的特性了。
Seam 3将成为一套CDI可移植扩展,可以用在任何应用服务器上并向CDI编程模型提供扩展,同时能与我们感兴趣的其他技术进行集成。
JBoss CTO Mark Little说
CDI和Seam将是其所有项目和平台的未来发展方向:
目前团队正与这些项目和平台(如ESB和SOA-P)紧密合作以确保新版Seam能考虑到其特定的需求。重要的是,一些项目已经认为Seam是其正确的选择,甚至都不用做任何修改,因此紧密与快速的集成要比想象的更容易一些。
King也确认了这一点并说到:
Red
Hat已经成功将Seam应用到其所开发的一些项目当中了。CDI将Seam的核心功能放在了坚固的根基之上,而我们对CDI的实现Weld是个更加专注
且测试良好的基础设施。这意味着我们可以将Weld应用在Seam 2不适合的各种领域中,而这与构建Web站点无关。
除了Red Hat外还有很多其他的CDI实现也即将破茧成蝶。Resin的创建者Caucho Technology拥有一个实现(CanDI
),而Resin容器本身也在内部大量使用了CDI。Apache也正致力于一个名为OpenWebBeans
的实现,Granite DS也有一个实现,可以将CDI应用在Flex应用中,如下
:
我们认为JCDI非常适合于事件驱动架构的Flex RIA。JCDI应用非常整洁,尽管JBoss Seam提供了大量的特性,但他们没必要再开发一个RIA前端了。
查看英文原文:
Q&A with Gavin King on the Impact of JSR-299 and Weld 1.0 on Java EE and JBoss
转自:InfoQ 中文站
分享到:
相关推荐
webbeans gavin king 力作
In this revised edition, authors Christian Bauer, Gavin King, and Gary Gregory cover Hibernate 5 in detail with the Java Persistence 2.1 standard (JSR 338). All examples have been updated for the ...
VC6.0 OpenCV1.0 SDK环境
gavin-build 项目介绍 gavin-build 是一个自己实现的简易打包工具,内部的实现很简单。仅供学习和参看 主要通过acorn实现对js文件的分析,通过css-tree对css文件进行分析,都是将资源转成对应的ast,然后更编译的...
hibernate bible by Gavin king Nothing more
NULL 博文链接:https://gavin-chen.iteye.com/blog/305799
概述一个分支,用于构建与Amazon Web Services API交互的RabbitMQ插件。支持的Erlang版本配置可以通过多种方式提供Rabbitmq-aws的配置。 在提供区域和配置信息方面,它的行为类似于 。 此外,它有两种方法, ...
NULL 博文链接:https://gavin2lee.iteye.com/blog/2356568
Gavin Pillay, Registrar, King Edward VIII Hospital, South Africa Thank you again for your awesome book. I was really floundering (being a non-C programmer), but your book has brought me up to speed ...
加文框架 Gavin的轻量级Java MVC框架。
它是Gavin King在2001年创建的一个开源持久性框架。它是任何Java应用程序的强大,高性能的对象关系持久性和查询服务。 Hibernate将Java类映射到数据库表,从Java数据类型映射到SQL数据类型,并使开发人员从95%的...
内含kuanrf-tomcat-redis-session-manager-1.0.jar、jedis-2.7.2.jar、commons-pool2-2.4.1.jar、tomcat-juli-8.0.23.jar,导入到tomcat包下。 适合于 tomcat session共享,单点登录session共享,使用redis做session...
Java Persistence with Hibernate, REVISED EDITION OF HIBERNATE IN ACTION CHRISTIAN BAUER AND GAVIN KING
编程流量老师和团队SEO关键词营销软件1.0纯绿色版和源码下载
由Hibernate的创立者Gavin King主刀撰写。给你带来对Hibernate最详尽的了解。
二、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在 兼容性问题。 三、Hibernate不能用来直接和...
我还为翻译后的Python代码提供了一些示例输出和测试用例。 测试不是很广泛,但是我相信测试涵盖了我可以想到的大多数情况,这些情况实际上可以在Python中运行。 LC = num | id | (/ id => LC)| (LC LC)| (+ LC...
初始化根密码set system root-authentication plain-text-password #配置 root 登录密码(如不配置,将无法执
Gavin-Mulderig.github.io
Gavin King制作的ppt