4.3.1 Stateless Session Bean実装時の注意事項
Stateless Session Beanを実装するときの注意事項を示します。
- 〈この項の構成〉
(1) removeメソッドによるリファレンスの解放
ホームインタフェースを使用してStateless Session Beanを呼び出す場合,ホームインタフェースのcreateメソッドを呼び出してリファレンスを取得しますが,Session Beanの呼び出しが完了したあとに,必ずremoveメソッドを呼び出してリファレンスを解放してください。リファレンスを解放しない場合,J2EEサーバ上のメモリを消費したままの状態になります。
また,removeメソッド呼び出しを不要にするオプションを指定することで,Stateless Session BeanのEJBオブジェクトに対する,removeメソッドの呼び出しが不要になります。このオプションを有効にすると,removeメソッド呼び出しのあとに,ビジネスメソッドの呼び出しができます。
このオプションを無効にしている場合は,removeメソッドを呼び出す必要があります。また,removeメソッド呼び出しのあとにビジネスメソッドを呼び出した場合,java.rmi.NoSuchObjectException例外が呼び出し元に返ります。
removeメソッド呼び出しを不要にするオプションは,usrconf.propertiesのejbserver.rmi.stateless.unique_id.enabledキーに指定し,J2EEサーバ単位に定義します。キーの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.2.3 usrconf.properties(J2EEサーバ用ユーザプロパティファイル)」を参照してください。
(2) ejbCreateメソッドおよび@PostConstructアノテーションを指定したメソッドでのリソースマネジャへのアクセスについて
EJB仕様では,ejbCreateメソッドまたは@PostConstructアノテーションを指定したメソッドで,リソースマネジャへアクセスすることは許されていません。
(3) Beanクラスの共有についての注意
同じSession Beanを同じJ2EEアプリケーション内でStateful Session Bean,およびStateless Session Beanとして同時に利用しないでください。
(4) ejbRemoveメソッドまたは@PreDestroyアノテーションを指定したメソッドでのjavax.transaction.UserTransactionのbeginメソッドの呼び出しについて
Stateless Session BeanのejbRemoveメソッドまたは@PreDestroyアノテーションを指定したメソッドでは,javax.transaction.UserTransactionのbeginメソッドを呼び出せる場合がありますが,EJBの仕様上,呼び出して使用することはできません。呼び出さないようにしてください。