2.18.1 Session Synchronizationをアノテーションで設定する方法
CMTでトランザクションを管理している場合,トランザクションの管理はコンテナによって実行されます。この場合,トランザクションの開始や終了を実装することなくアプリケーションを開発できます。コンテナによる管理では,メソッドの開始直前にトランザクションが開始され,メソッドの終了直後にトランザクションがコミットして終了します。
コンテナによるトランザクションの開始・終了の前後に特定の処理を実行したい場合は,Session Synchronizationの機能を使用します。Session Synchronizationの機能は,次のどちらかの方法で使用できます。
-
javax.ejb.SessionSynchronizationインタフェースを実装する方法
-
アノテーションを指定する方法
アノテーションを指定する方法は,EJB 3.1以降で使用できます。アノテーションを指定すると,javax.ejb.SessionSynchronizationインタフェースの実装をしないで,トランザクションの開始・終了前後で処理を実行するタイミングを設定できるため,アプリケーションの開発が容易になります。
ここでは,アノテーションを使用する場合の指定について説明します。使用できるアノテーションを次に示します。
- @AfterBegin
-
新しいトランザクションが開始されたことを通知するアノテーションです。このアノテーションを指定した処理は,トランザクションの開始後,ビジネスメソッドを呼び出す直前にコンテナによって呼び出されます。
- @BeforeCompletion
-
ビジネスメソッドの実行が完了したことを通知するアノテーションです。このアノテーションを指定した処理は,ビジネスメソッドの完了後,トランザクションがコミットする直前に呼び出されます。ビジネスメソッドで実施した処理をロールバックしたい場合は,このタイミングでsetRollbackOnlyメソッドを呼び出す必要があります。
- @AfterCompletion
-
トランザクションが完了したことを通知するアノテーションです。このアノテーションを指定した処理は,トランザクションの完了直後に呼び出されます。
このアノテーションには,パラメタとして,trueまたはfalseを指定できます。trueを指定した場合,トランザクションがコミットすると処理が実行されます。falseを指定した場合,トランザクションがロールバックすると処理が実行されます。
これらのアノテーションは,Stateful Session Beanのクラス(またはその親クラス)に指定できます。それぞれのSession Beanでは,これらのアノテーションを種類ごとに一つずつ指定できます。