Синхронизация методов Java RMI - PullRequest
2 голосов
/ 10 апреля 2010

У меня есть класс, который хранится на «сервере», и несколько клиентов могут вызывать этот метод. Этот метод возвращает класс. Теперь, когда клиенты вызывают методы доступа в этом классе, например, метод набора доступа. Я хочу, чтобы объект на сервере обновлялся и синхронизировался между всеми остальными клиентами.

Как использовать:

public synchronized setStatus(String s) { this.status = s; }

в Java для достижения этого.

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 апреля 2010

Ключевое слово synchronized не выполняет эту функцию, скорее ключевое слово synchronized пытается получить встроенную блокировку для текущего объекта.

Пусть все ваши клиенты экспортируют себя как Remote объекты и регистрируются на обновления на сервере. Когда один из ваших клиентов обновляет сервер, сервер затем вызывает всех зарегистрированных Remote клиентов и просит их обновить.

Этого можно достичь с помощью шаблона Observer. Если все ваши клиенты реализуют интерфейс java.util.Observer и либо сервер, либо (если ваш класс Remote), класс, который вы хотите обновить, может расширить java.util.Observable. Когда класс / сервер обновляется, наблюдатели могут быть уведомлены с новым значением, что сэкономит на некоторой сетевой задержке клиентов, запрашивающих у сервера новое значение.

0 голосов
/ 10 апреля 2010

Я пытаюсь понять вопрос. Я имею в виду две идеи:

  1. вы вызываете удаленный вызов getObject(), а затем хотите обновить возвращенный объект и синхронизировать его между всеми клиентами. Это не сработает. Когда объект передается клиенту, обновления являются локальными для этого клиента.

  2. Вы спрашиваете, можете ли вы синхронизировать удаленный вызов и сделать это значение доступным для всех клиентов после обновления. Ответ здесь да . Предполагается, что все ваши клиенты получают доступ к значению не локально, а через удаленный вызов:

      public String getStatus() throws RemoteException;
    

Если это так, то ваши клиентские вызовы, независимо от того, вызвали ли они метод set, все получат новое значение.

...