The moose likes Distributed Java and the fly likes Sun's RMI tutorial fails for me Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Distributed Java
Bookmark "Sun Watch "Sun New topic

Sun's RMI tutorial fails for me

Kevin Stembridge

Joined: Feb 16, 2002
Posts: 9
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.

This is the link to the tutorial that I'm following:
JDK 1.5 RMI Tutorial

To save you looking it up, this is the source code that is failing. The exception is thrown from the following line:

registry.bind("Hello", stub);

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( )
at sun.rmi.server.UnicastServerRef.dispatch(
at sun.rmi.transport.Transport$
at Method)
at sun.rmi.transport.Transport.serviceCall(
at sun.rmi.transport.tcp.TCPTransport.handleMessages( 60)
at sun.rmi.transport.tcp.TCPTransport$ .java:701)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Stream
at sun.rmi.transport.StreamRemoteCall.executeCall( 223)
at sun.rmi.server.UnicastRef.invoke(
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at example.hello.Server.main(
Nathan Pruett

Joined: Oct 18, 2000
Posts: 4121

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.
Kevin Stembridge

Joined: Feb 16, 2002
Posts: 9
Thanks Nate,
That worked perfectly! Runs without any trouble now.

anshu veda

Joined: Jul 24, 2005
Posts: 1
hey I am facing a similar problem.
Actually the jdk1.5 specs
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.

Pls help ..
bhaskara navuluri

Joined: Jul 21, 2005
Posts: 1

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
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 ]
I agree. Here's the link:
subject: Sun's RMI tutorial fails for me
It's not a secret anymore!