你们中有些人可能已经知道Java EE 7规范的Public Final Draft版本已经发布 。 除此以外,此版本的Java EE还引入了EJB规范的EJB 3.2版本。 与EJB 3.1规范相比,EJB 3.2具有一些新功能。 我在这里引用EJB 3.2规范中的文本,总结了新功能:
Enterprise JavaBeans 3.2体系结构扩展了Enterprise JavaBeans,以包括以下新功能和对早期EJB API的简化:
- 在此发行版中,以下功能的支持成为可选的,其描述移至单独的EJB可选功能文档:
- EJB 2.1和更早版本的Entity Bean组件协定,用于容器管理的持久性
- EJB 2.1和更早版本的Entity Bean组件协定,用于Bean管理的持久性
- EJB 2.1和更早版本的实体Bean的客户端视图
- EJB QL:容器管理的持久性查询方法的查询语言
- 基于JAX-RPC的Web服务端点
- JAX-RPC Web服务客户端视图
- 向EJB 3.2 Lite添加了对本地异步会话Bean调用和非持久EJB计时器服务的支持。
- 取消了获取当前类加载器的限制; 使用Java I / O软件包时,将“必须”替换为“应谨慎行事”。
- 为有状态会话Bean的生命周期回调拦截器方法添加了一个选项,该选项将在由生命周期回调方法的transaction属性确定的事务上下文中执行。
- 添加了一个选项来禁用有状态会话Bean的钝化。
- 扩展了TimerService API,以查询同一EJB模块中的所有活动计时器。
- 删除了对javax.ejb.Timer和javax.ejb.TimerHandle引用的限制,这些限制仅在bean内部使用。
- 宽松的默认规则,用于将会话Bean的已实现接口指定为本地或远程业务接口。
- 增强了标准激活属性列表。
- 通过实现AutoClosable接口增强了可嵌入的EJBContainer。
可以看出,建议的某些更改是次要的。 但是有一些有用的重大更改。 我们将在本文中介绍几个这样的更改。
1)新的API TimerService.getAllTimers()
EJB 3.2版本在javax.ejb.TimerService接口上引入了一个名为getAllTimers的新方法。 以前,TimerService接口具有(并且仍然具有)getTimers方法。 期望getTimers方法返回活动计时器,该活动计时器适用于调用了该方法的TimerService的bean(请记住:每个EJB有一个TimerService)。
在这个新的EJB 3.2版本中,预期新添加的getAllTimers()方法将返回适用于*同一EJB模块中的所有bean *的所有活动计时器。 通常,EJB模块对应于EJB jar,但如果将EJB打包在.war中,它也可以是.war部署。 这个新的getAllTimers()方法是一种方便的API,适合需要在该bean所属的EJB模块内查找所有活动计时器的用户应用程序。
2)能够禁用有状态bean的钝化
那些熟悉EJB的人会知道EJB容器为有状态Bean提供钝化(将有状态Bean的状态存储到某些辅助存储)和激活(将有状态Bean的保存状态加载)功能。 但是,如果用户应用程序希望这样做,则以前的EJB版本没有可移植的方式来禁用状态Bean的钝化。 新的EJB 3.2版本引入了一种方法,用户应用程序可以确定有状态的bean是否可以被钝化。
默认情况下,有状态Bean被认为具有“钝化能力”(类似于EJB的旧版本)。 但是,如果用户想禁用某些状态Bean的钝化支持,则用户可以选择通过注释或通过ejb-jar.xml部署描述符禁用它。 进行注释的方法就像将@ javax.ejb.Stateful注释上的passivationCapable属性设置为false一样简单。 就像是:
@javax.ejb.Stateful(passivationCapable=false) // the passivationCapable attribute takes a boolean value public class MyStatefulBean { .... }
在ejb-jar.xml中执行以下操作:
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" version="3.2"> <enterprise-beans> <session> <ejb-name>foo-bar-bean</ejb-name> <ejb-class>org.myapp.FooBarStatefulBean</ejb-class> <session-type>Stateful</session-type> <!-- passivation-capable element takes either a true or a false value --> <passivation-capable>false</passivation-capable> </session> ... </enterprise-beans> </ejb-jar>
ejb-jar.xml中需要注意的两个重要事项是ejb-上的version = 3.2属性(以及http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd模式位置) jar根元素和session元素下的具有钝化能力的元素。 因此,如果您愿意的话,使用这两种方法都可以使您对有状态Bean禁用钝化。
JBoss AS8中的Java EE 7和EJB 3.2支持:
自从该规范的Public Final Draft版本发布以来,JBoss AS8就一直增加了对Java EE 7的支持。 已经添加并提供了对EJB 3.2的支持。 Java EE 7的其他一些更改也使其适用于最新的JBoss AS 8版本。 要跟踪JBoss AS8中Java EE 7的变化,请关注JIRA https://issues.jboss.org/browse/AS7-6553 。
要总体上使用Java EE 7或特别是EJB 3.2的已实现功能,可以从此处下载JBoss AS的最新夜间版本/二进制文件。 试试看,让我们知道如何进行。 对于任何反馈,问题或者您遇到任何问题,请随时在我们的用户论坛开一个话题在这里 。
参考:来自Jaikiran My Wiki博客的JCG合作伙伴 Jaikiran Pai 在JBoss AS 8中支持Java EE 7和EJB 3.2 。
翻译自: https://www.javacodegeeks.com/2013/03/java-ee-7-and-ejb-3-2-support-in-jboss-as-8.html