我正在尝试找出一个陈旧且相当陈旧的 EJB 2.0 应用程序,未来可能会迁移到 EJB 3.x。
EJB 3.x 足以保持其 bean 定义紧凑,并为重要的元数据使用注释。不幸的是,EJB 2.x 肯定更复杂,多个 XML 文件相互堆积。添加一些特定于 JBoss 的方法调用和相应的 XML 文件,结果是一团糟……
所以,从基础开始:
如何可靠地区分有状态和无状态 EJB 2.0 bean?
我正在尝试找出一个陈旧且相当陈旧的 EJB 2.0 应用程序,未来可能会迁移到 EJB 3.x。
EJB 3.x 足以保持其 bean 定义紧凑,并为重要的元数据使用注释。不幸的是,EJB 2.x 肯定更复杂,多个 XML 文件相互堆积。添加一些特定于 JBoss 的方法调用和相应的 XML 文件,结果是一团糟……
所以,从基础开始:
如何可靠地区分有状态和无状态 EJB 2.0 bean?
一个重要的信息是ejb-jar.xml
文件的内容。它可能包含明确的元素 wrt bean 是否有状态。
对于有状态 bean:
<session>
...
<ejb-name>TestBean</ejb-name>
...
<ejb-class>com.example.TestBean</ejb-class>
<session-type>Stateful</session-type>
...
</session>
对于无状态 bean:
<session>
...
<ejb-name>TestBean</ejb-name>
...
<ejb-class>com.example.TestBean</ejb-class>
<session-type>Stateless</session-type>
...
</session>
其他重要的迹象可以在 bean 实现中找到。根据 EJB 2.0 规范,第 7.5.3 节:
无状态会话 bean不得实现 SessionSynchronization 接口。
从第 7.8 节开始,关于无状态 bean:
会话 bean 类必须定义一个不带参数的单一 ejbCreate 方法。