RMI på anden host end localhost
Jeg har rodet med rmi før men kun hvor client og server er på samme host.Nu har jeg prøvet at flytte server delen til min freebsd server, og der kan jeg ikke engang få det til at starte.
jeg bruger arne_v's eksempel i hans artikel dog hvor jeg kun laver stub.
# pwd
/usr/home/loadet
javac rmitest/*.java
rmic rmitest.CalcImpl -v1.2
# ls rmitest/
Calc.class Calc.java CalcImpl.class CalcImpl.java CalcImpl_Stub.class
rmi registry kører
java -cp . rmitest.CalcImpl
det resulterer så i
java.rmi.ConnectIOException: Exception creating connection to: 62.242.117.41; nested exception is:
java.net.SocketException: Connection reset by peer
jeg mener jeg læste at den default bruger localhost hvis man ikke sætter den til at bind til en fast ip
og min /etc/hosts
er fin 127.0.0.1 localhost.gbit.dk localhost
så hvor min eksterne ip kommer ind kan jeg ikke se.
maskinens hostname er godt nok gbit.dk som resolver til 62.242.117.41
hvis jeg så prøver at bind til en anden ip så går det helt galt
Naming.rebind("//127.0.0.1/Calc", new CalcImpl());
(hvad jeg har læst skulle det ikke være nødvendigt at sætte en protocol), men jeg har da også prøvet med rmi:// og prøvet at angive den default port 1099 og prøvet et andet hostname der resolver til min interne ip 192.168.1.2
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmitest.CalcImpl_Stub
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmitest.CalcImpl_Stub
java.lang.ClassNotFoundException: rmitest.CalcImpl_Stub
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:354)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at rmitest.CalcImpl.main(CalcImpl.java:34)
for at få serveren til at køre i jbuilder var jeg nødt til at bruge
java -Djava.rmi.server.codebase=file:c:\path\til\classes
så det har jeg også prøvet i commandline
java -Djava.rmi.server.codebase=/home/loadet/rmitest/ rmitest.CalcImpl
og 100 andre varianter...
der er ingen firewall der laver problemer, ihvertfald ikke i serveren jeg er godt nok bag nat, men det burde ikke betyde noget internt.
jeg vil have at min client på 192.168.1.6 kan connecte til serveren 192.168.1.2.
jeg vil blive meget glad hvis der er nogen der kan opklare dette problem :)
