Hallo zusammen,
in einem ersten Test-Projekt mit RMI, das soweit funktioniert, bin ich auf einen Umstand gestoßen, den ich nicht verstehe. Vielleicht kann mir hier jemand helfen?
Die verteilte Applikation ist folgendermaßen aufgebaut:
LagerverwaltungRMIServer.class ist die Server-App und veröffentlicht mein RMI-Objekt aus der LagerverwaltungRMIObjClass.class, wofür sie das dazugehörige Interface aus LagerverwaltungRMIInterface.class braucht -> alle Dateien im classpath vorhanden - einverstanden!
LagerverwaltungRMIClient.class ist die Client-App und benötigt ebenfalls LagerverwaltungRMIInterface.class, da ich ja damit die entsprechende Methode des Stubs aufrufe -> alle Dateien im classpath vorhanden - auch alles klar!
Was ich nun wirklich nicht verstehe: WIESO muss in der codebase (auf einem Webserver als einzige Datei) LagerverwaltungRMIInterface.class hinterlegt sein?! Server und Client kennen sie doch? Und bevor ich den Client starte, kann ich die Datei sogar löschen, solang der Server schon läuft. Wenn die Datei LagerverwaltungRMIInterface.class nicht in der Codebase vorliegt, tritt eine Ausnahme ein -> wieso?
In einer Java-Dokumentation stand in etwa: Die Datei muss dort liegen, damit rmiregistry sie beim Veröffentlichen des Stubs laden kann. Aber rmiregistry läuft doch sowieso immer auf dem Server und ich übergebe beim .bind doch eh den fertigen Stub, also wozu dieser Umstand?
Für eine Klärung wäre ich SEHR!! dankbar!
Viele Grüße
robvs
in einem ersten Test-Projekt mit RMI, das soweit funktioniert, bin ich auf einen Umstand gestoßen, den ich nicht verstehe. Vielleicht kann mir hier jemand helfen?
Die verteilte Applikation ist folgendermaßen aufgebaut:
LagerverwaltungRMIServer.class ist die Server-App und veröffentlicht mein RMI-Objekt aus der LagerverwaltungRMIObjClass.class, wofür sie das dazugehörige Interface aus LagerverwaltungRMIInterface.class braucht -> alle Dateien im classpath vorhanden - einverstanden!
LagerverwaltungRMIClient.class ist die Client-App und benötigt ebenfalls LagerverwaltungRMIInterface.class, da ich ja damit die entsprechende Methode des Stubs aufrufe -> alle Dateien im classpath vorhanden - auch alles klar!
Was ich nun wirklich nicht verstehe: WIESO muss in der codebase (auf einem Webserver als einzige Datei) LagerverwaltungRMIInterface.class hinterlegt sein?! Server und Client kennen sie doch? Und bevor ich den Client starte, kann ich die Datei sogar löschen, solang der Server schon läuft. Wenn die Datei LagerverwaltungRMIInterface.class nicht in der Codebase vorliegt, tritt eine Ausnahme ein -> wieso?
In einer Java-Dokumentation stand in etwa: Die Datei muss dort liegen, damit rmiregistry sie beim Veröffentlichen des Stubs laden kann. Aber rmiregistry läuft doch sowieso immer auf dem Server und ich übergebe beim .bind doch eh den fertigen Stub, also wozu dieser Umstand?
Für eine Klärung wäre ich SEHR!! dankbar!
Viele Grüße
robvs
Comment