[z/OS]

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 デプロイメントおよびアクティベーション・スペックを使用したりすることがあります。

以下のプロパティーは、 アクティベーション・スペックを使用するメッセージ駆動型 Bean デプロイメントには適用されません。 つまり、これらのプロパティーを構成する際には、WebSphere MQ メッセージ駆動型 Bean デプロイメントおよびリスナー・ポートを使用するよう構成する必要があります。
  • control_region_mdb_request_timeout
  • control_region_mdb_queue_timeout_percent
  • server_region_mdb_stalled_thread_dump_action
以下のプロパティー は、アクティベーション・スペックを使用するメッセージ駆動型 Bean デプロイメントに適用されます。つまり、これらのプロパティーを構成する際には、WebSphere MQ メッセージ駆動型 Bean デプロイメントおよびアクティベーション・スペックを使用するよう構成する必要があります。
  • 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 からの応答をクライアントが待つ時間長を変更するには、以下の手順を実行します。

手順

  1. 管理コンソールで、「サーバー」>「サーバー・タイプ」>「WebSphere Application Server」>server_name>「コンテナー・サービス」>「ORB サービス」とクリックします。
  2. 「要求タイムアウト」フィールドに適切なタイマー設定値を秒単位で指定します。 デフォルト値は 180 秒です。例えば、「要求タイムアウト」フィールドに値 2 を指定すると、 タイマーの待機時間は 2 秒に設定されます。

    ディスパッチ・タイマーに指定された時間よりも大幅に短い値を指定することを推奨します。 このタイプの設定により、呼び出しをするアプリケーションは、ディスパッチ・タイマーの待機時間が終了する前に、応答しないエンタープライズ Bean を補正することができます。 ディスパッチ・タイマーの待機時間が終了した場合、EC3 ABEND が発生することがあります。

次のタスク

org.omg.CORBA.COMM_FAILURE 例外はシステム例外であるので、 エンタープライズ Bean を呼び出すアプリケーションは、期限が切れたエンタープライズ Bean 呼び出しの補正も、再試行も不要です。 しかし、アトミック・トランザクションがアプリケーションによって使用されていない場合などの状態では、アプリケーションに、期限が切れたエンタープライズ Bean 呼び出しの補正または再試行をさせることがきます。

アプリケーションに、期限が切れたエンタープライズ Bean 呼び出しの補正または再試行をさせるには、そのアプリケーションが以下の条件を満たしている必要があります。
  • 現行のグローバル・トランザクションの外部で実行している。
  • org.omg.CORBA.COMM_FAILURE 例外を catch する。
以下の例は、アトミック・トランザクションの外部で実行するコードのスニペットです。 期限が切れたエンタープライズ Bean 呼び出しの補正または再試行をアプリケーションにさせる場合に、 そのアプリケーションが実行しなければならないステップを表しています。
// 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 メソッドに組み込むのが、現行のトランザクションを中断する最良の方法です。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=trun_svr_rmi_timer
ファイル名:trun_svr_rmi_timer.html