gavinkevin手机(Gavin King 谈 JSR299 和 Weld 1.0 对 Java EE 与 JBoss 的影响)
CDI现在使用JSR-330所定义的注解来声明注入点 。这种影响是微乎其微的 ,因为330所使用的模型基本上与299大同小异 。归结起来 ,只是注解名有所区别罢了 。
要知道330并没有定义完整的依赖注入方案 。它只定义了带有修饰符的注入点而已 ,其他的都没有定义 。新的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的曲线。我认为EE平台的未来发展方向是逐渐将EJB特有的功能通用化,将其应用在所有的Managed Bean上 。举个例子 ,为何不是所有的Managed Bean都支持@TransactionAttribute和@RolesAllowed呢?简直没有道理嘛 。
然而EJB在为消息传输定义端点 、远程与异步方法调用 、定时器等领域还是有一席之地的。在这些情况下 ,EJB生命周期模型还是非常有意义的 。在尽力透明化用户体验的过程中,我们从来都没有真正满意过 。用户总是注意到何时在使用JSF的特性 ,何时在使用本应放在JSF中的Seam特性 。...我们相信大家都很渴望将这些技术用于Java
EE应用服务器之上 ,或是以插件的形式使用 。通过增加更多的扩展点和服务供应商接口 ,其他技术就可以插件的形式用于平台实现了 ,这么做既整洁又高效 ,对于
开发者来说使用起来也是非常简单的 ,就像是内置于平台上的设备一样 。可移植的扩展可以通过如下方式与容器集成:• 提供自己的Bean 、拦截器和装饰器 。
• 通过依赖注入服务将依赖注入到自己的对象中 。
• 为客户化的范围(custom scope)提供一个上下文实现 。
• 通过外部注解增强或是提供基于注解的元数据 。CDI和JSF 2的出现预示了Seam的新方向 。
在Seam 2中 ,我们花费了巨大的精力填补JSF的漏洞 ,结果造成了没有时间集成那些非常吸引我们的表示层技术 。JSF 2可以让我们将精力放在其他领域中 。
最重要的是 ,CDI现在提供了一个核心“引擎 ” ,可以在所有的EE
6应用服务器之间移植 ,甚至还可以用在Tomcat 、Jetty和Resin上。该核心并不依赖于任何特定的表示层技术 。其所拥有的仅仅是为可移植扩展开
发者所提供的一套定义良好的SPI 。该SPI作为整个生态系统的根基。如果你是一位框架开发者 ,那现在就会明确要想将框架与CDI及EE环境集成起来(通
过扩展)需要做哪些事情 。这也许是CDI最令人激动的特性了 。Seam 3将成为一套CDI可移植扩展,可以用在任何应用服务器上并向CDI编程模型提供扩展 ,同时能与我们感兴趣的其他技术进行集成 。目前团队正与这些项目和平台(如ESB和SOA-P)紧密合作以确保新版Seam能考虑到其特定的需求 。重要的是 ,一些项目已经认为Seam是其正确的选择,甚至都不用做任何修改 ,因此紧密与快速的集成要比想象的更容易一些 。Red
Hat已经成功将Seam应用到其所开发的一些项目当中了 。CDI将Seam的核心功能放在了坚固的根基之上 ,而我们对CDI的实现Weld是个更加专注
且测试良好的基础设施 。这意味着我们可以将Weld应用在Seam 2不适合的各种领域中 ,而这与构建Web站点无关 。我们认为JCDI非常适合于事件驱动架构的Flex RIA 。JCDI应用非常整洁 ,尽管JBoss Seam提供了大量的特性 ,但他们没必要再开发一个RIA前端了 。创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!