0

インターフェイス定義があるとしましょう。

そのインターフェースはOperationにすることができます。

次に、2 つのアプリケーションが異なる JVM で実行され、Operationインスタンスを交換することによって何らかの方法でリモート通信を行います。

それらをアプリケーションAとアプリケーションBと呼びましょう。

アプリケーションAが、アプリケーションBのクラスパスで使用できないクラスでOperationを実装する場合、アプリケーションBは引き続きそのインターフェースの実装を処理できますか? Bが別の JVM にある場合でも?

4

3 に答える 3

5

それは、「何とかリモートで通信する」部分で発生する魔法に依存します。

この通信が RMI または同様のテクノロジを介して行われる場合、これは問題ありません。アプリケーション B はOperationJVM A のオブジェクトへのリモート プロキシを作成し、このプロキシでメソッドを呼び出すと、JVM A への HTTP 要求が生成されます。これは、その JVM に存在する実際のオブジェクト (実装クラスにアクセスできる) に対して解決されます。

この通信が、オブジェクトをシリアライズしてネットワーク経由で送信することによって行われる場合、それは機能しません。アプリケーション A からのオブジェクトが JVM B に到着すると、デシリアライゼーションは失敗します (aClassNotFoundExceptionなどで)。

他のリモーティング テクノロジが存在する可能性もありますが、その場合は実装に依存します。クラスローダーはバイト配列からクラスをロードできることを知っているため、リモートソースからクラスをロードできるクラスローダーを持つことは概念的に非常に可能です。ネットワーキング ライブラリは、理論的にはこの方法でネットワークを介して実際のクラスをシリアル化できると私は信じています。そのため、JVM B は実装クラスをネイティブに認識していませんが、そのクラスローダーには必要に応じてクラスのバイトコードが提供されます。

于 2009-01-14T15:03:35.127 に答える
1

それは、「何らかの方法でリモートで通信する」という意味によって異なります。アプリケーション Aが実際にアプリケーション B に何らかの種類のトークンを渡すだけで、そのトークンがプロキシに組み込まれており、Operation インターフェースへの呼び出しがアプリケーション A にプロキシバックされるようになっている場合は、問題ない可能性があります。アプリケーション B が実装クラスのローカル インスタンスを作成することを目的としている場合、オブジェクトがどのように見えるかがわからないため、うまくいきません。

于 2009-01-14T14:59:38.147 に答える
0

共通のインターフェイスで参照しようとするだけであれば、それを処理できるはずです。どちらも同じバージョンのインターフェイスを実装している限り、実際の実装は問題ではありません。

于 2009-01-14T14:56:53.393 に答える