私は jboss と cmt を使用していますが、別の Bean からループしていくつかのレコードを挿入する ejb メソッドで requires_new を使用すると、奇妙な動作が見られます。jboss を再起動した後、断続的に、メソッドの操作がメソッドの終了後に db にコミットされないことがわかります。メソッドが入力されるたびに新しいトランザクション。jboss がこのように動作することを聞いたことがある人はいますか? 私はejb、jboss、jpa、Hibernate、cmtを使用しています。
1 に答える
だから、私はついにこの問題を解決しました。この素晴らしいブログ投稿を使用しました
http://piotrnowicki.com/2011/11/am-i-in-the-same-transaction-am-i-using-the-same-persistencecontext/
REQUIRES_NEW と注釈が付けられたメソッドに入った後、実際に同じトランザクションに参加していたことを確認します。そのため、JBoss が断続的にアノテーションを無視し、代わりにデフォルトで REQUIRED になっていることがわかりました。これは、複数のクラスが同じインターフェースを実装していたためです。そこで、@Local アノテーションが付けられた 1 つのインターフェースと、REQUIRES_NEW アノテーションが付けられたメソッドがある 1 つの実装クラスを持つように単純化しました。この場合、間違っていたのは私たちのコードだったので、実際にはトランザクションを処理する Jboss の方法のバグではないことを理解しています。しかし、競合状態があるという警告がログにあまりないのは本当に奇妙です。Jboss を再起動すると、再起動前とは異なる動作が得られました。変だと思います。私は持っていない
編集:複数の実装クラスではなく、@Local アノテーションが付けられたインターフェイスのすべてのメソッドを宣言するだけです。そうしないと、JBoss が属性を無視する可能性があります