【发布时间】:2015-08-10 20:56:03
【问题描述】:
我正在尝试运行一个应用程序,在该应用程序中服务器可以执行从客户端加载的任务。
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 时,如果 SimpleTask 仅位于客户端的计算机上,则由于权限被拒绝,我有一个 classNotFound 异常。
【问题讨论】:
-
发布堆栈跟踪,并明确哪个主机得到了异常。服务器是否可以访问
file:///home/pc/public/-? -
客户端显示异常,但它来自服务器。如何验证服务器可以访问路径?
标签: java classloader rmi classnotfoundexception