Синхронизация серверно-клиентских репозиториев ModeShape

Я хочу развернуть архитектуру сервер-клиент на основе ModeShape, но не могу понять, как настроить ModeShape и Infinispan для достижения моей цели.

Вот типичный пример использования:

  • Пользователь A создает узел в репозитории основного сервера.
  • Пользователь B извлекает этот узел локально и редактирует его поддерево и свойства в автономном режиме.
  • Снова подключившись к сети, пользователь B отправляет этот узел обратно в репозиторий основного сервера и при необходимости объединяет его содержимое (т. е. узел также был изменен в основном репозитории).

Итак, мои требования:

  • Мне нужен основной репозиторий сервера для хранения всех данных.
  • Мне нужно, чтобы каждый клиент мог извлекать определенные узлы из репозитория сервера и хранить их локально.
  • Мне нужно, чтобы каждый клиент мог работать в автономном режиме (т.е. репозиторий основного сервера недоступен) в своем локальном репозитории.
  • Мне нужно, чтобы каждый клиент мог синхронизировать свой локальный репозиторий с основным репозиторием после подключения к сети и при необходимости объединять данные.

У вас есть идеи, как добиться такого поведения с помощью параметров кластеризации ModeShape и/или Infinispan? Или, может быть, вы можете придумать лучший подход?


person amischler    schedule 07.07.2014    source источник


Ответы (1)


Конфигурация основного сервера будет довольно обычной. ModeShape (и Infinispan) здесь довольно гибки, поэтому сложнее решить, как/где вы хотите сохранить весь контент ModeShape. В проекте довольно много полных примеров с различными конфигурациями и множество конфигурации для тестовых случаев, которые также могут быть полезны.

Что касается клиентов, я бы рекомендовал, чтобы они хранили контент в локальном репозитории, который сохраняется на локальном диске, поэтому это означает использование либо хранилища кеша Infinispan JDBC, либо хранилища кеша файловой системы. (С ModeShape 4.0 есть даже несколько других кэш-хранилищ Infinispan, которые будут работать и работать еще лучше.)

Тогда вопрос, как синхронизировать данные. ModeShape имеет встроенную кластеризацию, но идентичность всех экземпляров репозитория — это не совсем то, что вам нужно. К сожалению, в ModeShape нет ничего, что бы напрямую поддерживало эту функциональность, но вы можете реализовать ее самостоятельно. Затем клиент мог подключиться и загрузить подмножество содержимого основного репозитория (или те узлы, которые изменились, на основе информации журнала событий), а затем обновить свою локальную копию. Конечно, вы, вероятно, захотите убедиться, что вы не перезаписали какое-либо локальное содержимое, которое было обновлено клиентом, но еще не синхронизировано с сервером.

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

person Randall Hauch    schedule 14.07.2014