Sto svolgendo un progetto composto da 3 package:
nel primo sono presenti alcune interfaccie (IPrimo e ISecondo), nel secondo sono presenti delle classi che implementano queste interfaccie(IPrimoImpl e ISecondoImpl) più una classe che si occupa di bindare nell'rmiregistry un riferimento a un oggetto di tipo ISecondoImpl; nel terzo package c'è una classe che utilizza il tutto.
Le interfacce sono state definite con "extends Remote" e tutti i metodi hanno nella signature "throws RemoteException".
Le classi che implementano le interfacce sono definite con "extends UnicastRemoteObject" e tutti i metodi contengono throws RemoteException e il costruttore contiene "super()".
La classe che deve bindare fa questo:
e binda il riferimento:codice:File cwd = new File(""); String cwdName = cwd.getAbsolutePath(); System.out.println(cwdName); String netbeansCodebase = "file:" + cwdName + "/build/classes"; netbeansCodebase = netbeansCodebase.replace('\\', '/'); netbeansCodebase = netbeansCodebase.replace(" ", "%20"); System.setProperty("java.rmi.server.codebase", netbeansCodebase); System.out.println(System.getProperty("java.rmi.server.codebase"));
Quando faccio partire la classe che dovrebbe bindare ottengo questo:codice:ISecondoImpl p = new ISecondoImpl(); try{ Registry r = LocateRegistry.getRegistry(); r.rebind(IDENTIFIER, p); } catch(RemoteException e){ System.out.println("Trouble: " + e); System.exit(-1); }
Trouble: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: access to class loader denied
Java Result: 255
Credevo di sbagliare la directory da cui eseguire l'rmiregistry, ma le ho provate tutte. Non capisco proprio, qualcuno sa aiutarmi?
Grazie![]()

Rispondi quotando