Java RMI ServerException - java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub [英] Java RMI ServerException - java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub

查看:98
本文介绍了Java RMI ServerException - java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我继承了一些 Java RMI 客户端/服务器代码,虽然它在一台机器上运行良好,但我无法让它在我的开发环境中运行.

I have inherited some Java RMI client/server code, and while it runs fine on one machine, I haven't been able to get it to run in my dev environment.

问题是当我使用以下 java.exe -Djava.security.policy=conf\server.policy -SRC; 运行服务器时.-Djava.library.path=.org.prog.rmi.RmiServer

我收到以下错误:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub (no security manager: RMI class loader disabled)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    ...

我的 server.policy 文件是

grant {
    permission java.security.AllPermission;
};

还有我的java代码:

And my java code:

        package org.prog.rmi;

        import java.rmi.Naming;
        import java.rmi.RemoteException;
        import java.rmi.RMISecurityManager;
        import java.rmi.server.UnicastRemoteObject;
        import java.rmi.registry.*; 

        public class RmiServer extends UnicastRemoteObject 
            implements RmiServerIntf {

        private BatchApi bapi;
        private String iniFileLocation;
        private String layoutOption;
        private int addressCount = 0;
        private RefInt apiHandle = new RefInt();


        public RmiServer(String iniFileLocation,String layoutOption) throws RemoteException 
        {   super();
            this.iniFileLocation = iniFileLocation;
            this.layoutOption = layoutOption;
            initAPI();
            startupAPI();
            openAPI();      
        }

        public static void main(String args[]) 
        {
            System.out.println("RMI server started");

            // Create and install a security manager
            if (System.getSecurityManager() == null) 
            {
                System.setSecurityManager(new RMISecurityManager());
                System.out.println("Security manager installed.");
            }
            else
                System.out.println("Security manager already exists.");

            try  //special exception handler for registry creation
            {
                LocateRegistry.createRegistry(1099); 
                System.out.println("java RMI registry created.");
            }
            catch (RemoteException e)
            {
                //do nothing, error means registry already exists
                System.out.println("java RMI registry already exists.");
            }

            try
            {
                //Instantiate RmiServer
                for (String arg: args){
                    System.out.println(arg);
                }

                RmiServer obj = new RmiServer(args[0],args[1]);

                // Bind this object instance to the name "RmiServer"
                Naming.rebind("//127.0.0.1/RmiServer", obj);
                System.out.println("PeerServer bound in registry");

            } 
            catch (Exception e) 
            {
                System.err.println("RMI server exception:");
                e.printStackTrace();
            }
        }    
}

我已经看到了与 java.rmi.server.codebase 相关的解决方案,但也没有运气设置这个

I've seen solutions relating to the java.rmi.server.codebase but didn't have any luck setting this either

推荐答案

经过进一步调查并遵循 RMI 教程后,RMI 注册服务器在端口 1099 上似乎存在问题.

After some further investigation and following RMI tutorials it appeared that there was a problem with the RMI registration server on port 1099.

当我在另一个端口(例如 2005)上启动 RMI 注册服务器并更改这些代码行时

When I stared the RMI registration server on another port (e.g. 2005) and changed these lines of code

LocateRegistry.createRegistry(2005);

Naming.rebind("//127.0.0.1:2055/RmiServer", obj);

这运行成功,没有错误,我的客户端能够连接.

This ran sucessfully without errors and my client was able to connect.

我希望这个答案可以帮助其他人解决这个错误.如果有人需要更详细的信息,请告诉我.

I hope this answer helps others with this error. Let me know if anyone needs any more detailed information.

这篇关于Java RMI ServerException - java.lang.ClassNotFoundException: org.prog.rmi.RmiServer_Stub的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆