RMI: Dynamisches Klassenladen ohne Webserver?

Liebe Experten,

in verschiedenen Büchern habe ich beim Thema dynamisches Klassenladen mit RMI immer wieder gelesen, dass ein Webserver installiert ist und die codebase-Property beginnt mit http://.
Andererseits könne man auch eine mit file:// beginnende codebase-Property verwenden und auf den Webserver verzichten.

Meine Frage: Ist der Webserver nun tatsächlich notwendig, oder geht es auch anders, auch wenn man kein shared filesystem hat?

Über Antworten mit Begründung (gegebenenfalls Anleitung, wie es ohne Webserver geht) wäre ich sehr dankbar!

Viele Grüße,
Matthias

Hi,

ja kann man auch ohne Webserver machen. RMI heißt ja eigentlich nichts anderes als die Methoden eines Objektes von einem fremden Rechner aus auszuführen. Du mußt dazu die Objekte bzw. Methoden serialisieren und dann dem laufenden Java Interpreter bekannt machen. Du benutzt einmal rmic um eine skeleton-Datei(Server) und ein Stube-Datei(client) zu erzeugen. Um die Methoden bekannt zu geben benutzt du rmiregistry. Das Thema ist etwas umfangreicher wie du merkst. Am besten Du schaust mal in dem ein oder anderen Buch nach…
Oder kennt jemand einen guten link?

CU und viel Glück…

Danke für deine Antwort. Leider trifft sie den Kern meines Problems nicht ganz. Darum will ich es noch etwas präzisieren.

Es geht darum, wie der Client an die Klassendefinitionen der Stubs rankommt. Dazu gibt es meines Wissens zwei prinzipielle Möglichkeiten:

  1. Ich speichere sie nach dem Compilieren sowohl auf dem Server- als auch auf dem Clientrechner. Das hat aber zur Folge, dass man das bei jeder Änderung einer Klasse bzw. dem Hinzufügen von Unterklassen wiederholen muss.

  2. Der Client lädt sich zur Laufzeit die benötigten Klassendefinitionen vom Server herunter. Dazu bietet RMI die Möglichkeit beim Start des Servers ein Attribut „codebase“ anzugeben, wodurch dem Client bei einem Methodenaufruf mitgeteilt wird, wo er die benötigten Klassen finden kann.

In den meisten Büchern steht nun: Dieses codebase-Attribut sollte auf ein Verzeichnis eines Webservers zeigen (es beginnt also mit http://). Es sollte aber auch gehen, indem man direkt auf das Filesytem des Rechners verweist (dann beginnt es mit file://).

Von der Performanz her wäre es besser, wenn man die file-Wariante verwendet. Nun haben wir aber hier einen Streit, ob es mit dieser Variante überhaupt funktionieren kann. Diesen Streit würde ich mit eurer Hilfe gerne schlichten.

Noch einmal vielen Dank schon in Voraus!

Matthias