shared.jarには、次のものがあります。
abstract class MyParent {
}
abstract class MyClass {
MyParent getFoo();
}
server.jarには
abstract class MyChild extends MyParent {
}
abstract class MyClassConcrete {
MyParent getFoo() {return new MyChild();}
}
client.jar:
MyParent foo = myClass.getFoo();
3つのjarすべてが1つのクラスローダーにある場合、すべてが正常に機能します。
ただし、クライアントとサーバーは異なるJVMにあります。
- JVM-1に含まれるもの:server.jar、shared.jar
- JVM-2に含まれるもの:client.jar、shared.jar
クライアントがサーバーを呼び出します。サーバーはMyConcreteClassを返し、Javaはそれを逆シリアル化できません(ClassNotFoundException)。
私がしたいこと:
- サーバーはクラスをシリアル化し、データとクラスの祖先のセットを送信します
- クライアントは、逆シリアル化する可能性のある最も狭い祖先を見つけます。
そして、すべてが大丈夫です。クライアントにMyParentのインスタンスがあり、それが必要です。
そのようなエンジンがないなんて信じられません。知っていますか?リモートコールは、可能な限りローカルコールに似ている必要があります。
ありがとう。