Hibernate 创始人和 Seam 项目领导人 Gavin King 最近发表了一个文章系列的第一篇,该系列阐述了他在 Java EE 6 中所希望看见的新特性。Gavin 列表中的第一条提议是为无状态和有状态 Session Bean 提供更多的并发模式(Concurrecy Modes)。对此他提出了三个方案:
- 无并发模式(No concurrency),缺省模式,也是当前支持的方式:Bean 不支持并发客户。如果两个请求同时到达,允许容器抛出 ConcurrentAccessException 异常。
- Bean 管理的并发模式(Bean-managed concurrency):Bean 支持由多个线程引发的并发访问,负责管理对可变数据结构的访问。
- 容器管理的并发模式(Container-managed concurrency):Bean 支持并发客户端,容器负责保证线程在进入 Bean 实现之前按次序排队。
Gavin 提出的第二条提议是轻量级异步性(Lightweight Asynchronicity)。他主张,目前 JMS 和 EJB 定时器的可选方案不足。此外,他提倡每个 Bean 拥有多个 @Timeout 方法,以及增强的调度选项。第三条提议则是有状态 Web 服务端点(Stateful Web Service Endpoint):
……目前只有无状态 Session Bean 才能做为 Web 服务端点。通过 WS-Contexts 或 WS-Addressing(或者任意合适的 WS-*),我们就能支持担当 Web 服务端点角色的有状态 Session Bean。我还不清楚到底这会是什么样子,但我们在 Seam/WS 中进行的一些尝试可能会和它有所关联……
Gavin 的愿望表还包括可选 EJB 业务接口(Optional Business Interfaces for EJBs)、简化的 JMS/JavaMail、增强 Logging 注射(Enhanced Loggin Injection)和 EJB Meta-Annotatons。对于可选业务接口,他认为:
目前 EJB 强制要求所有 Session Bean 都必须有 @Local 或者 @Remote 接口。当 Session Bean 存在于业务层内,并且业务逻辑和客户代码之间存在一个良好定义的 API 时,这并不是一个不合理的规定。……尤其在类似 Seam 的环境中,Bean 的唯一客户可能只是一个带有 EL 表达式的 JSF 页面,此时接口则是完全多此一举的!……接口应当是可选的,当它不存在时,Bean 类的 public 方法应当作为 Session Bean 的业务方法……
评论