Java 嵌套事务是否在方法完成后释放锁?

Java 嵌套事务是否在方法完成后释放锁?,java,ejb,openjpa,websphere-7,Java,Ejb,Openjpa,Websphere 7,我使用WebSphere7和OpenJPA 以下是两个bean和persistence.xml的一部分: jdbc/ASAPDB @PersistenceContext(unitName=“ASAP_Main”) 私人实体管理者; @消息驱动 公共类A实现MessageListener{ @EJB 私人B,; @TransactionAttribute(TransactionAttributeType.REQUIRED) 消息(消息消息)上的公共无效{ b、 processWithLock(

我使用WebSphere7和OpenJPA

以下是两个bean和persistence.xml的一部分:


jdbc/ASAPDB
@PersistenceContext(unitName=“ASAP_Main”)
私人实体管理者;
@消息驱动
公共类A实现MessageListener{
@EJB
私人B,;
@TransactionAttribute(TransactionAttributeType.REQUIRED)
消息(消息消息)上的公共无效{
b、 processWithLock(message.getObject());
...
}
}
@无国籍
公共B级{
@TransactionAttribute(TransactionAttributeType.REQUIRED)
带锁的公共无效进程(对象obj){
em.lock(obj)
...
}
}

processWithLock执行后是否释放锁?

您的MDB定义了事务边界,EJB B只参与A启动的事务。嵌套事务是不同的


所有数据库锁都会一直保持,直到事务提交或回滚,此时.onMessage()返回。因此,当在全局事务中调用时,processWithLock在执行后不会释放锁。

entityManager从何而来?请显示您的
persistence.xml
。请添加
processWithLock
的完整源代码。不相关的注释,但。。。所有这些注释。所有这些假定的思考都在继续。我只是从JPA开始,但是。。。以这种方式管理数据的性能税似乎应该很高。@Berylium感谢您编辑我的帖子,我添加了persistence.xml而没有实体。谢谢您的回答,如果我想让processWithLock释放锁,我应该添加REQUIRES_NEW注释吗?
REQUIRES_NEW
将以新的方式执行注释方法,单独交易。因此,是的,当方法返回时,锁将被释放。但是MDB和EJB的事务是相互独立的(一个可以失败并回滚,另一个成功,反之亦然)。也许对你来说没关系。