java.rmi
-Pakets, speziell:Remote
InterfaceNaming
Klasse
Das Remote
Interface dient dazu alle entfernten Objekte zu kennzeichnen, alle entfernten Objekte müssen dieses Interface direkt
oder indirekt implementieren.
Die Naming
Klasse erlaubt es entfernte Objekte durch die gebräuchliche URL Syntax zu definieren und zu finden.
Der Server braucht mehr "Infrastruktur" als der Client, deshalb gibt es für den Server ein zusätzliches Paket, das
java.rmi.server
-Paket.
Die Klasse RemoteObject
implementiert das Verhalten der Object
-Klasse für entfernte Objekte.
Die Klasse RemoteServer
ist eine gemeinsame, abstrakte Überklasse aller Serverimplementationen und sorgt für den Rahmen
für die Unterstützung einer großen Auswahl von entfernten Referenzsemantiken. Zur Zeit gibt es nur eine Unterklasse, die
UnicastRemoteObject
Klasse. Sie unterstützt eine TCP-basierte Punkt-zu-Punkt Verbindung.
Das Unreferenced
Interface erlaubt es dem Serverobjekt Nachrichten zu erhalten, wenn keine Referenzen mehr auf es zeigen. Solange noch
eine Referenz auf einem entfernten Objekt besteht, behält der distributed garbage collector eine Menge lokaler Referenzen. Wenn diese Menge leer ist
wird die Methode unreferenced aufgerufen (wenn der Server sie implementiert hat).
Der SecurityManager
ist eine Klasse um einfache Sicherheitsfunktionen zu gewährleisten, so daß nur zugehörige Klassen,
und deren Argumente und Rückgabewerte, geladen werden können. Ohne Sicherheitsmanager können nur lokale Klassen geladen werden.
Die RMIClassLoader
Klasse kann dazu benutzt werden Klassen über einen URL zu laden, entweder über die Eigenschaft
java.rmi.server.codebase
oder direkt als Parameter übergeben.
Die Methoden der Klasse RMISocketFactory
spezifizieren welche Sockets für die Übertragung der Daten zu benutzen sind.
Durch die Methode im Interface RMIFailureHandler
kann definiert werden wie reagiert werden soll, wenn die Erzeugung einer Socketverbindung
fehlschlägt.
Das RMI System benutzt das Registry
Interface und die LocateRegistry
Klasse aus dem Paket
java.rmi.registry
, um Objekte durch einfache Namen zu registrieren, damit sie wieder gefunden
werden können. Das Registry Interface sorgt für Methoden um den Inhalt der Registry zu verwalten, Methoden zum Finden, Eintragen,
Auslösen, und Auflisten. Die Klasse LocateRegistry stellt statische Methoden zur Verfügung, durch die eine Referenz auf das
Stellvertreterobjekt (den Stub) der Registry zurückgegeben wird. Dabei finden keine Operationen auf entfernten Hosts statt.
Diese Klassen und Interfaces werden von den automatisch generierten Stellvertreterobjekten (Stub und Skeleton) genutzt. Das sind zum einem die
RemoteStub
Klasse als Überklasse aller Stubs. Stubs sind Stellvertreterobjekte die dieselbe Funktionalität zur Verfügung stellen,
wie die aktuelle Implementation des entfernten Objekts.
Das RemoteCall
Interface abstrahiert die Aufrufe die, durch die Stub- oder Skeletonobjekte, an das entfernte Objekt durchgeführt werden.
Das Interface RemoteRef
präsentiert ein Handle für das entfernte Objekt, d.h. jedes Stubobjekt beinhaltet eine Instanz von
RemoteRef, welches eine konkrete Referenz auf das entfernte Objekt ist. Diese wird dazu benutzt Aufrufe des entfernten Objektes durchzuführen.
Das Interface ServerRef
ist das Gegenstück zum RemoteRef auf der Serverseite. Es ist ein Handle für die Implementation des entfernten Objekts.
Das Skeleton
Interface wird einzig von dem durch den rmic-Compiler generierten Code benutzt. Ein Skeleton
für ein entferntes Objekt ist eine serverseitige Existenz, das die Aufrufe an die Implementation des aktuellen entfernten Objekts sendet.
Das DGC
Interface aus dem Paket java.rmi.dgc
ist eine Abstraktion, die auf der Serverseite
für den distributed garbage collection Algorithmus verwendet wird. Es beinhaltet zwei Methoden: dirty()
und clean()
.
Dirty() wird aufgerufen, wenn ein Objekt noch auf einer VM gebraucht wird, d.h. der Garbage Collector darf es noch nicht löschen. Die Funktion
gibt ein Lease-Objekt zurück, mit der Information über die VM und die Zeit die das Objekt bestehen bleibt.
Clean() wird aufgerufen, wenn ein entferntes Objekt in einer VM nicht mehr referenziert wird, dann kann dieses Objekt vom Garbage Collector gelöscht werden.