Передать удаленный объект в методе на RMI-сервер? - PullRequest
1 голос
/ 20 октября 2011

У меня есть клиент RMI, который подключается к какому-либо серверу RMI, чтобы сообщить ему, что он может использовать этот новый клиент.

Могу ли я передать какой-либо удаленный объект напрямую так, чтобы:

serverRemoteObject.registerClient(theClientRemoteObjectTheServerShouldUse);

действительно даст серверу какой-нибудь объект, который он сможет использовать без подключения к моему клиенту? Следующий вопрос говорит, что это возможно, но никакого реального примера не было дано:

Можно ли использовать двунаправленный RMI между двумя классами?

Andrew

1 Ответ

4 голосов
/ 20 октября 2011

Да, вы можете. Именно так работают обратные вызовы в случае RMI. Вы отправляете объект на сервер, и когда сервер вызывает метод для вашего объекта, он будет выполняться в «клиентской» JVM, а не на сервере. Изучите метод UnicastRemoteObject.export для экспорта любого объекта, который реализует интерфейс Remote как удаленный объект, который можно передать на ваш сервер.

interface UpdateListener extends Remote {

  public void handleUpdate(Object update) throws RemoteException;

}

class UpdateListenerImpl implements UpdateListener {

  public void handleUpdate(Object update) throws RemoteException {
  // do something
  }

}

//somewhere in your client code
final UpdateListener listener = new UpdateListenerImpl();
UnicastRemoteObject.export(listener);
...