ネットワーク異常や遅延でクライアントからのリクエスト受信(送信)中、またはサーバからのレスポンス受信(送信)中に一度にデータを受信(送信)できなかった場合、受信(送信)できなかった残りのデータの読み込み(書き込み)がリトライされます。
この送受信処理に失敗した場合のリトライ間隔などを指定し、クライアントにタイムアウトが通知される時間を制御できます。
本監視機能の設定は、クライアントのJava VMまたはIJServerクラスタでJava VMオプションとして指定します。
com.sun.corba.ee.transport.ORBTCPTimeouts
設定構文 initial:max:backoff:maxsingle
項目 | 設定内容 | 値の範囲 |
---|---|---|
initial | 初期リトライ間隔(ミリ秒)。 | 1~2147483647 |
max | 全体待ち時間超過判定値(ミリ秒)。 | 1~2147483647 |
backoff | バックオフ値(整数値)。 | 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」の全体待ち時間を超過した場合など、クライアント側のリクエスト送信処理中に異常を検出した場合は、すでにサーバ側に送信済であるリクエストデータのキャンセル処理を行います。キャンセル処理が正しく行われた場合、リトライ可能であると判断し、リクエストデータを先頭から再送します。
アプリケーションに例外が通知されなかった場合は、リクエストの再送処理に成功したと判断してください。
以下に処理中にソケットに対する読み込み(書き込み)の待機時間を超過した場合の処理について説明します。
クライアントからのリクエスト送受信中に待機時間を超過した場合と、サーバからのレスポンス送受信中に待機時間を超過した場合で処理内容が異なります。
要求の実行はできません。サーバのサーバーログには、メッセージが出力されません。
クライアントでは、送信中のリクエストのキャンセル処理を行います。キャンセル処理が正しく行われた場合、リトライ可能と判断し、リクエストデータを再送します。リトライ不可と判断した場合、例外が通知されます。
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
サーバのサーバーログには、メッセージが出力されません。
クライアントとサーバの通信が切断され、クライアントにアクセスするインタフェースによりjavax.ejb.EJBExceptionまたはjava.rmi.RemoteExceptionの例外が通知されます。例外メッセージにIOP00410229メッセージが含まれています。
要求の実行はできません。サーバのサーバーログには、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
サーバのサーバーログにIOP00410225メッセージが出力されます。
クライアントとサーバの通信が切断され、クライアントにアクセスするインタフェースによりjavax.ejb.EJBExceptionまたはjava.rmi.RemoteExceptionの例外が通知されます。
例外メッセージにIOP00410229メッセージが含まれています。
注意
IJServerクラスタプロセス内の呼出しの場合は、RMI-IIOPが使用されませんので監視が行われません。
待機時間(max)の超過を検出した場合、待機時間(max)の値を増やしてください。
サーバ側で複数のリクエストを同時に処理している際に、待機時間(max)を超えた場合、後続の通信データの異常により、IOP01000001、IOP00710220、IOP00810202、IOP00810240等が通知される場合があります。