Salve,
sto cercando di capire il funzionamento della connessione RMI tra client e server.
Praticamente ho questo fatto questo server per la gestione remota di uno stack
RMIServer.java
codice:
package rmiserver;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RMIServer {
public static void main(String[] argv) throws Exception {
StackImp s = new StackImp(10);
Registry reg = LocateRegistry.createRegistry(1099);
reg.rebind("xyz", s);
System.out.println("RMI Server pronto....");
System.out.println("In attesa della richiesta...");
}
}
Stack.java
codice:
package rmiserver;
import java.rmi.*;
public interface Stack extends Remote {
public void push(int p) throws RemoteException;
public int pop() throws RemoteException;
}
StackImp.java
codice:
package rmiserver;
import java.rmi.*;
import java.rmi.server.*;
public class StackImp extends UnicastRemoteObject implements Stack {
private int tos, data[], size;
public StackImp() throws RemoteException {
super();
}
public StackImp(int s) throws RemoteException {
super();
size = s;
data = new int[size];
tos = -1;
}
public void push(int p) throws RemoteException {
tos++;
data[tos] = p;
}
public int pop() throws RemoteException {
int temp = data[tos];
tos--;
return temp;
}
}
I seguenti, invece, sono i file che compongono il client
RMIClient.java
codice:
package rmiclient;
import java.rmi.*;
public class RMIClient {
public static void main(String[] argv) throws Exception {
String url = "rmi://localhost/";
Stack s = (Stack) Naming.lookup(url+"xyz");
s.push(25);
// System.out.println("Push: " + s.push(25));
System.out.println("Pop: " + s.pop());
}
}
Stack.java
codice:
package rmiclient;
import java.rmi.*;
public interface Stack extends Remote {
public void push(int p) throws RemoteException;
public int pop() throws RemoteException;
}
Quando lancio il server in esecuzione riesco a vedere entrambi i messaggi
codice:
System.out.println("RMI Server
System.out.println("In attesa della richiesta...");
Quando lancio il client, invece, mi viene sollevata questa eccezione
codice:
Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: rmiserver.Stack (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:101)
at rmiclient.RMIClient.main(RMIClient.java:19)
Caused by: java.lang.ClassNotFoundException: rmiserver.Stack (no security manager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:556)
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:255)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1559)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
... 3 more
Java Result: 1
Dove sto sbagliando?
Grazie