Клиентский объект RMI IIOP как обратный вызов - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь создать приложение rmi-iiop (очень простой чат).Мне нужен сервер для связи с клиентом, поэтому я подумал о создании интерфейса подключенного пользователя:

public interface UserInterface extends Remote { 
    public void receiveMessage(String message) throws RemoteException;
}

Затем на стороне клиента создайте класс User с методами, которые может выполнять сервер ('receiveMessage'):

public class User extends PortableRemoteObject implements UserInterface {

    protected User() throws RemoteException {
        super();
    }

    @Override
    public void receiveMessage(String message) throws RemoteException {
        client.addMessageToGUI();
    }
}

Я использую rmic -iiop Chat User, который генерирует _Chat_Tie.class _ChatInterface_Stub.class _User_Tie.class _UserInterface_Stub.class

После размещения всех файлов на стороне сервера и на стороне клиента и запуска приложения я получаю следующую ошибку: java.rmi.StubNotFoundException: Stub class not found: User_Stub; nested exception is:

Я полагаю, что разница заключается в том, что класс Chat создается на сервере, а затем клиент использует его с использованием интерфейса (который работает нормально), но пользовательский класс должен быть создан на стороне клиента, поэтому клиент работает частично как сервер.

Мой вопрос похож на Java RMI - Создание клиента сервером , но для реализации rmi-ioop.

Иными словами - как я могу отправить ссылку на локальный объектк серверу, чтобы он мог выполнять операции на нем?

Спасибо!Леонтий

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Что мне не хватало, так это класс "Tie" на стороне клиента (_User_Tie.class).Обычно это не нужно, но в случае, когда объект создается на стороне клиента - мне нужно было также предоставить его.

Надеюсь, это сэкономит время для кого-то еще в будущем:)

0 голосов
/ 16 июня 2011

вы создаете интерфейс сервера, например:

public interface ChatServer extends Remote {
  public void registerUser(UserInterface user) throws RemoteException;
}
...