ネットワーク異常や遅延でクライアントからのリクエスト受信(送信)中、またはサーバからのレスポンス受信(送信)中に一度にデータを受信(送信)できなかった場合、受信(送信)できなかった残りのデータの読込み(書込み)がリトライされます。
本監視機能を利用することで、残りのデータの読込み(書込み)のリトライ時間を監視し、一定時間待ち合わせても、読込み(書込み)が終わらなかった場合に、タイムアウトを通知できます。
本監視機能の設定は、クライアントのJava VMまたはIJServerクラスタでJava VMオプションとして指定します。
com.sun.corba.ee.transport.ORBTCPTimeouts
設定構文
initial:max:backoff:maxsingle
項目 | 設定内容 | 値の範囲 |
---|---|---|
initial | 読込み(書込み)が可能な状態になるまでの待機時間間隔(ミリ秒)の初期値を設定します。 | 1~2147483647 |
max | 全体待ち時間超過判定値(ミリ秒)を設定します。 | 1~2147483647 |
backoff | バックオフ値(整数値)を設定します。通常は、10~100の値を設定します。待機時間間隔は、リトライごとに(backoff+100)/100を掛けた値に増加します。 例 backoffが20の場合、待機時間間隔は1.2倍、backoffが100の場合、待機時間間隔は2倍となります。 | 1~2147483647 |
maxsingle | 一回あたりの最大待機時間間隔(ミリ秒)を設定します。 | 1~2147483647 |
2000:30000: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」の全体待ち時間を超過した場合など、クライアント側のリクエスト送信処理中に異常を検出した場合は、すでにサーバ側に送信済であるリクエストデータのキャンセル処理を行います。
アプリケーションに例外が通知されなかった場合は、リクエストの送信処理に成功したと判断してください。
以下に、処理中にソケットに対する読込み/書込み待機時間を超過した場合の処理について説明します。
クライアントからのリクエスト送受信中に待機時間を超過した場合と、サーバからのレスポンス送受信中に待機時間を超過した場合で処理内容が異なります。
要求の実行はできません。サーバのサーバーログには、IOP00410229メッセージが出力されます。
クライアントでは、送信中のリクエストのキャンセル処理を行い、例外が通知されます。
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
または
java.rmi.MarshalException: CORBA COMM_FAILURE 1398079691 No; nested exception is: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 203 completed: No
対処として本監視機能の設定を変更する場合は、サーバ側で実施します。
サーバのサーバーログには、メッセージが出力されません。
クライアントとサーバの通信が切断され、クライアントにアクセスするインタフェースによりjavax.ejb.EJBExceptionまたはjava.rmi.RemoteExceptionの例外が通知されます。例外メッセージにIOP00410229メッセージが含まれています。
対処として本監視機能の設定を変更する場合は、クライアント側で実施します。
要求の実行はできません。クライアントには、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
または
java.rmi.MarshalException: CORBA COMM_FAILURE 1398079691 No; nested exception is: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 203 completed: No
このとき、接続先のサーバーログには、IOP00810211メッセージが出力されます。
対処として本監視機能の設定を変更する場合は、クライアント側で実施します。
サーバのサーバーログには、IOP00410225メッセージが出力されます。
クライアントとサーバの通信が切断され、クライアントにアクセスするインタフェースによりjavax.ejb.EJBExceptionまたはjava.rmi.RemoteExceptionの例外が通知されます。
例外メッセージにIOP00410229メッセージが含まれています。
対処として本監視機能の設定を変更する場合は、サーバ側で実施します。
注意
IJServerクラスタプロセス内の呼出しの場合は、RMI-IIOPが使用されませんので監視が行われません。
待機時間(max)の超過を検出した場合、待機時間(max)の値を増やしてください。
サーバ側で複数のリクエストを同時に処理している際に、待機時間(max)を超えた場合、後続の通信データの異常により、IOP01000001、IOP00710220、IOP00810202、IOP00810240などが通知される場合があります。