IJServerクラスタ未起動やネットワーク異常でクライアントからRMI-IIOPによるサーバへの接続に失敗した場合、接続のリトライが行われます。この接続に失敗した場合のリトライ間隔などを指定し、クライアントにタイムアウトが通知される時間を制御できます。
本監視機能の設定は、クライアントのJava VMでJava VMオプション(システムプロパティ)として指定します。
com.sun.corba.ee.transport.ORBTCPConnectTimeouts
設定構文 initial:max:backoff:maxsingle
項目 | 設定内容 | 値の範囲 |
---|---|---|
initial | 初期リトライ間隔(ミリ秒)。 | 1~2147483647 |
max | 全体待ち時間超過判定値(ミリ秒)。 | 1~2147483647 |
backoff | バックオフ値(整数値)。 | 1~2147483647 |
maxsingle | 一回あたりの最大リトライ間隔(ミリ秒)。 | 1~2147483647 |
250:60000:100:5000
IJServerクラスタをクライアントとして使用する場合: Java VMオプションに設定します。
-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値
アプリケーションクライアントコンテナの場合: VMARGS環境変数に設定します。
set VMARGS=-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値
VMARGS=-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値 export VMARGS
スタンドアロンクライアントの場合: Java VMオプションに設定します。
-Dcom.sun.corba.ee.transport.ORBTCPConnectTimeouts=設定値
以下の図に各リトライ間の待機時間と最大の待機時間を説明します。
RMI-IIOPによりEJBクライアントからIJServerクラスタに配備されているEnterprise Beanにアクセスしようとすると、サーバへコネクション接続が行われます。接続に失敗した場合、「initial」の時間を過ぎてからリトライします。
次のリトライまでの間隔は、リトライの回数と「backoff」の数値により長くなりますが「maxsingle」の間隔を超えません。リトライ間の待機時間の合計が「max」の全体待ち時間を過ぎていると次回のリトライが行われないため、タイムアウト時間になるまでコネクション接続が正常に完了していないと、クライアントへ例外を通知します。
例えば、initial:max:backoff:maxsingle=100:350:100:200で、コネクション接続のエラー検出まで50ミリ秒かかる場合は、以下の制御となります。
経過時間 | 待ち時間の合計 | コネクション接続に関するリトライ動作 |
---|---|---|
0 | 0 | コネクション接続試行。 |
50 | 0 | コネクション接続失敗を検出し、リトライ待ち(100ミリ秒)。 |
150 | 100 | コネクション接続試行のリトライ。 |
200 | 100 | コネクション接続失敗を検出し、リトライ待ち(200ミリ秒)。 |
400 | 300 | コネクション接続試行のリトライ。 |
450 | 300 | コネクション接続失敗を検出し、リトライ待ち(200ミリ秒)。 |
650 | 500 | コネクション接続試行のリトライ。 |
700 | 500 | コネクション接続失敗を検出し、待ち時間の合計がmaxを超過しているので、アプリケーションに例外を通知。 |
全体待ち時間を超過した後、クライアントへ以下の例外が通知されます。また、アプリケーションクライアントコンテナを使用する場合には、依存性の注入などを行うために起動時にコンテナがサーバに通信するため、以下の例外によりアプリケーションクライアントコンテナの起動に失敗します。この場合には、起動時のログに以下の例外情報が出力されているか確認してください。
javax.naming.CommunicationException: Can't find SerialContextProvider [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No]
注意
IJServerクラスタプロセス内の呼出しの場合は、RMI-IIOPが使用されませんので監視が行われません。