Ist es möglich, RMI bidirektional zwischen zwei Klassen?
Möchte ich einige Informationen teilen, die zwischen zwei Klassen (A und B), die in unterschiedlichen java-Programme. Statt zu schreiben ein ganzes Kommunikations-Protokoll ich möchte das java-build-in-rmi-Klassen für diesen Zweck. Derzeit der Klasse B ist in der Lage zu laufen, eine Methode, die gehört zu Klasse A aus der Ferne. Ist es irgendwie möglich den selben "Anschluss" innerhalb der Klasse Ein Aufruf einer Methode der Klasse B? Ansonsten kann ich wohl umsetzen müssen, eine zweite rmi-service ...
BR,
Markus
- Eine alternative zu RMI wäre das SIMON Rahmen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
B
implementiertRemote
, können Sie es exportieren und übergeben als parameter in einem RMI AufrufA
. In diesem Szenario gibt es keine Notwendigkeit sich zu registrierenB
in einer RMI-registry, da der client übergeben wird eine Referenz auf es explizit.Remote
ist eine automatische, "Magie geschieht hinter den kulissen." Ich werde versuchen zu finden, einen Verweis.Ich realisiert 2-Wege-RMI zwischen cleint und server mit dem server, sodass die stub mit Registry
Der folgende code gibt eine bessere Idee
Es ist schon eine Weile her, seit ich verwendet habe, RMI, aber IIRC wenn die Klasse B implementiert
java.rmi.Remote
auf und übergibt eine Referenz auf eine Instanz von sich selbst als parameter an die Methode in der Klasse A, dann Klasse A erhalten, sollte ein stub und Methoden genannt werden, berufen sich auf die ursprüngliche Instanz.Allerdings, wenn Sie haben eine Menge von solchen RMI-Aufrufe zurück anf her, Sie wahrscheinlich begegnen performance-Probleme.
Wenn Sie pass
B
als argument an eine Methode inA
und verwenden Sie dann die Referenz eine Methode aufrufen, die aufB
ich bin mir ziemlich sicher, dass eine reverse-Verbindung wird hergestellt, und ich bin mir ziemlich sicher, dass die RMI Registry erzeugt wird, für die JVM, woB
befindet. Irgendwann hat uns in ein wenig Mühe mit besonders strikte firewall-Regeln. Unser code sah ein wenig so etwas wieWeb-Server
Application Server
Wie würde der Klasse B kennen, Klasse A, ohne eine Sekunde RMI-server aber? Ich denke, Sie gehen zu müssen, zwei Server.
Beide JVMs würde der zu implementierenden RMI-services. Aber das ist wirklich sehr einfach, sehen Sie sich die verschiedenen Klassen in java.rmi.
Was Sie nicht tun können, ist irgendwie verwenden eine RMI-Verbindung und ein zwei-Wege-Kommunikation.
Einige RMI-service-support Rückrufe oder Hörer, die es erlauben, den server zum asynchronen Aufruf der client die gleiche Verbindung. (Sorry, ich erinnere mich nicht den Namen der geöffneten Bibliotheken, die dies tun, eine schnelle google war nicht sehr hilfreich)
Standard-RMI dies nicht unterstützt, Sie benötigen stattdessen setzen Sie den client als RMI-Dienst.
RMI bidirektional:
SERVER: