Damit entfernte Objekte gefunden und verwendet werden können, müssen die Clients, auf denen sich die entfernten Objekte befinden, mit einem RMI-Server verbunden werden, der Referenzen auf die Objekte enthält. Ein RMI-Server ist einfach eine Java-Klasse, die eine Hauptmethode implementiert, jedes entfernte Objekt instantiiert und exportiert und die Instanzen an einen Namen in der RMI-Registry bindet.
Jedes Mal, wenn Code durch eine JVM heruntergeladen werden soll, müssen entsprechende Sicherheitsvorkehrungen getroffen sein, um das System vor Objekten zu schützen, die unsichere Operationen durchführen. Deshalb muss die Hauptmethode eines RMI-Servers einen Security Manager erstellen und installieren, wie das folgende Beispiel illustriert:
Der RMI-Server erzeugt Instanzen der entfernten Objekte und bindet sie dann an einen Namen, der von einem entfernten Client gefunden und aufgerufen werden kann, wie im folgenden Beispiel:
Wenn ein entferntes Objekt instantiiert ist, wird es exportiert und für die Annahme eingehender Aufrufe zur Verfügung gestellt.
Sobald ein entferntes Objekt instantiiert und an einen Namen gebunden ist, können entfernte Aufrufer das Objekt anhand des Namens finden, die Referenz eines entfernten Objekts erhalten und dann Methoden dieses Objekts aufrufen.
Das Beispiel in Listing B zeigt einen einfachen RMI-Server, der einen Security Manager installiert und dann ein entferntes Objekt erzeugt und bindet.
Den Server starten
Zum Starten eines RMI-Server genügt es, den Server einfach wie jede normale Java-Anwendung auszuführen. Allerdings müssen in der Kommandozeile eine Reihe von Eigenschaften mit ihren zugehörigen Namen und Werten angegeben werden:
- Die Eigenschaft java.rmi.server.codebase wird definiert, damit Klassen dynamisch in die Registry und dann zum Client heruntergeladen werden können.
- Die Eigenschaft java.security.policy wird definiert, damit der Server weiß, welche Sicherheitsrichtlinien er anzuwenden hat.
Das Beispiel für eine Kommandozeile in Listing C demonstriert, wie man den SimpleRMIServer startet, wobei die Eigenschaft java.rmi.server.codebase auf http://myhost/~jeff/remoteobjects und die Eigenschaft java.security.policy auf $HOME/jeff/policies/policy gesetzt wird.
Nachdem der SimpleRMIServer gestartet wurde, müsste man die folgende Anzeige sehen:
Zusammenfassung
In diesem Artikel ging es darum, wie RMI für entfernte Interaktionen eingesetzt werden kann, so dass sich Programmierer auf andere Themen als auf die Kommunikations-Infrastruktur konzentrieren können. Das Framework von Java zum Aufrufen entfernter Methoden erlaubt dem Programmierer das virtuelle Erstellen transparenter verteilter Services und Anwendungen. RMI-basierte Anwendungen verwenden Java-Objekte, die gegenseitig ihre Methoden aufrufen können, egal wo sie sich befinden.
Neueste Kommentare
1 Kommentar zu Verteilte Services mit dem Java RMI-Framework
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.
kurz
Ein eher kurzer Beitrag über RMI, der nichts aussagt über die Komplexität der Entwicklung und auch die Schwächen von RMI (zB Objektmigration). Eine Aufstellung der Vor- und Nachteile in Zusammenhang mit andereren Möglichkeiten der verteilten Softwareentwicklung in Java (Sockets, Corba, …) wäre interessant gewesen.