目次|前|次 | 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要求は一方向でしか開始できないため、クライアントは自分のリモート・オブジェクトをファイアウォールの外側へエクスポートすることはできません。これは、ファイアウォールの外側にあるホストが、内側にあるクライアントのメソッド呼出しを開始できないためです。