Обновление объекта сервера десериализованным объектом через RMI

У меня есть объект на сервере, который клиенты могут получить в распределенной системе. Все это происходит на локальной машине, и клиенты вызывают объект сервера через поиск RMI. Дело в том, что серверный объект должен быть единственным объектом, который клиенты могут изменять. Однако после десериализации на клиентах все они имеют разные идентификаторы объектов. То есть они, кажется, получают новый объект, хотя все они должны получать один и тот же объект с сервера. Это имеет смысл, учитывая, что объекты должны находиться на отдельных машинах (для каждого клиента).

Я попытался реализовать методы hashcode и equals на объекте сервера, но клиенты все еще получают другой идентификатор объекта. Когда клиенты выполняют действия с десериализованным объектом сервера, исходный объект сервера не получает изменения. Я знаю это, потому что любые последующие поиски извлекают объект сервера в его исходном состоянии.

В основном мой вопрос: как я могу позволить своим клиентам обновлять исходный объект сервера, выполняя клиентские операции с соответствующими десериализованными объектами? Когда другой клиент смотрит на получателей своего десериализованного объекта, он должен увидеть все изменения, выполненные другими клиентами. Чтобы пояснить далее, несмотря на то, что объекты десериализованы на разных машинах, я хочу, чтобы они вели себя так, как если бы они были одним и тем же объектом на одной машине.

1 ответ

Решение

Дело в том, что серверный объект должен быть единственным объектом, который клиенты могут изменять. Однако после десериализации на клиентах все они имеют разные идентификаторы объектов.

Дело в том, что это не удаленный объект, поэтому он сериализуется, что вам не нужно.

Я хочу, чтобы они вели себя так, как если бы они были одним и тем же объектом на одной машине.

Именно так. Вам нужно:

  1. Имейте это реализовать удаленный интерфейс
  2. Экспортируйте его, либо расширив UnicastRemoteObject (предпочтительно) или звонит UnicastRemoteObject.exportObject() на строительстве.
Другие вопросы по тегам