У меня есть два приложения, взаимодействующих через 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, но я думаю, что мы можем только идтипока что с абстракцией)