There are four cases of this exception.
-
When exporting: you didn’t run ‘rmic’ and you didn’t take the steps described in the preamble to the Javadoc for
UnicastRemoteObject
to make it unnecessary. -
When binding: the Registry doesn’t have the stub or the remote interface or something they depend on on its classpath.
-
when looking up: the client does’t have these things on its classpath.
-
When calling a remote method: you either sent something to the server of a class not present on its CLASSPATH, or received something from the server (including an exception) of a class not on your CLASSPATH: in both cases possibly a derived class or interface implementation of a class or interface mentioned in the remote interface’s method signature.
This is case 2. The Registry can’t find the named class.
There are several solutions:
-
Start the Registry with a CLASSPATH that includes the relevant JARs or directories.
-
Start the Registry in your server JVM, via
LocateRegistry.createRegistry().
-
Use dynamic stubs, as described in the preamble to the Javadoc of
UnicastRemoteObject.
However you may then still run into the same problem with the remote interface itself or a class that it depends on, in which case 1-3 above still apply to that class/those classes. -
Ensure that case (4) above doesn’t occur.
-
Use the codebase feature. This is really a deployment option and IMO something to be avoided at the initial development stage.