目次 | 前へ | 次へ | Java Remote Method Invocation |
このセクションで説明したように、HTTP ベースのメカニズムは、RMI のトランスポート層が RMI 呼び出しに使用するもので、HTTP プロキシサーバーによるファイアウォールだけに適用されます。
java.rmi.server.RMISocketFactory
クラスの拡張が含まれます。このクラスは、クライアントソケットおよびサーバーソケットが RMI 呼び出しを送受信するために使用する、デフォルトのリソースプロバイダです。このデフォルトソケットファクトリは、ava.rmi.server.RMISocketFactory.getDefaultSocketFactory
メソッドにより取得できます。このデフォルトソケットファクトリは、次に説明する方法で透過的なファイアウォールトンネリングメカニズムを備えたソケットを作り出します。
java.net.NoRouteToHostException
または java.net.UnknownHostException
がスローされると、クライアントソケットは自動的に、直接ソケットによってアクセスできないホストへの HTTP 接続を試みます。直接ソケット接続の結果、java.net.ConnectException
など、その他の java.io.IOException
がスローされる場合、実装は HTTP 接続を試みることがあります。java.rmi.server.RMISocketFactory.createSocket
メソッドが提供します。このようなデフォルト動作をするサーバー側のソケットは、ファクトリの java.rmi.server.RMISocketFactory.createServerSocket
メソッドが提供します。
java.rmi.server.disableHttp
プロパティーをブール値 true
に等しく設定して RMI 呼び出しを HTTP 要求の形式にパッケージできなくすることができます。
サーバーのプラットフォームとネットワーク環境によっては、サーバーが実行中の Java 仮想マシンがこのような情報を利用できない場合があります。利用できないときは、ホストの完全修飾された名前はサーバーがスタートする時点で java.rmi.server.hostname
プロパティーとして指定されていなければなりません。
たとえば、次のコマンドでマシン chatsubo.javasoft.com 上の RMI サーバークラス ServerImpl
をスタートさせることができます。
java -Djava.rmi.server.hostname=chatsubo.example.com ServerImpl
/cgi-bin/java-rmi.cgiこのスクリプトによる処理内容を次に示します。
ファイアウォールを通す場合、HTTP 要求は一方向でしか開始できないため、クライアントは自分のリモートオブジェクトをファイアウォールの外側へエクスポートすることはできません。これは、ファイアウォールの外側にあるホストが、内側にあるクライアントのメソッド呼び出しを開始できないためです。