|
RMI リリースノート |
JDK 1.2 目次 |
RMI (リモートメソッド呼び出し) に、新しい拡張機能が追加されました。リモートオブジェクト起動機能により、リモートオブジェクトへの持続的な参照がサポートされ、それらの参照を使ったオブジェクトの自動起動が可能になりました。 RMI クライアントとサーバのカスタムのソケットファクトリにより、RMI がリモートオブジェクトの呼び出し時に使用するカスタムソケットの型を、そのリモートオブジェクトから指定できます。カスタムソケットファクトリを使うと、安全なトランスポート層 (SSL など) 上で RMI をサポートできます。API の小規模な拡張により、リモートオブジェクトのアンエクスポート、オブジェクト実装スタブの取得、ローカルオブジェクト実装のスタブからの取得、特定ポート上へのオブジェクトのエクスポートが可能になりました。リモートインタフェース定義の変更点
java.rmi.Remote を継承していないインタフェースを継承できるようになりました。RemoteException の代わりに、java.rmi.RemoteException のスーパークラス (java.io.IOException や java.lang.Exception など) を使用できます。UnknownHostException エラーが発生する場合があります。このエラーにより RMI サブシステムの多重モード動作が有効になり、次の警告がコンソール (System.out) に表示されます。
*** RMI unable to listen on socket: using multiplexed connections instead ***この問題に対処するには、コントロールパネルの [ネットワーク] の [サービス] タブを選択し、[NIS サービス] を選択し、[プロパティ] ボタンをクリックします。ウィンドウの下部に表示されたアクティブネームサービスのリストから NIS を選択して、リストの下に NIS エントリが表示されるまで [下へ] ボタンを操作します。すべてのダイアログで [OK] をクリックします。最後に、再起動を求めるダイアログが表示されます。 JDK 1.2 Beta3 以降で API に加えられた変更点
unexportObject メソッドは、RemoteServer の 2 つのサブクラス java.rmi.server.UnicastRemoteObject
と java.rmi.activation.Activatable に移動しました。SocketType クラスは削除され、個々のリモートオブジェクトベースのカスタムソケットファクトリを使用する、より柔軟な機構に置き換えられました。そして、2 つの新しいインタフェース java.rmi.server.RMIClientSocketFactory
と java.rmi.server.RMIServerSocketFactory が追加されました。これは、java.rmi.server.UnicastRemoteObject
または java.rmi.activation.Activatable
オブジェクトの構築およびエクスポート時に指定できます。RMI ランタイムは指定された
RMIServerSocketFactory を使って ServerSocket を作成し、リモートオブジェクトへの呼び出しを受け取ります。リモートオブジェクトの参照には RMIClientSocketFactory への参照が含まれます。これは RMI 呼び出しでの転送時にクライアントにダウンロードされ、リモートメソッド呼び出し用のリモートオブジェクトへの接続を確立するために使用されます。SocketType 抽象クラスをカスタムのクライアントソケットファクトリおよびサーバソケットファクトリに置き換えた理由は、クライアント側のソケットファクトリをインストールする必要をなくすために、クライアントソケットファクトリをアプレットにダウンロード可能にすることでした。java.rmi.server.UnicastRemoteObject と java.rmi.activation.Activatable
のコンストラクタと exportObject メソッド は、以前は引数の 1 つに SocketType をとりましたが、代わりにカスタムソケットファクトリをパラメータにとるように変更されました。RMISocketFactory クラスは、現在は java.rmi.server.RMIClientSocketFactory
と java.rmi.server.RMIServerSocketFactory を実装しています。java.rmi.server.SocketType をパラメータにとる createSocket メソッドと createServerSocket メソッドは削除されました。UnicastRemoteObject クラスのコンストラクタと exportObject メソッドのいくつかは修正され、新しく unexportObject メソッドが追加されました。コンストラクタと exportObject メソッドは、java.rmi.server.SocketType の代わりに java.rmi.server.RMIClientSocketFactory
と java.rmi.server.RMIServerSocketFactory
を引数にとるように変更されました。unexportObject メソッドは java.rmi.server.RemoteServer から UnicastRemoteObject に移動しました。LocateRegistry クラスに新しい 2 つのクラス createRegistry と getRegistry が追加されました。createRegistry メソッドは、クライアントとサーバのカスタムのソケットファクトリを使って通信可能な、リモートオブジェクトレジストリを作成します。getRegistry メソッドは、リモートオブジェクトレジストリへの、ローカルに作成された参照を返します。リモートオブジェクトレジストリは、指定された RMIClientSocketFactory を使用して、リモートレジストリとの通信用ソケットを取得します。RMISecurityManager は、JDK 1.2 のセキュリティモデルに適合するよう更新されました。
RMISecurityManager メソッドのほとんどは、オーバーライドされていません。その理由は、このメソッドが継承している java.lang.SecurityManager のメソッドのデフォルト動作が RMISecurityManager に適しているからです。RMISecurityManager を使う場合、ポリシーファイルを使う必要があります。このファイルは、さまざまなコードベースのコードに許可されるアクセス権のリストです。RMIClassLoader クラスに、コードベースのパスとクラス名を引数にとる、2 つの新しいメソッド getClassAnnotation と loadClass が追加されました。getClassAnnotation メソッドは、リモートメソッド呼び出し時に RMI がクラス記述子とともに転送する、クラスのコードベースパスを含む文字列を返します。その呼び出しでは、パラメータ、戻り値、または例外にそのクラスのインスタンスが含まれます。コードベースパスからクラスをロードするために、loadClass メソッドが新しく追加されました。コードベースパスは、空白文字で区切られた複数の URL 文字列です。Activatable クラスに、いくつかのコンストラクタと exportObject メソッド、および 1 つの unexportObject メソッドが追加されました。新しいコンストラクタと exportObject メソッドは java.rmi.server.RMIClientSocketFactory
と java.rmi.server.RMIServerSocketFactory を引数として使用し、起動可能オブジェクトとのカスタムな通信を簡単にします。unexportObject メソッドは java.rmi.server.RemoteServer
から Activatable に移動しました。また、起動可能オブジェクトのクラスの位置を表すために、java.security.CodeSource は使用されなくなりました。代わりに、java.lang.String を使用して、クラスのバイトコードのロード元のコードベースパスを表します。コードベースパスは、空白文字で区切られた、複数の URL 文字列です。この変更により、コンストラクタと exportObject メソッドはコードベース引数として、CodeSource の代わりに String をとります。java.lang.String
を使うようになったため、ActivationDesc コンストラクタはコードベース引数として、java.security.CodeSource の代わりに String をとるよう変更されました。一貫性のために、getCodeSource メソッドは getLocation に名前が変更されました。java.lang.String を使うようになったため、ActivationGroupDesc コンストラクタはコードベース引数として、java.security.CodeSource の代わりに String をとります。一貫性を保つために、getCodeSource メソッドは getLocation にリネームされました。ActivationGroupDesc はまた、グループの実行環境とプロパティを指定するための新しい手法をサポートしています。新しい、ネストされたクラス java.rmi.activation.ActivationGroupDesc.CommandEnvironment により、rmid が使用するコマンドとオプションを指定して特定の起動グループを起動させることができます。java.rmi.server.randomIDs が追加されました。このプロパティが true の場合は、ObjID (リモートオブジェクト参照に含まれる) には暗号法的に安全な乱数が格納されます。このプロパティのデフォルトは false です。このプロパティを true に設定すると、最初の ObjID の生成時に、安全な乱数ジェネレータがシード値を決定する時間のために数秒間の遅延が生じます。java.rmi.server.hostname プロパティが指定されておらず、しかもローカルホストの完全指定されたドメイン名が取得できない場合は、RMI はローカルホストの IP アドレスを使用するようになりました。RMI が必ずデフォルトでホスト名を使用するようにするには、java.rmi.server.useLocalHostname プロパティを true に設定する必要があります。useLocalHostname プロパティのデフォルトは、false です。toImpl メソッドは削除されました。その理由は、このメソッドを安全に使うには、あまりにも多くの制限が必要だからです。getRef が追加されました。このメソッドは、リモートオブジェクトへのリモート参照型、 java.rmi.server.RemoteRef を返します。
unexportObject メソッドにパラメータ force が追加され、オペレーションが成功したかどうかを示すブール値を返すようになりました。exportObject メソッドが、RemoteStub の代わりに Remote を返すようになりました。その理由は、将来の RMI の実装でさらに柔軟性が得られるからです。restart をとる 2 つのコンストラクタが追加されました。再起動モードを設定すると、RMI 起動デーモンの起動時にオブジェクトが再起動します。設定しないと、オブジェクトは要求されたときに起動します。getRestartMode は、オブジェクトの再起動モードを返します。restart パラメータをとる、新規コンストラクタを追加しました。register メソッドは、RemoteStub の代わりに Remote を返すようになりました。その理由は、将来の RMI の実装でさらに柔軟性が得られるからです。
inactive メソッドは、オブジェクトが正常に起動解除されたかどうかを示すブール値を返すようになりました。オブジェクトは、実行中や実行待ちの呼び出しがなければ起動解除できます。exportObject メソッドが追加されました。これは最初のメソッドに似ていますが、別のパラメータ restart をとります。このパラメータはオブジェクトの再起動モードを示します。shutdown メソッドが追加されました。また、新オプション -stop が rmid に追加されました。このオプションは、デフォルトまたは指定のポートで実行中の ActivationSystem の shutdown メソッドを呼び出します。inactiveObject メソッドは、オペレーションが成功したかどうかを示すブール値を返すようになりました。| Copyright ©
1995-98 Sun Microsystems, Inc. All Rights
Reserved.
コメントの送付先: rmi-comments@java.sun.com |
Java ソフトウェア |