对于从 EJB 1.1 转换为 EJB 2.x 的项目,必须执行一些步骤才能将现有 EJB 1.1 代码迁移到 EJB 2.x。
注: EJB 2.x bean 只在 EJB 2.x 项目中受支持(但是 2.x 项目也支持 1.1 bean)。
- 对于任何 CMP 1.1 bean,将每个 CMP 字段替换为抽象 getXXX 和 setXXX 方法。(然后,需要将 bean 类抽象化。)
- 对于任何 CMP,为主键创建抽象 getXXX 和 setXXX 方法。
- 对于任何 CMP 1.1 finder 方法,为每个 finder 方法创建 EJBQL(EJB 查询语言)方法。
注: “EJB 查询语言”在
Rational® Application
Developer V6.0 中具有下列局限性:
- 涉及具有某些键(这些键由与其它 EJB 的关系组成)的 EJB 的“EJB 查询语言”查询将显示为无效,并且会在部署时导致错误。
- IBM® EJB
查询语言支持以各种方式扩展 EJB 2.x 规范,包括放松某些限制及添加对更多 DB2® 函数的支持等等。如果在各种供应商数据库或 EJB 部署工具之间的可移植性非常重要,则编写所有“EJB 查询语言”查询时应当小心,要严格按照
EJB 2.x 规范的第 11 章中的指示信息进行。
- 对于任何 CMP 1.1 finder,返回 java.util.Collection 而不是 java.util.Enumeration。
- 对于任何 CMP 1.1 bean,在 ejbCreate() 和整个代码的其它任何地方,将所有出现的 this.field = value 更改为 setField(value)。
- 为非应用程序异常更新异常处理(回滚行为):
- 抛出 javax.ejb.EJBException 而不是
java.rmi.RemoteException 以报告非应用程序异常。
- 在 EJB 2.x 和 1.1 中,由实例抛出的所有非应用程序异常导致回滚执行了实例的事务以及废弃该实例。
- 为应用程序异常更新异常处理(回滚行为):
- 在 EJB 2.x 和 1.1 中,应用程序异常不会导致容器自动回滚事务。
- 在 EJB 1.1 中,仅当对实例的 EJBContext 对象使用 setRollbackOnly() 方法调用了实例时,容器才执行回滚。
- 更新 ejbCreate 中特定于应用程序的缺省值的任何 CMP 设置
(不使用全局变量,因为在调用 ejbCreate 覆盖先前的特定于应用程序的缺省值之前,EJB 1.1
容器将所有字段设置为类属缺省值)。