Hello Guys
Ich versuche mich weiterhin im Bereich Server/Client fortzubilden. Nun bin ich beim Thema RMI.
Ich habe mir ein Projekt erstellt und eine Server, Client, Controller, Klasse erstellt sowie einen ControllerInterface.
Die Controller Klasse hat nur eine Methode sayHello und gibt Hello World auf der Konsole aus. Beim Aufbau habe ich mich an die RMI Kapitel von Java ist auch eine Insel von Christian Ullenboom gehalten.
Es funktioniert wunderbar, ich starte die Server Klasse dann die Client Klasse im Log des Servers sehe ich dann Hello World was richtig richtig cool ist.
Aber moment mal? Ich dachte bis jetzt RMI ist dafür da um Entfernte Objekte zu benutzen. Das heisst ich habe mir vorgestellt mit einem CLient einen Server über Netzwerk zu steuern. Wenn die Client Klasse aber im selben Projekt Ordner ist wie der Server dann habe ich in meinen Augen nichts erreicht im vergleich zu normalen Sockets so entfernt ist die Client Klasse dann doch nicht vom Server.
Also habe ich zwei verschiedene Projekte angelegt. Einen nur für den Server und einen nur für den Client. Jetzt habe ich es nochmal gestartet und das gleiche Ergebnis erwartet “Hello World”.
Stattdessen kam aber
Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: rmiVersuch.ControllerInterface(no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
Die beste Antwort bei StackOverflow war “Pack den Client in das selbe Projekt wie Server” :suspect:
Was ist da los?
*** Edit ***
Ich habe noch vergessen zu schreiben ich nutze auf der Server Seite mit
System.setProperty("java.security.policy", "C:\\....policy.policy");
System.setSecurityManager(new SecurityManager());
Diese Datei
grant {
permission java.security.AllPermission;
};
*** Edit ***
Sry für das spammen aber ich habe den Fehler gefunden. Auf der Client seite muss das Interface im exakt dem selben Packetnamen liegen. Ich finde das merkwürdig muss das wirklich so sein?
Im Server liegt ControllerInterface im package serverRMI
Im CLient liegt ControllerInterface im package clientRMI
Das resultiert in einer Exception ändere ich den Namen des packages im client zu serverRMI funktioniert das.