无法访问RMI服务器/ RMI注册表

时间:2015-08-01 13:04:40

标签: java linux rmi

我已经在两台机器上启动了rmiregistry,我已经能够成功绑定rmiserver,并且它一直在线程中运行,没有任何异常。然而,当我从其他机器的linux终端通过rmi客户端运行一个方法时,我得到异常(当获得rmiregistry时)无法访问主机。 host是rmiserver正在运行(并且已绑定)的地址

这是我的rmiserver代码

    public class MQAgentServer implements MQAgent, Runnable {    
     public static void main(String[] args) {

        getProperties();
        System.setProperty("java.security.Policy", "java.security.AllPermission");
        System.setProperty("java.rmi.server.hostname", hostName);

        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new SecurityManager());
        }
        try {
            String name = "RCMQAgent";
            MQAgent engine = new MQAgentServer();
            MQAgent stub = (MQAgent) UnicastRemoteObject.exportObject(engine, 0);
            Registry registry = LocateRegistry.getRegistry();
            registry.rebind(name, stub);
            System.out.println("MQAgentServer bound");
        } catch (Exception e) {
            System.err.println("MQAgentServer exception:");
            e.printStackTrace();
        }
    }
   }

这里是rmi客户端代码

public class MQAgentClient {

    protected static MQAgent netConn = null;

    public static void main(String args[]) {
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new SecurityManager());
        }


        String resourceType = args[0];
        String resourceName = args[1];
        String action = args[2];
        String hostName = args[3];

        System.out.println("EXECUTING COMMAND:INSIDE MQAgentClient.java");

        try {
            if (hostName != null && !hostName.trim().equals("")) {
                Registry registry = LocateRegistry.getRegistry(hostName);
                netConn = (MQAgent) registry.lookup(MQAgent.LOOKUPNAME);
            }

            File file = new File("/home/mpadmin/log/ClientLog.txt");
            file.createNewFile();
            FileWriter writer = new FileWriter(file);
            writer.write(resourceType + resourceName + action + hostName);

            if ((resourceType != null && !resourceType.trim().equals("")) && (resourceName != null && !resourceName.trim().equals("")) && (action != null && !action.trim().equals(""))) {

                if (resourceType.trim().equals("QueueManager")) {
                    if (action.trim().equals("Start")) {
                        netConn.startQMGR(resourceName);
                    } else if (action.trim().equals("Stop")) {
                        netConn.stopQMGR(resourceName);
                    } else {
                        writer.write("Illegal Arguments");
                    }
                } else if (resourceType.trim().equals("Process")) {
                    if (action.trim().equals("Start")) {
                        netConn.startProcess(resourceName);
                    } else if (action.trim().equals("Stop")) {
                        netConn.stopProcess(resourceName);
                    } else {
                        writer.write("Illegal Arguments");
                    }
                } else if (resourceType.trim().equals("Channel")) {
                    if (action.trim().equals("Start")) {
                        netConn.startChannel(resourceName);
                    } else if (action.trim().equals("Stop")) {
                        netConn.stopChannel(resourceName);
                    } else {
                        writer.write("Illegal Arguments");
                    }
                }else if (resourceType.trim().equals("Configuration")) {
                    if (action.trim().equals("Fetch")) {
                        netConn.fetchConfiguration(resourceName);
                    }else {
                        writer.write("Illegal Arguments");
                    }
                }
            }

            writer.flush();
            writer.close();
        } catch (RemoteException e) {
            System.out.println("EXECUTING COMMAND : REMOTE EXCEPTION when getting rmiregistry\n============================");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("EXECUTING COMMAND : IO EXCEPTION when creating log file\n=======================");
            e.printStackTrace();
        } catch (NotBoundException e) {
            System.out.println("EXECUTING COMMAND : NotBoundException EXCEPTION when looking up RMIServer in through registry\n=======================");
            e.printStackTrace();
        } catch (Exception e){
            System.out.println("EXECUTING COMMAND : GENERIC EXCEPTION inside MQAgent.java\n=======================");
            e.printStackTrace();
        }
        System.out.println("EXECUTING COMMAND : Command sent to RMI Server successfully");
    }

}

这是我用来运行客户端的命令

java -Djava.security.policy=file:/home/<user>/MQAgentClient/client.policy -Djava.rmi.server.codebase=file:/home/<user>/MQAgentClient/bin/ -cp /home/<user>/MQAgentClient/bin;/home/<user>/interface/mqagentinterface.jar com.rc.mqagent.client.MQAgentClient Configuration node0 Fetch <HOST IP WHERE RMISERVER IS RUNNING>

我可能会遗漏一些显而易见的东西,或者我可能没有提供足够的信息,只是帮我解决这个问题并对我轻松,谢谢!

哦,这是响应命令

的例外
java.rmi.ConnectException: Connection refused to host: <IP WHERE RMI SERVER IS RUNNING>; nested exception is:
        java.net.ConnectException: Connection timed out
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at com.rc.mqagent.client.MQAgentClient.main(MQAgentClient.java:33)
Caused by: java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at java.net.Socket.<init>(Socket.java:434)
        at java.net.Socket.<init>(Socket.java:211)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
        ... 5 more

编辑:

netstat -tulpn

tcp        0      0 :::2426                     :::*                        LISTEN      2283/runmqlsr
tcp        0      0 :::5666                     :::*                        LISTEN      -
tcp        0      0 :::1099                     :::*                        LISTEN      1490/./rmiregistry
tcp        0      0 :::111                      :::*                        LISTEN      -
udp        0      0 127.0.0.1:963               0.0.0.0:*   

0 个答案:

没有答案
相关问题