在JDK 1.7上启动Java RMI服务器时出现问题

时间:2014-04-08 15:33:46

标签: java eclipse netbeans rmi fibonacci

这是我在以下问题中描述的问题的后续跟进:

总而言之,我有一个非常基本的服务器,我希望使用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;
};

我的系统规格是:

  • Linux Mint
  • java版本" 1.7.0_51"
  • Eclipse Kepler
  • Netbeans 7.4

我正在使用Eclipse和Netbeans。为什么?我很绝望......这就是原因。

我正在采取的步骤:

  1. 通过打开终端并输入rmiregistry来启动rmi注册表。我很困惑,考虑到我已经在FibonacciServer.java课程中这样做了,我还需要在这里做吗?
  2. 使用参数-Djava.security.policy=server.policy
  3. 运行程序
  4. 看到一切崩溃并崩溃。
  5. 这是我收到的错误消息:

    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标志运行代码吗?有没有办法在代码中包含它?

0 个答案:

没有答案