J'ai deux applications communiquant via RMI, un serveur esclave (qui sera multiple) et un serveur maître. Après un bon design abstrait, je voudrais implémenter l'esclave de manière à ce qu'il ne sache pas que lorsqu'il parle au maître, il utilise RMI (pour que les deux applications puissent aussi être exécutées dans la même JVM) , par exemple):Problème de conception: RMI nécessite l'exportation explicite d'objets
public static void main(String[] a) {
Master ms = magicGetTheMasterFromRMI();
new Slave(ms);
}
...
class Slave {
public Slave(Master m) {
m.registerSlave(this); // PROBLEM LINE
}
}
problème: la ligne marquée PROBLEM LINE
ne fonctionne pas, parce que je ne peux pas passer simplement ceci (le Slave
lui-même est un Remote
qui Master
va parler de nouveau à). Je dois explicitement faire un UnicastRemoteObject.exportObject(this, 0)
(ou toStub(this)
s'il est exporté plus tôt) mais cela fait que la classe Slave
dépend de RMI, brisant la conception.
En outre, registerSlave
me force à attraper RemoteException
, qui ajoute également une dépendance RMI.
Que pourriez-vous suggérer pour résoudre ces problèmes?
(Il m'a aussi des bugs que ces classes doivent mettre en œuvre à distance, mais je suppose que nous ne pouvons aller jusqu'à l'abstraction)
Merci pour votre commentaire, et je le garderai à l'esprit. Personnellement, je pense qu'une abstraction qui fuit est meilleure que pas d'abstraction, aussi longtemps que vous connaissez la fuite. –