3.12 EJB利用時の注意事項
(1) JNDI名前空間の指定について
JNDI名前空間に指定するEnterprise Beanの名称は,次のどれかの形式で指定してください。
- JNDI名前空間の直接指定
(例)HITACHI_EJB/SERVERS/MyServer/EJB/UserInfo/UserInfoBean※1
- リソース名(java:comp/env形式)による指定
(例)java:comp/env/ejb/UserInfoService※2
- EJBHomeオブジェクトリファレンスの別名付与(ユーザ指定名前空間機能)による指定
(例)UserInfo※3
- 注※1
- 指定例では,J2EEサーバ名称を「MyServer」,J2EEアプリケーション名を「UserInfo」,Enterprise Bean名称を「UserInfoBean」としています。
- 注※2
- 指定例では,WebアプリケーションでのEJBリファレンス名称を「ejb/UserInfoService」としています。
- 注※3
- 指定例では,EJBHomeオブジェクトリファレンスの別名付与でEJBリファレンス名称を「UserInfo」としています。
JNDI名前空間については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」を参照してください。
(2) EJBからSOAPサービスを呼び出す場合の注意事項
Stateful Session BeanおよびEntity Beanを利用する場合は,トランザクション(コンテナ管理トランザクションまたはBean管理トランザクション)の指定に関係なく,SOAPサービスへの要求,受信処理はトランザクションの制御外となります。したがって,トランザクションがロールバックされる場合でも,SOAPサービスへのリクエストは必ず実行されます。
(3) EJBをSOAPサービスのエンドポイントとして利用する場合の注意事項
- SOAPサービスのエンドポイントとして利用できるのは,EJB 2.1までです。EJB 3.0以降は利用できません。
- ホームインタフェースに引数ありのcreateメソッドは使用できません。引数ありと引数なしのcreateメソッドが存在する場合は,引数なしのcreateメソッドが呼び出されます。引数なしのcreateメソッドがホームインタフェースにない場合は,次のメッセージが返されます。
KDCCP0004-EのC4Fault(SOAP Fault)メッセージ
- Stateful Session BeanおよびEntity Beanを利用する場合,トランザクション(コンテナ管理トランザクションまたはBean管理トランザクション)の指定に関係なく,クライアントへの応答処理はトランザクションの制御外となります。したがって,トランザクションがロールバックされる場合でも,クライアントへの応答は必ず実行されます。
- Entity Beanを利用する場合,ファインダメソッド(findByPrimaryKeyなど)は利用できません。
- SOAPアプリケーションから呼び出すEJBの内容を変更した場合,J2EEアプリケーションのRMI-IIOPインタフェースおよびRMI-IIOPスタブを再取得し,WSDLを再生成する必要があります。ただし,呼び出すEJB内のメソッドの引数の数,データ型,および戻り値に変更がない場合は,再取得する必要はありません。
- SOAPアプリケーションから呼び出すEJBを実装したEJB-JARファイルと,SOAPアプリケーションのWARファイルを同じJ2EEアプリケーションに含める場合は,J2EEアプリケーションのRMI-IIOPインタフェースおよびRMI-IIOPスタブをSOAPアプリケーションのWARファイルに含めないでください。
- リモートインタフェースを利用する場合はメソッドのthrows節にjava.rmi.RemoteExceptionを定義しなければなりません。ユーザ定義例外を定義する場合は,「3.6.2 Java例外からWSDLへのマッピング」を参照してください。
- throws節にjava.rmi.RemoteExceptionを定義していない場合
Java2WSDLコマンドによってKDCCC0228-Wのメッセージが出力され,処理は続行されます。
- throws節にjava.rmi.RemoteExceptionおよびユーザ定義例外のどちらでもない例外を定義した場合
Java2WSDLコマンドによってKDCCC0229-Wのメッセージが出力されます。この例外はwsdl:fault要素にマッピングされません。
- ローカルインタフェースを利用する場合はメソッドのthrows節にjava.rmi.RemoteExceptionを定義しないでください。ユーザ定義例外を定義する場合は,「3.6.2 Java例外からWSDLへのマッピング」を参照してください。
- throws節にjava.rmi.RemoteExceptionを定義した場合
Java2WSDLコマンドによってKDCCC0230-Wのメッセージが出力され,処理は続行されます。
- throws節にユーザ定義例外以外の例外(java.rmi.RemoteExceptionを除く)を定義した場合
Java2WSDLコマンドによってKDCCC0229-Wのメッセージが出力されます。この例外はwsdl:fault要素にマッピングされません。
(4) ラウンドロビンポリシーによるCORBAネーミングサービスの検索機能を使用する場合の注意事項
ラウンドロビンポリシーによるCORBAネーミングサービスの検索機能を使用する場合,サービスデプロイ定義を再作成してください。ラウンドロビンポリシーによるCORBAネーミングサービスの検索については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」を参照してください。
(5) EJBHomeオブジェクトリファレンスの別名付与(ユーザ指定名前空間機能)を使用する場合の注意事項
ユーザ指定名前空間機能を使用する場合,CORBAネーミングサービスの監視機能が持つ,無効なキャッシュ領域を定期的にクリアする機能を利用することを推奨します。ユーザ指定名前空間機能,および無効なキャッシュ領域のクリアについては,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」を参照してください。
(6) DeployScopeに関する注意事項
SOAPサービスのDeployScopeを「Session」にする場合,クライアント側の処理ではセッションを終了する際にremoveメソッドを呼び出してください。「Session」以外のDeployScopeの場合,クライアント側の処理ではremoveメソッドを呼び出さないでください。