RMI を介して通信する 2 つのアプリケーション、スレーブ サーバー (そのうち複数あります) とマスター サーバーがあります。
優れた抽象設計に従って、マスターと通信するときに RMI を使用していることをスレーブが認識しないようにスレーブを実装したいと思います (たとえば、2 つのアプリを同じ JVM 内で実行できるようにするため)。 :
public static void main(String[] a) {
Master ms = magicGetTheMasterFromRMI();
new Slave(ms);
}
...
class Slave {
public Slave(Master m) {
m.registerSlave(this); // PROBLEM LINE
}
}
問題: 上記の行はPROBLEM LINE
機能しません。単純にこれを渡すことができないためです (それSlave
自体は、応答する aです)。明示的に行う必要があります(または以前にエクスポートした場合) が、それによってクラスが RMI に依存し、設計が壊れます。Remote
Master
UnicastRemoteObject.exportObject(this, 0)
toStub(this)
Slave
さらに、RMI 依存関係も追加registerSlave
する catch を強制します。RemoteException
これらの問題を解決するために何を提案しますか?
(また、これらのクラスが Remote を実装しなければならないことにも悩まされていますが、抽象化でしか実現できないと思います)