这是我在以下问题中描述的问题的后续跟进:
总而言之,我有一个非常基本的服务器,我希望使用Java RMI启动。在我之前的问题中,我被建议使用Securtity组,在Main中启动RMI并在第21版之后调整我的代码以适应java 1.7中的更改:
以下是代码(简化版!):
FibonacciServer.java:
public class FibonacciServer {
public static void main(String args[]){
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try{
Fibonacci fib = new Fibonacci();
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.getRegistry();
registry.rebind("fibonacci", fib);
System.out.println("Fibonacci Server ready.");
}catch(RemoteException rex){
System.err.println("Exception in Fibonacci.main " + rex);
}
}
}
Fibonacci.java:
public class Fibonacci extends UnicastRemoteObject implements IFibonacci{
private static final long serialVersionUID = -4300545841720809981L;
public Fibonacci() throws RemoteException{
super();
}
@Override
public BigInteger getFibonacci(int n) throws RemoteException {
return getFibonacci(new BigInteger(Long.toString(n)));
}
@Override
public BigInteger getFibonacci(BigInteger n) throws RemoteException {
BigInteger computation = someImportantComputation;
return computation;
}
}
IFibonacci.java:
public interface IFibonacci extends Remote{
public BigInteger getFibonacci(int n) throws RemoteException;
public BigInteger getFibonacci(BigInteger n) throws RemoteException;
}
最后但并非最不重要的是,这是我的 server.policy 文件:
grant{
permission java.security.AllPermission;
};
我的系统规格是:
我正在使用Eclipse和Netbeans。为什么?我很绝望......这就是原因。
我正在采取的步骤:
rmiregistry
来启动rmi注册表。我很困惑,考虑到我已经在FibonacciServer.java
课程中这样做了,我还需要在这里做吗?-Djava.security.policy=server.policy
这是我收到的错误消息:
Exception in Fibonacci.main java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: fiboserver.IFibonacci
我也试过用-Djava.security.policy=server.policy -Djava.rmi.server.useCodebaseOnly=false
运行(不推荐使用,但我真的没有办法解决它)但我仍然得到完全相同的错误。
我确信Java正在找到server.policy
文件,因此错误必须在其他地方,但我不知道哪些错误。
因此我有以下问题:
-Djava.security.policy=server.policy
标志运行代码吗?有没有办法在代码中包含它?