EJB 3.1事务传播

时间:2012-06-14 12:27:32

标签: transactions db2 ejb locks propagation

我有3个EJB无状态bean。 A - 在业务层。 B,C - 持久层。

Bean A调用B和C来更新数据库(DB2)中的一些数据。

但不幸的是,在调用bean C时,数据库锁。 B和C可能在不同的交易中执行吗?否则我无法理解DB2锁定的原因......

2 个答案:

答案 0 :(得分:0)

如果您使用hibernate作为持久性提供程序,那么它会在业务方法上提供名为@TransactionAttribute(REQUIRES_NEW)的事务注释。此批注在单独的事务中运行该方法。所以我认为在JPA中应该有替代方案。但不确定。

答案 1 :(得分:0)

我有JBoss AS 7。 我有两个实体Employer和EMployee。员工与雇主有联系。

我有

@Stateless
EployerService {
 ....
 public void lockEmployer (long id) {
    Employer employer = employerDAO.findById(id);
    employer.setLocked(true);
    employerDAO.updateEmployer(employer);
    employeeDAO.updateEmployeesByEmployerId(id);
 }  
}
在EmployeeDAO中

updateEmployeesByEmployerId (long empId) {
   em.createQuery("update Employee set locked = true where emplopyerId=:id").setParameter("id", empId).executeUpdate();

}

在EmployerDAO

udpateEmplopyer(Employer employer) {
  em.merge(employer);
}

当我把两个dao中的所有逻辑放在一个DAO中时 - 没有锁!