W Netbeans stworzyłem dwa oddzielne projekty: dla klienta i serwera. Projekt klienta zawiera klasę klienta oraz interfejs dziedziczący po Remote z deklaracją metody uruchamianej zdalnie, projekt serwera zawiera ten sam interfejs, klasę implementująca interfejs zawierającą definicję tej metody oraz oczywiście klasę serwera. Metoda wywoływana zdalnie jest bardzo prosta , drukuje tylko napis.
Kluczowe fragmenty kodu wyglądają tak:
Klasa klienta:
Registry reg = LocateRegistry.getRegistry("localhost");
rmiInterface stub = (rmiInterface) reg.lookup("Hello");
stub.hello(msg);
Klasa serwera:
rmiImpl robj = new rmiImpl();
rmiInterface stub = (rmiInterface) UnicastRemoteObject.exportObject(robj, 0);
Registry reg = LocateRegistry.createRegistry(1099);
registry.rebind("Hello", stub);
System.out.println("Server is ready to listen: ");
Najpierw uruchamiam serwer, potem uruchomienie klienta zwraca następujące błędy:
Client exception thrown: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: rmi_server.rmiInterface (no security manager: RMI class loader disabled)
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: rmi_server.rmiInterface (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at rmi_client.MyClient.main(MyClient.java:28)
Caused by: java.lang.ClassNotFoundException: rmi_server.rmiInterface (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:554)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:646)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:311)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:257)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1549)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1511)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
... 2 more
Jak rozwiązać powyższy problem ? Z góry dzięki za pomoc.