JCP即将为Java EE 平台投票Java Contexts和Dependency Injection(也就是JSR-299和CDI),最终的结果将在12月10号发布。JSR-299实时参考(reference implementation)即Weld的主管Pete Muir接受了记者的采访。Pete Muir工作于JBoss,还是Seam以及Weld项目的核心开发者。他表示299 spec最终将被JCP通过。他还说,JSR-299 specification将为Java EE平台提供扩展,从而带来巨大提升(massive boost)。
Muir说,新的扩展意味着可以更简单地写入和添加应用(如excel 电子表格的生成和安全模块等)从而运行在任何支持JSR-299的容器上。之前Java EE中非常困难的一件事情是向内置的功能中构建扩展。在JSR-299之前,Java EE 6的应用循环中非常需要添加功能。Muir说,没有办法知道一个应用是开始还是终止;也没有办法知道应用中有什么Beans以及配置了哪些类。现在有了JSR-299完整的Metadata SPI,开发者可以注册Lifecycle Listeners,并且当事件发生的时候(比如class processing和bean创建)可以要求通知。Muir说,有了这些扩展许多强大的应用可以植入Java EE平台中。
那么JBoss为Java EE的扩展提供了哪些灵感呢?Muir说,我们开发Seam 并基于此设计一个新的释义(contextual dependency)注入引擎,包括Guice框架等,这些都为CDI/299提供了灵感。Seam还为Java EE提供了许多其他扩展,我们将用它们继续开发Seam 3,并作为便携式扩展向任意CDI环境中添加它们。 Muir表示Seam安全模块就是一个例子,它证明可以通过扩展向Java EE中添加解决方案。而且不只是开发商会通过JSR-299构建扩展,Muir说,任何人都可以创建扩展,可以向Java EE平台中添加额外功能,实际上可以用你认为更好的功能替代许多核心功能。无疑这将给开发者带来许多开发选择。
以下是JSR-299的一些主要特性:
Weld
* Wicket 集成(Wicket integration)
*OSGI容器的整合
* Weld的GWT集成
可用于:
* GlassFish V3
* JBoss AS 5.2.0 Beta1
* Java SE 5.0
* Tomcat 6
* Jetty 6.1 (Muir表示Jetty 7还没有测试但应该也可用)
JSR-299
它定义了一套强大的互补型服务(complementary services),用以改善应用代码的结构。
*一套良好定义的生命周期,而这套contexts 是可以扩展的。
* 一种高级的、类型安全的依赖注入(dependency injection)机制,包括无论是在配置还是开发时选择依赖的能力,而这一切并不需要太多的配置。
* 支持Java EE模块化以及Java EE组件架构(component architecture)。当在Java EE组件间解析依赖时,会考虑一个Java EE应用的模块化架构。
* 与Unified Expression Language (EL)集成,允许在JSF或者JSP页面中直接使用任何上下文对象(contextual object)。
* 修饰注射式对象(injected objects)的能力。
* 通过安全类型拦截绑定(typesafe interceptor bindings)与拦截器协同。
*一个事件通知模型。
*一个网络谈话环境(conversation context)以及由Java Servlets specification定义的三个标注的web环境
*一个SPI便携扩展用以与容器集成。(编译/王玉磊)