2.11.5 RMI-IIOP通信のタイムアウト
EJBクライアント−CORBAネーミングサービス間,EJBクライアント−Enterprise Bean間の通信に対して,タイムアウトを設定できます。また,EJBクライアントとJ2EEサーバの間にCTMを配置している場合,通信タイムアウトは,EJBクライアント−CTM間,およびCTM−J2EEサーバ間に設定できます。
RMI-IIOPの通信のタイムアウトには,EJBコンテナがRMI-IIOPの通信基盤として利用するTPBrokerのリクエストタイムアウト機能を利用します。
タイムアウトの設定は,設定する範囲によって,定義ファイルのプロパティ,またはアプリケーションサーバが提供するAPIのどちらかで行います。
(1) タイムアウトを設定できるRMI-IIOP通信
タイムアウトを設定できるRMI-IIOP通信を,CTM連携ありの場合となしの場合について図に示し,タイムアウトの設定範囲について説明します。
RMI-IIOP通信のタイムアウトは,図のA,B,Cの3か所に設定できます。
-
Aの場合
図2-14または図2-15の,項番1.〜6.のRMI-IIOP通信すべてにタイムアウトが有効になります。タイムアウトの設定は,定義ファイルで行います。定義ファイルでの設定方法については,「2.11.8(1) RMI-IIOP通信のタイムアウトの設定(J2EEサーバおよびEJBクライアントアプリケーションの設定)」を参照してください。
-
Bの場合
図2-14または図2-15の,項番1.,2.のCORBAネーミングサービスとの通信にタイムアウトが有効になります。タイムアウトの設定は,定義ファイルで行います。定義ファイルでの設定方法については,「2.11.8(1) RMI-IIOP通信のタイムアウトの設定(J2EEサーバおよびEJBクライアントアプリケーションの設定)」を参照してください。
-
Cの場合
図2-14または図2-15の,項番4.〜6.のAPIの通信にタイムアウトが有効になります。
EJBクライアントアプリケーションでのcreate〜ビジネスメソッド〜removeまでのAPIの通信のタイムアウト時間の設定は,アプリケーション開発時にAPI(RequestTimeoutConfigFactoryクラスおよびRequestTimeoutConfigクラスのメソッド)によって設定します。APIでの設定方法については,「2.11.7 RMI-IIOP通信のタイムアウトの実装」を参照してください。
(2) 通信タイムアウトの設定範囲とタイミング
この機能による通信タイムアウトは,ORBに対して設定します。つまり,ORB配下のすべてのRMI-IIOP通信に対して設定されます。
設定のタイミングは,クライアント起動後の最初のnew javax.naming.InitialContext()実行時です。
CORBAネーミングサービスを利用しない場合でも,この機能を利用するときは,new javax.naming.InitialContext()をクライアントの処理の最初で実行してください。
(3) 通信タイムアウト発生時のクライアントの処理
クライアントからのリクエストに対してプロパティ指定値以内にレスポンスが返らない場合,該当リクエストはタイムアウトとしてキャンセルされます。この機能によって通信タイムアウトが発生した場合,java.rmi.RemoteException(org.omg.CORBA.TIMEOUT)の例外が発生します。この機能を利用するクライアントでは,Enterprise Beanのビジネスメソッド呼び出しなどで,この例外が発生することを考慮する必要があります。