次のような Seam コンポーネントで @Transactional アノテーションを使用しています。
@Name( "myComponent" )
@AutoCreate
public class MyComponent
{
public void something() {
...
doWork();
}
...
@Transactional
protected void doWork() {
try {
log.debug( "transaction active: " + Transaction.instance().isActive() );
} catch (Exception ignore) {}
// some more stuff here that doesn't appear to be inside a transaction
}
}
「その他のもの」セクションでは、いくつかの Hibernate エンティティを変更していますが、例外がスローされるバグがありました。例外が原因でトランザクションがロールバックされていないことに気付きました (変更されたエンティティはデータベースで変更されたままです)。そのため、「トランザクション アクティブ」ログを追加しました。このコードを実行すると、isActive() は false を返します。
足りないものはありますか?トランザクションがアクティブでないのはなぜですか?
念のため、RESTEasy アノテーションを使用してメソッド呼び出しをトリガーする別のコンポーネント内から Seam コンポーネントを使用しています。