Java RMI接口加载

Java RMI接口加载,java,rmi,classloader,Java,Rmi,Classloader,有一个关于RMI如何加载接口类的问题 下面是我的设置: 定义rmi服务器执行的操作的接口 常见的 服务器 客户 对于部署,我将公共jar放在客户机和服务器的类路径中 当我在eclipse上运行客户机和服务器时,它工作得非常好。 我感到很得意,于是将客户机和服务器都移动到linux设备上。 但是现在,当我调用ComputereRequest时,客户机抱怨ClassNotFoundException在公共中定义的一个类不可用 关于发生了什么事有什么想法吗 Cheers您的类AnalyticalSer

有一个关于RMI如何加载接口类的问题

下面是我的设置:

定义rmi服务器执行的操作的接口

常见的 服务器 客户 对于部署,我将公共jar放在客户机和服务器的类路径中

当我在eclipse上运行客户机和服务器时,它工作得非常好。 我感到很得意,于是将客户机和服务器都移动到linux设备上。 但是现在,当我调用ComputereRequest时,客户机抱怨ClassNotFoundException在公共中定义的一个类不可用

关于发生了什么事有什么想法吗


Cheers

您的类AnalyticalServiceOutput必须实现接口序列化或扩展远程。如果客户端和服务器位于不同的机器上,则结果必须通过有线传输,这只能通过可串行化的类或传输代理存根的远程对象来完成。

客户端和服务器的类路径上是否都有公共可计算类?是。它在类路径上可用。另外,仅供参考,我正在使用registry registry=LocateRegistry.createRegistry2000从服务器启动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);