这是我的第一篇文章&偶尔访问任何类型的Java相关问题。这是一个非常有用的网站,老年人非常善于帮助他人。
环境:Oracle,Jboss,EJB 2,hibernate,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 end
因为这个问题只发生在生产和生产中。没有别的地方,我无法再创造它。所以我将添加TransactionAttributeType.REQUIRES_NEW以使其保持在同一个事务中,现在我的问题如下:
交易的开始是MethodB()&结尾是MethodD()还是会有任何内部新事务?
如何检查交易ID或日志消息以便启动&交易结束以确保一次交易中发生的一切事情?
感谢您的帮助。
答案 0 :(得分:0)
交易的开始是MethodB()&结尾是MethodD()还是会有任何内部新事务? 无。交易从A& amp;也在那里结束,因为它在内部调用其他方法。您还没有明确指定任何事务属性,因此默认值为Required
。因此,同一事务将通过其他方法传播。
如何检查交易ID或日志消息以便启动&交易结束,以确保一次交易中发生的一切? 如果CMT不确定如何验证,但是如果您想要监控&明确地管理它,你可以拥有BMT。然后你就可以开始&手动结束交易。