RMI не может найти связанный объект? - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть следующий RMI-сервер:

public static void main(String[] args) {
    try{
        ChatSystemImpl chatSystem = new ChatSystemImpl();
        ChatSystem chatSystem_stub = (ChatSystem) UnicastRemoteObject.exportObject(chatSystem, 6001);

        Registry registry = LocateRegistry.getRegistry("localhost", 6001);
        registry.bind("ChatSystem1", chatSystem_stub);

        System.out.println("Server up.");
    }
    catch(Exception ex){
        ex.printStackTrace();
    }
}

Когда я запускаю его, я получаю:

ava.rmi.NoSuchObjectException: no such object in table
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
    at fr.inp.ensimag.examples.chatsystem.Main.main(Main.java:30)

Ну, я понятия не имею, что не так ... Смотрю на это большезатем 2 часа прямо сейчас.

Это интерфейс (если необходимо):

public interface ChatSystem extends Remote{
    void registerUser(UserInfo newUser) throws RemoteException;
    void unregisterUser(UserInfo user) throws RemoteException;
    boolean userExists(UserInfo user) throws RemoteException;
    void send(MessageInfo message) throws RemoteException;
}

Реализация имеет следующий заголовок, тело просто содержит методы, которые на самом деле не реализованы, они просто thowUnsupportedOperationException:

public class ChatSystemImpl implements ChatSystem

Интерфейс ChatSystem находится в другом проекте, чем остальная часть исходного кода, если он имеет какое-либо значение.

Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2011

Ваш реестр не был экспортирован.Обычно это означает, что вы запускаете его в JVM через LocateRegistry.createRegistry () и позволяете ему собирать мусор.Результат этого метода должен храниться в статической переменной.Это также может означать, что вы никогда не запускали Реестр.

...