JSR-299的修订公开草案现已发布。该草案由EE 6专家组成员提供意见,旨在解决围绕299与EE平台其他部分之间关系的一些批评。
术语和名称更改
规范名称——以及一些术语——已更改,以更好地反映299的重点是定义适用于所有EE组件类型的通用服务,而不是创建一个新的组件模型。
新的规范名称为Java上下文和依赖注入。术语“web bean”在规范中不再使用。
移除可插拔性合同
从规范中移除了独立的概念web bean管理器
。现在假设299定义的功能始终由Java EE或可嵌入的EJB Lite容器提供。不再可能创建299的可插拔实现。
这有助于解决规范中的许多问题,并实现了一些功能改进。
请注意,管理器框架集成SPI仍然存在,并且仍然可以通过299将第三方框架与Java EE集成。
重新打包
299定义的API已分解为以下包
- 作用域和上下文javax.context
- 依赖注入服务javax.inject
- 框架集成SPIjavax.inject.manager
- 事件通知服务javax.event
有关更多信息,请参阅附录C。
注入所有Java EE资源类型
现在可以使用类型安全的299风格注入注入Java EE资源、远程EJB引用、Web服务引用、持久性上下文和持久性单元。例如,我们可以这样注入持久性上下文:
@UserDatabase EntityManager entityManager;
位置@UserDatabase是一种绑定类型。
有关更多信息,请参阅规范中的3.6节。
异步和分布式事件通知
事件观察者现在可以异步接收事件通知。请参阅7.5.7节。
事件类型现在可以映射到JMS主题,使与状态同步相关的事件能够在集群内或应用层之间传播。请参阅7.8节。
元数据继承规则和通用Bean实现的说明
在全新的第4章中,Bean之间元数据继承的规则已经得到了明确定义。此外,现在有一个框架提供的通用Bean的新概念,为其他Bean提供模板,这些Bean在某个系统中实现了它。
因此,299认可两种不同的代码复用特殊模式:特殊化和实现。
规范现在具有迄今为止最复杂的注解和基于XML的元数据复用和覆盖方案。然而,这些规则虽然用规范语言解释起来有些复杂,但在实际应用中应该是相当透明的。
在未来(EE 7?),299中定义的元数据设施可以扩展以包括其他元数据,包括EJB和JAX-RS元数据。我非常期待我们能够弃用现有的EJB部署描述符格式的那一天。
对活动的支持
现在,第三方框架,特别是编排引擎,可以注册仅在一定范围的活动
中应用的Bean,例如,工作流任务、业务流程或Web交互。请参阅11.6节。
注入点元数据
引入了注入点接口,使某些特殊的注入情况成为可能。有关更多信息,请参阅5.6节。
拦截API的统一
最后,我现在与Ken Saks,EJB 3.1规范负责人合作,制作一个封装并概括目前由EJB定义的拦截器功能和299定义的扩展的单个文档。为了反映这一计划,拦截器/装饰器章节已移至附录A,并最终将从规范中删除。
我们可能会用299中简单Bean
的定义进行类似的过程,但这仍然是正在讨论的事情。
结论
感谢所有参与最新草案制作的人,以及所有参与围绕299未来发展的艰难而复杂的谈判的人。我知道所有参与的人都曾在某些时候感到沮丧,但最终结果是一个更好的规范和一个更好的EE 6平台。