Есть вопрос, связанный с тем, как RMI загружает классы интерфейса.
Итак, вот моя установка:
Интерфейс, который определяет операцию, выполняемую сервером rmi.
Общее
public interface Computable<T> extends Remote{
public AnalyticalServiceOutput<T> compute(Request request) throws RemoteException;
}
Сервер
Computable<Map<String, String>> stub = (Computable) UnicastRemoteObject.exportObject(this, 0);
Registry registry = LocateRegistry.createRegistry(2000);
registry.rebind("myservice", stub);
Клиент
Registry registry = LocateRegistry.getRegistry(host, port);
Computable c = (Computable) registry.lookup("myservice");
AnalyticalServiceOutput<Map<String, String>> output = c.compute(request);
Для развертывания я поместил общий jar в classpath для клиента и сервера.
Когда я запустил клиент и сервер в Eclipse, он работал отлично.
Чувствуя себя торжествующим, я переместил и клиента, и сервер в коробку Linux.
Но теперь, когда я выполняю вызов для вычисления (запроса), клиент жалуется (ClassNotFoundException), что один из классов, определенных в общем, недоступен.
Любые идеи относительно того, что происходит.
Приветствия