4.3.2 Stateful Session Bean実装時の注意事項
(1) removeメソッドまたは@Removeアノテーションを指定したメソッドによるEJBインスタンスの削除とリファレンスの解放
- ホームインタフェースを使用してStateful Session Beanを呼び出す場合,ホームインタフェースのcreateメソッドを呼び出してリファレンスを取得しますが,Session Beanの呼び出しが完了したあとに,必ずremoveメソッドを呼び出して,EJBインスタンスの削除とリファレンスを解放してください。
- ビジネスインタフェースを使用してStateful Session Beanを呼び出す場合,ビジネスメソッドの呼び出しが完了したあとに,必ず@Removeアノテーションを指定したメソッドを呼び出して,EJBインスタンスを削除し,リファレンスを解放してください。
- EJBインスタンスの削除およびリファレンスの解放をしない場合,J2EEサーバ上のメモリを消費したままの状態になります。
(2) Beanクラスの共有についての注意
同じSession Beanを同じJ2EEアプリケーション内でStateful Session Bean,およびStateless Session Beanとして同時に利用しないでください。
(3) SessionSynchronizationのインスタンスの破棄についての注意
SessionSynchronizationのbeforeCompletionメソッドおよびafterCompletionメソッドでシステム例外が発生した場合,EJBコンテナでは該当するSession Beanのインスタンスを破棄しません。
(4) setSessionContextメソッドでのjavax.transaction.UserTransactionのbeginメソッドの呼び出しについて
Stateful Session BeanのsetSessionContextメソッドでは,javax.transaction.UserTransactionのbeginメソッドを呼び出せる場合がありますが,EJBの仕様上,呼び出して使用することはできません。呼び出さないようにしてください。
(5) afterCompletionメソッドからのEnterprise Beanの呼び出しについて
Stateful Session BeanのafterCompletionメソッドからほかのEnterprise Beanを呼び出した場合,J2EEサーバモードの動作モードによって次の動作をします。
- 1.4モード:Enterprise Beanを呼び出せます。
EJBの仕様上,Stateful Session BeanのafterCompletionメソッドからほかのEnterprise Beanを呼び出せないので,呼び出さないようにしてください。