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、インタフェース: RMIClientSocketFactoryhost - ホスト名port - ポート番号IOException - ソケットの作成時に入出力エラーが発生した場合public abstract ServerSocket createServerSocket(int port) throws IOException
createServerSocket、インタフェース: RMIServerSocketFactoryport - ポート番号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.