对于从 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 查询语言在
V8.5.x V6.0 中具有以下限制:
- EJB 查询语言查询从带有构成关系的键的 EJB 到看似无效并在部署时导致错误的其他 EJB。
- IBM® EJB 查询语言支持用各种方法扩展 EJB 2.x 规范,包括放宽一些限制以及添加更多 DB2® 功能的支持等。如果要考虑跨各种供应商数据库或 EJB 部署工具的便携性,那么在编写所有 EJB 查询语言查询时要注意严格遵循 EJB 2.x 规范的第 11 章中所述的指示信息。
- 对于任何 CMP 1.1 查找程序,将返回 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() 方法调用该实例时,容器才执行回滚。
- 将任何特定于应用程序的缺省值的 CMP 设置更新到 ejbCreate 中(不使用全局变量,因为 EJB 1.1 容器在调用 ejbCreate 前将所有的字段设置为一般缺省值,它将覆盖任何先前特定于应用程序的缺省值)。