【51CTO精选译文】EJB 3.1规范的主要目标是使EJB尽可能简单,其核心思想是简化EJB架构同时引入新的功能,EJB 3.1中一些重要的变化包括:
51CTO编辑推荐:Java EE 6遥遥无期 预览版两极分化
移除了本地事务接口:EJB 3.0移除了复杂的本地和远程接口,为简单旧式Java接口(plain old Java interface,POJI)开路,EJB 3.1更进了一步,事务接口也不用再强制遵循了,类似于POJO,如JPA中的实体和消息驱动Beans,在Java EE 6中,开发者可以不用事务接口编写会话Beans了:
- @Stateless
- public class StockQuoteBean {
- public double getStockPrice(String symbol) {
- ...
- }
- }
引入了Singleton Beans:引入Singleton beans概念主要是为了共享应用数据和支持一致性访问,当一个Bean被标记为Singleton时,在整个应用层容器只能保证每个JVM共享一个实例,对于缓存这一规定是行之有效的,Singleton beans和其它EJB一样,它们是开发人员可以通过注解将它们标记为Singleton beans的POJO。
默认情况下,所有Singleton beans都是事务性和线程安全的,具有灵活的并发性选项,Java EE 6也引入了并发性注解在getter和setter函数上执行锁定的读/写操作。
- @Singleton
- @Startup
- public class CounterBean {
- private int count;
- @PostConstruct
- public void initialize() {
- count=5;
- }
- }
直接用WAR文件打包EJB组件:EJB 3.1中一个重要的改进是可以直接将EJB组建打包到WAR文件中,不用再独立创建jar文件了,EJB 3.1为Web应用程序提供了一个简化的打包机制,图1显示了EJB 3.1以前的打包方式。
图 1 EJB 3.1之前的打包方式(EJB 3.0打包结构)
使用EJB 3.1后,开发人员可以直接将classes目录下的EJB和servlets一起打包到WAR文件中,图2显示了EJB 3.1的打包方式。
图 2 EJB 3.1打包方式结构图
在Java SE环境中嵌入API执行EJB:这个特性背后的思想是允许EJB在Java SE环境中运行,即客户端和EJB在相同的JVM中运行,为了运行EJB,Java EE 6提供了一个嵌入式EJB容器,使用JNDI进行检查,这为测试,批处理过程和在桌面应用程序中使用EJB提供了便利,嵌入式EJB容器提供了一个管理EJB的环境,这个环境支持有限的服务,javax.ejb.EJBContainer类表示一个嵌入式容器。
异步会话Beans:一个支持异步函数调用的会话Bean,使用@Asynchronous注解的Bean函数是异步调用的,在EJB 3.1之前,在会话Bean上的任何函数调用都是同步的。异步函数可以返回一个java.util.concurrent API的Future
EJB Lite:许多企业级应用不需要EJB完整的功能,因此在EJB 3.1中引入了EJB Lite,它是EJB API的一个子集,EJB Lite包括了创建一个企业级应用的所有功能,但不包括专业的API。EJB Lite提供了厂家选项,让厂家可以在它们自己的产品中实施EJB API的子集,使用EJB Lite创建应用程序可以部署到任何支持EJB的服务器上,不管它是完整的EJB还是EJB Lite,嵌入式容器也支持EJB Lite,EJB Lite有以下EJB API子集:
◆会话Bean组件(Stateless,stateful和singleton会话Bean)
◆只支持同步调用
◆容器管理和Bean管理事务
◆声明和编程安全
◆截取器
◆支持部署描述信息(ejb-jar.xml)
图3中显示的EJB Lite支持的功能在完整的EJB中也全部支持。
图 3 EJB 3.1 Lite和EJB 3.1完整版支持的功能对比
原文:New Features in Java EE 6
作者:Sangeetha S.
【编辑推荐】