我试图运行一个应用程序,其中服务器可以执行从客户端加载的任务。
interface TaskExecuter extends Remote
<T> T executeTask(Task<T> t);
interface Task<T>
T execute();
从客户端和服务器都知道这个接口。在服务器端,我也有类
class TaskExecuterImpl implements TaskExecuter
位于Tomcat的webapps目录中,服务器代码库引用此位置。
在客户端,我有班级
class SimpleTask implements Task<Integer>, Serializable
位于/ home / pc / public /
客户端代码库是:-Djava.rmi.server.codebase = file:/// home / pc / public / - client.policy是:
grant {
permission java.net.SocketPermission
"*:0-65535","read,accept,connect,resolve";
permission java.io.FilePermission
"/home/pc/public/","read";
permission java.security.AllPermission;
};
客户端和服务器位于不同的计算机上。如果我在服务器上复制SimpleTask,一切都能正常工作,但是当ClassLoader尝试下载SimpleTask时,由于拒绝权限,我有一个classNotFound异常,如果它应该,SimpleTask只位于客户机上。
答案 0 :(得分:0)
您的file:///...
代码库网址几乎肯定只对客户有意义。服务器(在这种情况下)必须使用代码库,因此必须将代码库设置为服务器将理解的内容。 file:
网址不符合条件,除非它们引用共享驱动器,除非它们引用服务器的共享驱动器视图。使用FTP:
或http:
。