Синхронизация между спящим режимом, работающим локально и на сервере - PullRequest
0 голосов
/ 11 февраля 2010

Существует ли простой способ использования библиотеки для облегчения синхронизации двух экземпляров гибернации. Один работает локально на клиенте, а другой - на центральном сервере, доступном через веб-службу.

Таким образом, Клиент отслеживает изменения, которые он вносит, отправляет их на Сервер. Сервер гарантирует, что клиенты не обновляют несинхронизированные объекты, и сохраняет изменения клиентов.

Клиент также может синхронизироваться с сервером, чтобы он мог видеть изменения, сделанные другими клиентами.

Идея состоит в том, что клиент может работать в автономном режиме, без доступа к серверу и подключаться к сети только для синхронизации при необходимости.

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Не существует «магического» способа достижения этого. Вы должны сделать что-то вроде этого:

  • сделать поле version или lastModified для каждой сущности
  • отправка (через веб-сервисы, rmi или все, что в вашем распоряжении) локальных спящих сущностей в сериализованной форме (объект seriralization, xml, json)
  • сначала новых сущностей - просто сохраните их на сервере
  • удалено сущностей в секунду - вам придется где-то хранить их id s и version. Если версия на сервере не была изменена, удалите их. Если есть - решите сами, удалять их или нет
  • обновлено сущностей, третье - снова сравните поле version. Если на сервере не было никаких изменений, сохраните новый объект. Если были изменения, есть несколько вариантов:
    • сообщает о конфликте слияния и не объединяет их
    • переопределить версию сервера с версией клиента
    • реализовать более сложный механизм слияния, где каждое поле имеет свою версию, но это слишком сложно
0 голосов
/ 11 февраля 2010

Я не уверен, что получу все, но с клиентами, которые могут быть временно отключены, нелегко иметь дело. Такие клиенты, как правило, нуждаются во встроенной базе данных, что означает синхронизацию и / или слияние с основной базой данных при подключении к сети, и это действительно далеко не простой процесс. Итак, чтобы ответить на ваш первоначальный вопрос, я боюсь, что нет простого способа достичь этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...