Deploying an application that uses RMI can be tricky because so many things can go wrong—and the error messages you get when something goes wrong are so poor. We have found that it really pays off to test the deployment under realistic conditions, separating the classes for client and server.
Make two separate directories to hold the classes for starting the server and client.
server/ WarehouseServer.class Warehouse.class WarehouseImpl.class client/ WarehouseClient.class Warehouse.class
When deploying RMI applications, one commonly needs to dynamically deliver classes to running programs. One example is the RMI registry. Keep in mind that one instance of the registry will serve many different RMI ...