Hi, I'm new to RMI and thought I'd start with Sun's RMI tutorial that comes with the documentation download in jdk1.5.
I am following this tutorial word for word, even using their supplied source code without modification and I get a ClassNotFoundException when running the Server class. The beginning of the stack trace is pasted below.
To save you looking it up, this is the source code that is failing. The exception is thrown from the following line:
I'm running jdk1.5.0_02 on a linux machine.
Partial Stack trace: Server exception: java.rmi.ServerException: RemoteEx ception occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested excep tion is: java.lang.ClassNotFoundException: example.hello.Hello java.rmi.ServerException: RemoteException occurred in server thread; nested exce ption is: java.rmi.UnmarshalException: error unmarshalling arguments; nested excep tion is: java.lang.ClassNotFoundException: example.hello.Hello at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385 ) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240) at sun.rmi.transport.Transport$1.run(Transport.java:153) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:149) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:4 60) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport .java:701) at java.lang.Thread.run(Thread.java:595) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Stream RemoteCall.java:247) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java: 223) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:343) at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source) at example.hello.Server.main(Server.java:24)
It sounds like you need to set the java.rmi.server.codebase property when you run your server. This property tells remote JVMs where to get class files from when they get a remote reference that they don't have a class file for. The RMI registry is itself a remote Java program running in another JVM, so when you try to bind, it's going to fail because it doesn't have a reference to your class files. The command line to start the server should look something like this -
Write once, run anywhere, because there's nowhere to hide! - /. A.C.
Joined: Feb 16, 2002
Thanks Nate, That worked perfectly! Runs without any trouble now.
hey I am facing a similar problem. Actually the jdk1.5 specs [http://java.sun.com/j2se/1.5.0/docs/guide/rmi/hello/hello-world.html#51] specify clearlythat codebase is needed to be specified only if pre1.5 JVM clients need to be supported, which is not the case here.
SO why the jvm is not able to find classes and program not running.
I dunno actually my whole thing was working initially where i had Mandrake with jdk installed using rpm, but i just got debian installed and installed jdk from bin package where the same code has stopped running.
this is regarding your failure vth the RMI on Linux platform
When using RMI u need to set some platform specific properties. for example on windows u need to set system.properties. in the same way u just search for similar properties files on your Linux platform(I am not sure which properties file you will be using i Linux Platform )
all the best and good luck
bye and good luck
[ EJFH: Remove invitation to take it offline. We don't do that here. ] [ July 25, 2005: Message edited by: Ernest Friedman-Hill ]