0

私はRMI/JAVAを初めて使用し、Oracleのサイト http://docs.oracle.com/javase/tutorial/rmi/client.htmlでrmiチュートリアルを使用していました。

Client.piクラスになるまで、すべてを追跡することができました。最初の行は、タスクインターフェイスをインポートするためのコードです。importcompute.Task

私の質問は、Javaがタスクインターフェイスをどこから取得するかをどのように知るのかということです。これはサーバー上の非リモートインターフェイスであるため、インポート方法について少し混乱しています。

4

2 に答える 2

0

クライアント API jar の一部として、Task インターフェイスをリモート インターフェイス (Compute) とともに提供します。

通常、あらゆる種類の RMI サーバー システムを設計する場合、サーバー API とサーバー実装 (API に依存) の 2 つのモジュールが必要になります。次に、サーバーの RMI クライアントを構築しているすべての人にサーバー API jar を提供します。

于 2012-08-28T16:26:44.393 に答える
0

インターフェイスはクライアント コードとサーバー コードのTask両方に共通であるため、クライアントとサーバーの両方にコピーが必要です。

Pi実装はTask、クライアントが利用できる必要があります。理想的には、サーバーはクライアントのタスクを認識すべきではないため、独自のコピーを持つべきではありません。そのため、クライアントの RMI は、オブジェクト ストリーム内のクラスに、コードをロードできる URL で注釈を付けます。サーバーは、このアノテーションを使用して実装クラスを動的にロードします。実装クラスは、サーバー インスタンスの起動後に書き込まれた可能性があります。

これは巧妙なパーティ トリックですが、リモート コードのロードを安全に行うのは難しい場合があります。を に設定すると、この機能java.rmi.server.useCodebaseOnlytrue無効になります。これを強くお勧めします。

于 2012-08-28T16:31:08.510 に答える