home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

RMI

Mit Java RMI kann man Methoden auf entfernten Javaklasse aufrufen. Daher der Name Remote Method Invocation.
Damit stellt RMI alles zur Verfügung, was man für verteilte Anwendungen braucht.

Dazu bedarf es:

  • Server: Stellt die entfernte Klasse zur Verfügung, auf die ein Client zugreifen will
  • Registry: Ein Namensdienst, bei dem der Server die Klassen genau gesagt Objekte anmeldet.
  • Client: Fragt beim Namensdienst nach dem Objekt und bekommt einen Stellvertreter, ein Proxy

Client und Server nutzen die gleiche Schnittstelle der Klasse

RMI nutzt Stubs als Proxies und Skeletons, die die Kommunikation über das tieferliegende RMI Transport Protokoll (RMI Wire Protokoll) durchführen.  Dabei werden die Objekte serialisiert (soweit möglich) Ab Java 5.0 müssen Stubs und Skeletons nicht mehr mit rmic erstellt werden.

Bitte beachten beim Arbeiten mit entfernten Objekten und RMI im speziellen

  • Lange Übertragungszeit (synchrone Kommunikation)
  • Verfügbarkeit von Netzwerk und Server vorausgesetzt (sonst RemoteException)
  • Einschränkungen durch Firewalls sind zu beachten. RMI benötigt zwei offene Ports, die in der Regel nicht Port 80 beinhalten (kann aber eingestellt werden).
  • Client und Serveranwendungen laufen in verschiedenen JVMs und getrenntem Speicher (Problem Objektreferenzen, ==) Objektreferenz darf nur exklusiv an Server übergeben werden. Niemand darf parallel an dem Objekt arbeiten. Objekte werden (im Gegensatz zu lokaler JVM nicht per reference, sondern als Objekt zum Server übertragen.
  • Viele Klassen lassen sich nicht serialisieren
  • RMI funktioniert nur zwischen Java-Anwendungen, die in der Regel sogar auf den JVMs gleicher Version laufen müssen.