HTTP による RMI のトンネル化の設定
Remote Method Invocation (RMI) は、1 つのオブジェクトからリモートオブジェクトにあるメソッドを同じ構文で直接起動できるようにする、Java のミドルウェアです。RMI では、基本となる通信を処理し、パラメータのアクセス方法を決定し、メソッド呼び出しに必要なデータのシリアル化を実現してクライアントとサーバー間でデータを転送できるようにします。
Windchill アプレットは、Java RMI を使用して Windchill サーバーと直接通信します。
|
このセクションの情報は、HTTP と HTTPS の両方に関連しています。
|
RMI サーバーのホストおよびポートとクライアントの間で直接の TCP/IP ソケット接続を確立できない場合は、RMI 呼び出しを HTTP プロトコルで転送できます。Java RMI 仕様はこのトンネル化に関して明記していますが、デフォルト Java 実装は一部の Java システムプロパティ設定に依存します。したがって、RMI は自動的にはフェイルオーバーしません。
Windchill 内部の RMI サーバーは、ソケットファクトリをコンフィギュレーション可能にしてこの制限を克服します。ソケットファクトリは、クライアントとサーバーの間の RMI 通信に使用されます。HTTP による RMI のトンネル化をサポートする Windchill ブートストラップパッケージ (boot.jar) に備えられたソケットファクトリを使用できます。Windchill RMI サーバーによってエクスポートされるソケットファクトリを制御する次のプロパティがデフォルトとして設定されています。
wt.rmi.clientSocketFactory=wt.boot.WTRMIMasterSocketFactory
|
HTTP による RMI のトンネル化は次の場合にのみ有効です。
• クライアント JAR の 1 つとして boot.jar が含まれている。つまり、boot.jar が Windchill アプレットに自動的に含まれる。
• boot.jar がクライアントのクラスパスにインストールされている (JRE の lib/ext ディレクトリなど)。
インストールされていない場合は、RMI サーバーのホストとポートへの直接の RMI ソケット接続のみがサポートされます。
|
Windchill には、ソケットファクトリ WTRMIMasterSocketFactory が含まれます。これにより、J2SE のデフォルトの接続フェイルオーバーロジックが以下のように改善されました。このソケットファクトリは、
• システムプロパティに関係なく HTTP および HTTPS による RMI 呼び出しのトンネル化をサポートします。
• Java RMI CGI と互換性のあるプロキシスクリプトのコンフィギュレーション可能な URL パスをサポートします。
• すべてのソケットファクトリに非同期の接続を試行して、初期接続における合計接続時間を短縮します。
WTRMIMasterSocketFactory は、一連のセカンダリソケットファクトリを使用して RMI サーバーに接続します。以下の場合に接続フェイルオーバーが使用されます。
1. WTRMIMasterSocketFactory には、必要な操作を実行するための特定の権限がありません。インストール済みのデフォルトソケットファクトリが代わりに使用されます。
2. wt.boot.socketFactory システムプロパティがクライアントで読み取られ、設定内に含まれる完全修飾クラスが RMISocketFactory のインスタンスを作成できる場合は、そのソケットファクトリがクライアントのサーバー通信に使用されます。
3. クライアントのコンフィギュレーション可能なソケットファクトリが失敗すると、そのソケットファクトリは直接ソケット接続を開始します (wt.boot.WrappedRMIDirectSocketFactory)。
4. 直接ソケット接続が失敗するか、フェイルオーバータイムアウトの時間 (wt.boot.failoverTimeout で定義される時間) 内に完了しなかった場合は、クライアントが HTTP プロキシサーバー (wt.boot.WrappedRMIHttpToPortSocketFactory) を使用していれば、ソケットファクトリが RMI ターゲットポートに対して HTTP 接続を開始します。
5. HTTP のポートへの接続が失敗するか、フェールオーバータイムアウトの時間内に完了しなかった場合は、クライアントコードベース (wt.boot.WTRMIHttpToCodebaseSocketFactory) で指定されるサーバーの Java RMI CGI ゲートウェイへの HTTP 接続が開始されます。
6. HTTP のコードベースへの接続が失敗するか、フェールオーバータイムアウトの時間内に完了しなかった場合は、デフォルト Java RMI CGI プロキシ (wt.boot.WrappedRMIHttpToCGISocketFactory および wt.boot.WTRMIHttpsToCGISocketFactory) への HTTP および HTTPS 接続 (任意) が同時に開始されます。
正常に完了した最初の接続タイプが使用され、結果として生じるソケットファクトリがそのホストへの今後の接続にすべて再使用されます。