我有两个通过 RMI 通信的应用程序,一个从服务器(其中会有多个)和一个主服务器。
遵循良好的抽象设计,我想以一种方式实现从站,它不知道在与主站交谈时,它正在使用 RMI(例如,这两个应用程序也可以在同一个 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
本身就是一个Remote
会Master
回话的)。我必须明确地做一个UnicastRemoteObject.exportObject(this, 0)
(或者toStub(this)
如果它是之前导出的),但这会使Slave
类依赖于 RMI,从而破坏了设计。
此外,registerSlave
迫使我 catch RemoteException
,这也增加了 RMI 依赖性。
你会建议什么来解决这些问题?
(这也让我感到困扰,这些类必须实现 Remote,但我想我们只能在抽象方面走这么远)