![]() |
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 ソフトウェア |