これは私の最初の投稿であり、Java関連のあらゆる種類の問題について時々訪れています。これはとても便利なサイトで、先輩たちがとても親切に他の人を助けてくれます。
環境:Oracle、Jboss、EJB 2、休止状態、MDB、MQ、CMP
アプリケーションで1日に1回または2回ランダムにデッドロックの問題が発生しているため、Hibernateトレースをオンにしました。高レベルのコードをお願いします
@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);
}
}//ビーンエンド
この問題は本番環境でのみ発生しており、他の場所では発生していないため、再現できませんでした。そこで、TransactionAttributeType.REQUIRES_NEWを追加して、同じトランザクションに保持します。次に、私の質問を示します。
トランザクションの開始はMethodB()であり、終了はMethodD()ですか、それとも内部に新しいトランザクションがありますか?
トランザクションIDまたはログメッセージでトランザクションの開始と終了をチェックして、すべてが1つのトランザクションで発生していることを確認するにはどうすればよいですか。
ご協力いただきありがとうございます。