1. Define the remote interface.
import java.rmi.*;
public interface RObject extends Remote {
void aMethod() throws RemoteException;
}
2. Define the remote object implementation.
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class RObjectImpl extends UnicastRemoteObject implements RObject {
public RObjectImpl() throws RemoteException {
super();
}
public void aMethod() throws RemoteException {
// The actual exception must be wrapped in a RemoteException
throw new RemoteException("message", new FileNotFoundException("message"));
}
}
3. Compile the remote object implementation.
> javac RObject.java RObjectImpl.java
4. Generate the skeletons and stubs.
> rmic RObjectImpl
5. Create an instance of the remote object and bind it to the RMI registry.
try {
RObject robj = new RObjectImpl();
Naming.rebind("//localhost/RObjectServer", robj);
} catch (MalformedURLException e) {
} catch (UnknownHostException e) {
} catch (RemoteException e) {
}
6. Look up the remote object, invoke the method, and catch the exception.
try {
// Look up the remote object.
RObject robj = (RObject) Naming.lookup("//localhost/RObjectServer");
// Invoke the method.
robj.aMethod();
} catch (MalformedURLException e) {
} catch (UnknownHostException e) {
} catch (NotBoundException e) {
} catch (RemoteException e) {
// Get the actual exception that was thrown.
Throwable realException = e.detail;
}