Java RMI和队列问题

时间:2015-06-23 01:33:59

标签: java rmi

我正在编写一个java程序,我使用rmi进行网络通信。我导出一个远程对象,更多客户端可以连接。此对象包含一个返回另一个远程对象的方法,该方法对每个客户端都不同返回的对象包含两个LinkedBlockingQueue。当连接多个客户端时,它们似乎从同一队列中获取消息。 这里是第一个界面

public interface RMIInterface extends Remote {
    public ConnectionInterface createConnection () throws RemoteException;
}

这是第一个对象

public class RMIImplementation extends UnicastRemoteObject implements RMIInterface {
    @Override
    public ConnectionInterface createConnection() throws RemoteException {
        ...
    }

}

这是第二个界面

public interface ConnectionInterface extends Remote {
    public void sendMessage (Message info) throws RemoteException;

    public Message getMessage() throws RemoteException;
}

这是第二个对象

public class RMIConnection implements ConnectionInterface{

    private LinkedBlockingQueue<Message> in;
    private LinkedBlockingQueue<Message> out;

    ServerRMIConnection() {
        in = new LinkedBlockingQueue<Message> ();
        out = new LinkedBlockingQueue<Message> ();

        try {
            UnicastRemoteObject.exportObject(this, 0);
        } catch (RemoteException e) {
        }
    }   

    @Override
    public void sendMessage (Message info){
        in.offer(info);
    }

    @Override
    public Message getMessage() {
        Message message=null;
        try {
            info = out.poll(120, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
        }

        return message;
    }
}

当两个或多个客户端调用getMessage方法时,它们会收到相同的消息。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当您忽略调用exportObject()的异常时,它可能会失败。永远不要那样做。打印例外。