这是我的第一篇文章,并且偶尔会访问任何与 Java 相关的问题。这是一个非常有用的网站,老年人非常乐于帮助他人。
环境:Oracle、Jboss、EJB 2、休眠、MDB、MQ、CMP
我们的应用程序每天随机面临一次/两次死锁问题,所以我打开了休眠跟踪。请是高级代码
@Stateless
public class SaveData() {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
methodA(){
Method B();
em.persist(obj1);
Method C();
Method D();
em.flush();
}
methodB(){
}
methodC(){
em.persist(obj2);
}
methodD(){
em.persist(obj3);
}
} // bean结束
由于这个问题只发生在生产中,没有其他地方发生,我无法重新创建它。因此,我将添加 TransactionAttributeType.REQUIRES_NEW 以将其保留在同一事务中,现在以下是我的问题:
事务的开始是 MethodB() 和结束是 MethodD() 还是会有任何内部新事务?
如何检查事务 ID 或日志消息以了解事务的开始和结束,以确保一切都在一个事务中发生?
谢谢你的帮助。