![[z/OS]](../images/ngzos.gif)
RMI/IIOP エンタープライズ Bean 要求の完了用制限時間の設定
要求のタイムアウト ORB サービス設定により、 アウトバウンド RMI/IIOP エンタープライズ Bean 呼び出しの応答をクライアントが待つ時間を決定します。 この設定は、各 IIOP の位置指定に適用されるサーバー全体に及ぶ設定であり、エンタープライズ Bean 呼び出しの結果として送信される要求メッセージです。 指定された制限時間が経過すると、アウトバウンド RMI/IIOP エンタープライズ Bean を呼び出したアプリケーションは、org.omg.CORBA.COMM_FAILURE のシステム例外を受信します。
始める前に
WebSphere® Application Server バージョン 7 以降では、リスナー・ポートは推奨されていません。したがって、リスナー・ポートを使用する WebSphere MQ メッセージ駆動型 Bean のデプロイメント構成を、アクティベーション・スペックを使用する構成にマイグレーションする計画を立てる必要があります。ただし、このマイグレーションを開始する前に、アプリケーションを WebSphere Application Server バージョン 7 より前のアプリケーション・サーバーで実行する必要がないことを確認してください。場合によっては、WebSphere MQ メッセージ駆動型 Bean デプロイメントおよびリスナー・ポートを引き続き使用したり、WebSphere MQ メッセージ駆動型 Bean デプロイメントおよびアクティベーション・スペックを使用したりすることがあります。
- control_region_mdb_request_timeout
- control_region_mdb_queue_timeout_percent
- server_region_mdb_stalled_thread_dump_action
- control_region_wlm_dispatch_timeout
- control_region_iiop_queue_timeout_percent
- server_region_iiop_stalled_thread_dump_action
指示に従ってこれらのプロパティーを構成する 際、どのプロパティーがリスナー・ポートに適用され、どのプロパティーがアクティベーション・スペックに 適用されるのかを意識してください。
- ディスパッチ・タイマーのすべてに対する設定を決定します。メッセージ駆動型 Bean (MDB) (control_region_mdb_request_timeout)、HTTP 要求 (protocol_http_timeout_output)、 HTTPS リクエスト (protocol_https_timeout_output)、SIP 要求 (protocol_sip_timeout_output)、 SIPS 要求 (protocol_sips_timeout_output)、および IIOP 要求 (control_region_wlm_dispatch_timeout) には、 別個のディスパッチ・タイマーがあります。 エンタープライズ Bean 呼び出しは、アプリケーションが MDB、サーブレット、または別のエンタープライズ Bean の下で稼働中に発生するので、RMI/IIOP アウトバウンド・タイマーのインターバル設定が、これらのディスパッチ・タイマーのインターバル設定よりも短いことを確認する必要があります。
- 呼び出し側の観点から、エンタープライズ Bean のリモート呼び出しは同期していることを理解します。 したがって、呼び出し側がエンタープライズ Bean からの応答を待つ間、呼び出しスレッドはブロックされます。 RMI/IIOP タイマーが切れると、呼び出しスレッドは割り込まれ、システム例外応答がある呼び出し側へ戻ります。 呼び出された EJB からの応答は、RMI/IIOP タイマー切れの後に到着した場合は、無視されます。
- RMI/IIOP アウトバウンド・タイマーとトランザクションの関係を理解します。 RMI/IIOP アウトバウンド・タイマーが切れ、システム例外が呼び出し側に戻されると、 EJB コンテナーは既存のグローバル・トランザクションをロールバック専用状態にします。 しかし、ターゲットのエンタープライズ Bean のトランザクションがロールバックとしてマークされていても、呼び出し側はターゲットのエンタープライズ Bean からの応答を返します。
このタスクについて
BBOO0325W An IIOP request for Class Name 'com.ejb.test.hello.second.EJSRemoteStatelessSayHelloSecond_686a0ff2'
and Method Name 'sayHelloTwo', to 'jobname=BBOS002 asid=0031', has timed out. SessionHandle=0000000026D9F0480000000A008004FF, Request ID=00000004
このメッセージは、ターゲットのエンタープライズ Bean のクラスおよびメソッドを示しています。 ターゲットのエンタープライズ Bean が TCP/IP で呼び出された場合、 このメッセージの「to」セクションにはターゲット・サーバーのホスト名とポートが含まれます。 ターゲットのエンタープライズ Bean が最適化されたローカル通信を介して呼び出された場合、 このメッセージの「to」セクションには、前述の例のようにターゲットのジョブ名と ASID が含まれています。
/bbooejsb.cpp+3395 ... BBOO0011W The function ORBEJSBridge::invoke_request(JNIEnv *, bboojorb *,
char *, CORBA::Boolean, CORBA::Request *&, void *)+3395 received CORBA system exception CORBA::COMM_FAILURE.
Error code is C9C26A48
このトレース・エントリーのマイナー・コード C9C26A48 は、 RMI/IIOP アウトバウンド・タイマーの待機時間が終了したことを示します。
BBOO0328I: インバウンド GIOP 応答に対する要求は見つかりませんでした。
SessionHandle=<hstring>, RequestID=<hstring>.
要求 または応答はセッション・ハンドルや要求 ID によって一意的に識別され、 この要求に対して以前に BBOO0325W メッセージが受信されたかどうかの判断に 使用されます。
呼び出されたエンタープライズ Bean からの応答をクライアントが待つ時間長を変更するには、以下の手順を実行します。
手順
次のタスク
org.omg.CORBA.COMM_FAILURE 例外はシステム例外であるので、 エンタープライズ Bean を呼び出すアプリケーションは、期限が切れたエンタープライズ Bean 呼び出しの補正も、再試行も不要です。 しかし、アトミック・トランザクションがアプリケーションによって使用されていない場合などの状態では、アプリケーションに、期限が切れたエンタープライズ Bean 呼び出しの補正または再試行をさせることがきます。
- 現行のグローバル・トランザクションの外部で実行している。
- org.omg.CORBA.COMM_FAILURE 例外を catch する。
// This method runs outside a global transaction.
public Data callingMethod() throws … {
try{
InitialContext con = new InitialContext();
EJBHome home con.lookup(...);
CalledBean cb = home.create();
} catch (org.omg.CORBA.COMM_FAILURE cf1){
// The home create could timeout, so put retry or
// compensation logic here.
} catch( CreateException cx){
throw new ...
} catch( NamingException nx){
throw new ...
} catch(RemoteException ex){
throw new ...
}
try{
cb.calledMethod(…);
} catch (org.omg.CORBA.COMM_FAILURE cf2){
// The calledMethod could timeout, so put retry or
// compensation logic here.
} catch( … ){
…
}
}
// This method can run in a global transaction.
private void calledMethod(String strKey) throws … {
try{
// business logic here
}
catch ( … ){
throw new ...
}
}
アトミック・トランザクションの有効範囲内で実行されるアプリケーションは、 そのアプリケーションに、期限が切れたエンタープライズ Bean 呼び出しの補正または再試行をさせる場合、 エンタープライズ Bean を呼び出す前にそのトランザクションを中断します。 この呼び出しは、TX_NOTSUPPORTED エンタープライズ Bean メソッドに組み込むのが、現行のトランザクションを中断する最良の方法です。