public abstract class RMISocketFactory extends Object implements RMIClientSocketFactory, RMIServerSocketFactory
RMISocketFactory
のインスタンスは、RMI呼出しのクライアント・ソケットおよびサーバー・ソケットを取得するためにRMIランタイムが使用します。アプリケーションは、setSocketFactory
メソッドを使って、RMIランタイムに対して、デフォルトの実装の代わりにソケット・ファクトリのインスタンスを使うように要求することができます。
デフォルトのソケット・ファクトリの実装では、3段階でクライアント・ソケットを作成する方法を取っています。最初に、リモートのVMに対して直接ソケット接続を試みます。その試みが(ファイアウォールのために)失敗した場合には、RMIのランタイムは、サーバーのポート番号を明示してHTTPを使用します。ファイアウォールがそのような種類の通信を許可しない場合には、サーバー上のcgi-binスクリプトに対するHTTPが、RMI呼出しをPOSTするために使用されます。HTTPトンネリング・メカニズムはデフォルトで無効になっています。この動作はjava.rmi.server.disableHttp
プロパティによって制御されており、そのデフォルト値はtrue
です。このプロパティの値をfalse
に設定すると、HTTPトンネリング・メカニズムが有効になります。
非推奨: HTTPトンネリング。前述のHTTPトンネリング・メカニズム(具体的には、ポートを明示したHTTPおよびcgi-binスクリプトに対するHTTP)は非推奨です。これらのHTTPトンネリング・メカニズムは、プラットフォームの今後のリリースで削除される可能性があります。
デフォルトのソケット・ファクトリの実装では、ワイルドカード・アドレスにバインドされるサーバー・ソケットが作成されます。これによって、すべてのネットワーク・インタフェースからの要求が受け入れられます。
RMISocketFactory
クラスを使用して、特定のアドレスにバインドされるサーバー・ソケットを作成し、要求元を制限できます。たとえば、次のコードはサーバー・ソケットをIPv4ループバック・アドレスにバインドするソケット・ファクトリを実装します。これによって、RMIはローカル・ホストからの要求のみを処理するように制限されます。
class LoopbackSocketFactory extends RMISocketFactory {
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port, 5, InetAddress.getByName("127.0.0.1"));
}
public Socket createSocket(String host, int port) throws IOException {
// just call the default client socket factory
return RMISocketFactory.getDefaultSocketFactory()
.createSocket(host, port);
}
}
// ...
RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());
生成されたスタブが適切なネットワーク・インタフェースに接続できるようにするには、java.rmi.server.hostname
システム・プロパティを127.0.0.1
に設定します。コンストラクタと説明 |
---|
RMISocketFactory()
RMISocketFactory を構築します。 |
修飾子と型 | メソッドと説明 |
---|---|
abstract ServerSocket |
createServerSocket(int port)
指定ポート用のサーバー・ソケットを作成します。ポート0は匿名ポートを示します。
|
abstract Socket |
createSocket(String host, int port)
指定されたホストとポートに接続されるクライアント・ソケットを作成します。
|
static RMISocketFactory |
getDefaultSocketFactory()
このRMIの実装に使用される、デフォルトのソケット・ファクトリへの参照を返します。
|
static RMIFailureHandler |
getFailureHandler()
setFailureHandler メソッドによって設定されたソケット作成エラー・ハンドラを返します。 |
static RMISocketFactory |
getSocketFactory()
setSocketFactory メソッドによって設定されたソケット・ファクトリを返します。 |
static void |
setFailureHandler(RMIFailureHandler fh)
サーバー・ソケットの作成が失敗した場合に、RMIのランタイムが呼び出すエラー・ハンドラを設定します。
|
static void |
setSocketFactory(RMISocketFactory fac)
リモート・オブジェクトが特定のクライアント・ソケット・ファクトリまたはサーバー・ソケット・ファクトリに関連付けられていない場合に、RMIがソケットを取得するグローバル・ソケット・ファクトリを設定します。
|
public abstract Socket createSocket(String host, int port) throws IOException
createSocket
、インタフェース: RMIClientSocketFactory
host
- ホスト名port
- ポート番号IOException
- ソケットの作成時に入出力エラーが発生した場合public abstract ServerSocket createServerSocket(int port) throws IOException
createServerSocket
、インタフェース: RMIServerSocketFactory
port
- ポート番号IOException
- サーバー・ソケットの作成時に入出力エラーが発生した場合public static void setSocketFactory(RMISocketFactory fac) throws IOException
fac
- ソケット・ファクトリIOException
- RMIソケット・ファクトリがすでに設定されている場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckSetFactory
メソッドでこの操作が許可されていない場合。getSocketFactory()
, SecurityManager.checkSetFactory()
public static RMISocketFactory getSocketFactory()
setSocketFactory
メソッドによって設定されたソケット・ファクトリを返します。ソケット・ファクトリが設定されていない場合はnull
を返します。setSocketFactory(RMISocketFactory)
public static RMISocketFactory getDefaultSocketFactory()
getSocketFactory
からnull
が返された場合に、RMIランタイムによって使用されます。public static void setFailureHandler(RMIFailureHandler fh)
セキュリティ・マネージャが存在する場合、この操作が許可されるように、このメソッドは最初にセキュリティ・マネージャのcheckSetFactory
メソッドを呼び出します。この結果、SecurityException
になることがあります。
fh
- エラー・ハンドラSecurityException
- セキュリティ・マネージャが存在し、そのcheckSetFactory
メソッドでこの操作が許可されていない場合。getFailureHandler()
, RMIFailureHandler.failure(Exception)
public static RMIFailureHandler getFailureHandler()
setFailureHandler
メソッドによって設定されたソケット作成エラー・ハンドラを返します。setFailureHandler(RMIFailureHandler)
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.