java - Simple RMI application with client-side exception -
i use java 8 , created simple rmi application have client-side exception don't understand. using eclipse structure of application is:
---rmi_project -----bin -------client ----------implementazionemyclassserver_stub.class ----------interfacciamyclassserver.class ----------mainclient.class -------server ----------implementazionemyclassserver.class ----------interfacciamyclassserver.class ----------implementazionemyclassserver_stub.class ----------implementazionemyclassserver_skel.class ----------mainserver.class -----src -------client ----------interfacciamyclassserver.java ----------mainclient.java -------server ----------implementazionemyclassserver.java ----------interfacciamyclassserver.java ----------mainserver.java
here's code:
interfacciamyclassserver.java
package client; import java.rmi.*; // necessaria per estendere interfaccia remote public interface interfacciamyclassserver extends remote { int somma(int a, int b) throws remoteexception; //unico metodo }
implementazionemyclassserver.java
package server; import java.rmi.*; import java.rmi.server.*; // per utilizzare unicastremoteobject public class implementazionemyclassserver extends unicastremoteobject implements interfacciamyclassserver{ private static final long serialversionuid = 1l; public implementazionemyclassserver() throws remoteexception { // costruttore system.out.println("ok1"); } public int somma(int a, int b) throws remoteexception{ // implementazione metodo somma definito dall'interfaccia return a+b; } }
mainserver.java
package server; import java.rmi.*; public class mainserver { public static void main(string[] args) { try{ implementazionemyclassserver s1 = new implementazionemyclassserver(); system.out.println("ok2"); naming.rebind("oggetto1", s1); system.out.println("ok3"); } catch(exception e){ system.out.println(e); } } }
mainclient.java
package client; import java.net.malformedurlexception; import java.rmi.*; public class mainclient { public static void main(string[] args) throws malformedurlexception, remoteexception, notboundexception { string nomeserver="localhost"; // nome del server o suo indirizzo ip (per l'esempio localhost=127.0.0.1) string nomeoggettoremoto="oggetto1"; // nome dell'oggetto remoto da richiedere al server string protocollo="rmi"; //protocollo usato, può essere: rmi,ftp,http string urloggettoremoto=protocollo+"://"+nomeserver+"/"+nomeoggettoremoto; // url completo usato dal client per ottenere riferimento oggetto remoto sul server // cerca all'url specificato all'interno del registro rmi l'oggetto remoto con nome "oggetto1" // e restituisce nella var oggetto il suo riferimento per cui nelle istruzioni successive // è possibile riferirsi all'oggetto remoto come se fosse sul client. interfacciamyclassserver oggetto = (interfacciamyclassserver) naming.lookup(urloggettoremoto); // uso oggetto remoto system.out.println(oggetto.somma(2, 3)); } }
i not want download dynamically stub class. why got class stub , skel , copied stub class in bin\client. stub , skel classes followed following procedure:
1) set classpath=c:\javaworkspace\rmi_project\src 2) cd c:\javaworkspace\rmi_project\src 3) c:\javaworkspace\rmi_project\src>javac server/interfacciamyclassserver.java 4) c:\javaworkspace\rmi_project\src>javac server/implementazionemyclassserver.java 5) c:\javaworkspace\rmi_project\src>rmic -v1.1 server.implementazionemyclassserver
to run entire application followed procedure:
by prompt1:
1) set classpath=c:/javaworkspace/rmi_project/bin 2) start rmiregistry 3) java server.mainserver
and got properly:
ok1 ok2 ok3
by prompt2:
1) set classpath=c:/javaworkspace/rmi_project/bin 2) java client.mainclient
where got exception:
exception in thread "main" java.lang.classcastexception: server.implementazionemyclassserver_stub cannot cast client.interfacciamyclassserver @ client.mainclient.main(mainclient.java:18)
the exception line 18 in mainclient not understand wrong.
you have remote interface declared in 2 packages. server side uses server package's remote interface; client side uses client package's remote interfaces. these 2 remote interfaces different. can't cast implementation of 1 other.
you can't this. need use same remote interface, in same package, @ both ends.
Comments
Post a Comment