【问题标题】:Reliably telling stateful and stateless EJB 2.0 beans apart可靠地区分有状态和无状态 EJB 2.0 bean
【发布时间】:2012-08-09 04:39:06
【问题描述】:
我正在尝试找出一个陈旧且相当陈旧的 EJB 2.0 应用程序,未来可能会迁移到 EJB 3.x。
EJB 3.x 足以保持其 bean 定义紧凑并为重要的元数据使用注释。不幸的是,EJB 2.x 肯定更复杂,多个 XML 文件相互堆积。添加一些特定于 JBoss 的方法调用和相应的 XML 文件,结果是一团糟……
所以,从基础开始:
如何可靠地区分有状态和无状态 EJB 2.0 bean?
【问题讨论】:
标签:
java
reverse-engineering
ejb-2.x
【解决方案1】:
一条重要的信息是ejb-jar.xml 文件的内容。它可能包含明确的元素 w.r.t.一个 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 方法。