【发布时间】:2011-04-12 16:41:54
【问题描述】:
我有两个通过 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 强制我捕获 RemoteException,这也增加了 RMI 依赖。
您建议如何解决这些问题?
(这些类必须实现 Remote 也让我很困扰,但我想我们只能在抽象方面走这么远)
【问题讨论】:
标签: java oop rmi abstraction leaky-abstraction