Ich habe eine Java-Anwendung, an der ich jetzt ein oder zwei Jahre gearbeitet habe. Ich möchte eine sehr einfache Menge von Schnittstellen erstellen, die ich verwenden kann, um meine Java-Anwendung von einer anderen JVM (z. B. MATLAB) zu steuern (mit dem Potenzial, Komplexität später hinzuzufügen).
Ich gehe davon aus, dass RMI der beste Weg ist, dies zu tun, aber ich bin mir nicht sicher, da ich so gut wie nichts darüber weiß.
Was ist der beste Weg, RMI schnell zu lernen?
Nehmen wir an, ich möchte eine Schnittstelle wie folgt verwenden:
%Vor%Wie kann ich eine Brücke zwischen den beiden JVMs mit dieser Schnittstelle mithilfe von RMI implementieren? Was muss ich über Blockierung / Threading / Synchronisation wissen, damit dies funktioniert?
Ein schneller Weg ist die Verwendung von Spring. Dies bedeutet nicht (unbedingt), dass viele XML-Konfigurationen verwendet werden: Die Spring-RMI-Supportklassen können programmgesteuert verwendet werden.
Die zwei Schlüsselklassen sind:
RmiServiceExporter
um ein Objekt remote zugänglich. RmiProxyFactoryBean
, um auf a zuzugreifen entferntes Objekt. Ein Vorteil dieser Vorgehensweise besteht darin, dass Sie nur eine Implementierung Ihrer Schnittstelle schreiben müssen, die dann mit RmiServiceExporter
verfügbar gemacht werden kann. Auf der Clientseite gibt die Verwendung von RmiProxyFactoryBean
Ihnen ein Proxy-Objekt, das die Schnittstelle implementiert. Was den clientseitigen Code betrifft, arbeitet er mit einer "echten" Implementierung der Schnittstelle, aber der Proxy führt die RMI-Aufrufe für Sie durch. Die Verwendung von RMI ist transparent.
Als Beispiel, wie schnell das sein kann, habe ich gerade einen Server und einen Client mit Ihrer Schnittstelle geschrieben.
Meine Implementierung der Schnittstelle ist:
%Vor%Der serverseitige Code lautet:
%Vor%Der clientseitige Code lautet:
%Vor%was wie erwartet ausgibt:
%Vor%Wie Yok und Colin sagten Werfen Sie einen Blick auf das RMI-Tutorial, das von Oracle (Sun) unterstützt wird, und versuchen Sie zum Zeitpunkt des Lesens, die Beispielcodes zu codieren und sie in einem Beispielprojekt zu testen.