ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Java EE運用ガイド

3.7.3 IIOP通信ソケットの送受信待機時間監視機能

ネットワーク異常や遅延でクライアントからのリクエスト受信(送信)中、またはサーバからのレスポンス受信(送信)中に一度にデータを受信(送信)できなかった場合、受信(送信)できなかった残りのデータの読み込み(書き込み)がリトライされます。
この送受信処理に失敗した場合のリトライ間隔などを指定し、クライアントにタイムアウトが通知される時間を制御できます。

本監視機能の設定は、クライアントのJava VMまたはIJServerクラスタでJava VMオプションとして指定します。


プロパティ名:

com.sun.corba.ee.transport.ORBTCPTimeouts

設定値:

設定構文    initial:max:backoff:maxsingle

項目

設定内容

値の範囲

initial

初期リトライ間隔(ミリ秒)。

1~2147483647

max

全体待ち時間超過判定値(ミリ秒)。

1~2147483647

backoff

バックオフ値(整数値)。
リトライごとに、リトライ間隔は(backoff+100)/100を掛けた値に増加します。例えば、20の場合は1.2倍、100の場合は2倍となります。
通常は、10~100の値を設定します。

1~2147483647

maxsingle

一回あたりの最大リトライ間隔(ミリ秒)。

1~2147483647

デフォルト値:

2000:6000:20:2147483647

設定方法:
  • IJServerクラスタの場合: Java VMオプションに設定します。

    -Dcom.sun.corba.ee.transport.ORBTCPTimeouts=設定値
  • アプリケーションクライアントコンテナの場合: VMARGS環境変数に設定します。

    set VMARGS=-Dcom.sun.corba.ee.transport.ORBTCPTimeouts=設定値

    VMARGS=-Dcom.sun.corba.ee.transport.ORBTCPTimeouts=設定値
    export VMARGS
  • スタンドアロンクライアントの場合: Java VMオプションに設定します。

    -Dcom.sun.corba.ee.transport.ORBTCPTimeouts=設定値

以下の図に各リトライ間の待機時間と最大の待機時間を説明します。



RMI-IIOPによりEJBクライアントからIJServerクラスタに配備されているEnterprise Beanに要求を発行すると、クライアントはリクエストデータをソケットに書き込み、サーバはリクエストデータをソケットから読み込みます。また、サーバがクライアントにレスポンスを返す際には、サーバはレスポンスデータをソケットに書き込み、クライアントはレスポンスデータをソケットから読み込みます。
このソケットへの書き込み(読み込み)処理の途中で、書き込み(読み込み)できない状態が「initial」の時間を超過した場合、残りのデータの書き込み(読み込み)処理をリトライします。
次のリトライまでの間隔は、リトライの回数と「backoff」の数値により長くなりますが「maxsingle」の間隔を超えません。「max」の全体待ち時間を過ぎても、書き込み(読み込み)が完了しなければ、警告メッセージを通知し、コネクションを切断します。
なお、サーバ側でのリクエスト受信時およびクライアント側でのリクエスト送信時に「max」の全体待ち時間を超過した場合など、クライアント側のリクエスト送信処理中に異常を検出した場合は、すでにサーバ側に送信済であるリクエストデータのキャンセル処理を行います。キャンセル処理が正しく行われた場合、リトライ可能であると判断し、リクエストデータを先頭から再送します。
アプリケーションに例外が通知されなかった場合は、リクエストの再送処理に成功したと判断してください。


以下に処理中にソケットに対する読み込み(書き込み)の待機時間を超過した場合の処理について説明します。
クライアントからのリクエスト送受信中に待機時間を超過した場合と、サーバからのレスポンス送受信中に待機時間を超過した場合で処理内容が異なります。

クライアントからのリクエスト受信中に待機時間(max)を超過した場合

要求の実行はできません。サーバのサーバーログには、メッセージが出力されません。
クライアントでは、送信中のリクエストのキャンセル処理を行います。キャンセル処理が正しく行われた場合、リトライ可能と判断し、リクエストデータを再送します。リトライ不可と判断した場合、例外が通知されます。
EJBのビジネスインタフェースを使用している場合には、以下の例外メッセージを持つjavax.ejb.EJBException例外が通知されます。

java.rmi.MarshalException: CORBA COMM_FAILURE 1398080289 Maybe; nested exception is:
 org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 801 completed: Maybe

または

java.rmi.MarshalException: CORBA COMM_FAILURE 1398079696 Maybe; nested exception is:
 org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 208 completed: Maybe
サーバからのレスポンス受信中に待機時間(max)を超過した場合

サーバのサーバーログには、メッセージが出力されません。
クライアントとサーバの通信が切断され、クライアントにアクセスするインタフェースによりjavax.ejb.EJBExceptionまたはjava.rmi.RemoteExceptionの例外が通知されます。例外メッセージにIOP00410229メッセージが含まれています。

クライアントからのリクエスト送信中に待機時間(max)を超過した場合

要求の実行はできません。サーバのサーバーログには、IOP00810211メッセージが出力されます。
クライアントには、IOP00410225メッセージを出力し、送信済みのデータがあればキャンセル処理を行います。キャンセル処理が正しく行われた場合、リトライ可能と判断し、リクエストデータを再送します。
リトライ不可と判断した場合、例外が通知されます。EJBのビジネスインタフェースを使用している場合には、以下の例外メッセージを持つjavax.ejb.EJBException例外が通知されます。

java.rmi.MarshalException: CORBA COMM_FAILURE 1398079713 No; nestedexception is:
org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 225  completed: No
サーバからのレスポンス送信中に待機時間(max)を超過した場合

サーバのサーバーログにIOP00410225メッセージが出力されます。
クライアントとサーバの通信が切断され、クライアントにアクセスするインタフェースによりjavax.ejb.EJBExceptionまたはjava.rmi.RemoteExceptionの例外が通知されます。
例外メッセージにIOP00410229メッセージが含まれています。

注意

  • IJServerクラスタプロセス内の呼出しの場合は、RMI-IIOPが使用されませんので監視が行われません。

  • 待機時間(max)の超過を検出した場合、待機時間(max)の値を増やしてください。

  • サーバ側で複数のリクエストを同時に処理している際に、待機時間(max)を超えた場合、後続の通信データの異常により、IOP01000001、IOP00710220、IOP00810202、IOP00810240等が通知される場合があります。