6.1 利用 OpenJPA)。迁移完成后,应考虑使用 JTA 实体管理器将应用程序重构到 EJB 3.0。
对于分离实体,还应注意:如果在一个事务中检索对象,然后在事务外部修改该分离对象,则必须调 用该对象的更新才能将其再保存到数据库。这是 Hibernate 和 OpenJPA 中常见的编程方法。类似地,如 果您检索对象,并在同一事务中修改该对象,则无需调用该对象的更新,就可以将其保存到数据库;提交 事务后,该对象会自动写入数据库。此方法也是 Hibernate 和 OpenJPA 的常见编程方法。
Hibernate 约定
在 Hibernate 中,EJB 2.1 的分离实体按照以下方式进行映射:
使用会话 facade 模式包装实体。
将分离实体 (POJO) 返回到 Web 层。
清单 9. EJB2.1 中的 Hibernate 分离实体
public class CustomerFacadeBean implements SessionBean, CustomerFacade{
public Customer createCustomer( Customer customerEntity ) {
ORMHelper.openSession ();
try {
ORMHelper.beginTransaction();
ORMHelper.create (customerEntity);
ORMHelper.commitTransaction();
return customerEntity;
} catch (RuntimeException ex) {
ORMHelper.rollbackTransaction();
throw ex;
} finally {
ORMHelper.closeSession();
}
}
public Customer updateCustomer( Customer customerEntity ) {
ORMHelper.openSession();
try {
ORMHelper.beginTransaction();
ORMHelper.update(customerEntity);
ORMHelper.commitTransaction();
return customerEntity;
} catch (RuntimeException ex) {
ORMHelper.rollbackTransaction();
throw ex;
} finally {
ORMHelper.closeSession();
}
}
public Customer getCustomer( Long customerId ) {
ORMHelper.openSession();
try {
ORMHelper.beginTransaction();
Customer customerEntity;
customerEntity = ORMHelper.retrieve(Customer.class,customerId);
ORMHelper.commitTransaction();
return customerEntity;
} catch (RuntimeException ex) {
ORMHelper.rollbackTransaction();
throw ex;
} finally {
ORMHelper.closeSession();
}
}
public void deleteCustomer( Customer customerEntity ) {
ORMHelper.openSession();
try {
ORMHelper.beginTransaction();
ORMHelper.delete(customerEntity);
ORMHelper.commitTransaction();
} catch (RuntimeException ex) {
ORMHelper.rollbackTransaction();
Throw ex;
} finally {
ORMHelper.closeSession();
}
}
...
}
将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一)(9)
时间:2011-09-18 Donald Vines
OpenJPA 约定
在 OpenJPA 中,EJB 3.0 的分离实体按照以下方式进行映射:
使用会话 facade 模式包装实体。
将分离实体 (POJO) 返回到 Web 层。
清单 10. EJB 3.0 中的 OpenJPA 分离实体
@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class CustomerFacadeBean implements CustomerFacade {
public Customer createCustomer( Customer customerEntity ) {
ORMHelper.openSession();
try {
ORMHelper.beginTransaction();
ORMHelper.create(customerEntity);
ORMHelper.commitTransaction();
return customerEntity;
} catch (RuntimeException ex) {
ORMHelper.roll
|