2014-07-07 5 views
1

ModeShape를 기반으로 서버 - 클라이언트 아키텍처를 배포하고 싶지만 ModeShape 및 Infinispan을 구성하여 목표를 달성하는 방법을 알 수 없습니다. ,ModeShape 서버 - 클라이언트 리포지토리 동기화

  • 사용자 A는
  • 사용자 B가 로컬이 노드를 검색하고 하위 트리를 편집하고 속성을 다시 한 번 온라인
  • 오프라인 메인 서버 저장소에서 노드를 작성합니다

    여기에 일반적인 사용 사례입니다 사용자 B가이 노드를 주 서버 저장소로 밀어 넣고 필요할 경우 해당 내용을 병합합니다 (예 : 노드가 기본 저장소에서도 수정 됨).

그래서 내 requir ements는 다음과 같습니다.

  • 모든 데이터를 보유하려면 메인 서버 저장소가 필요합니다.
  • 서버 저장소에서 특정 노드를 가져 와서 로컬로 저장할 수 있도록 각 클라이언트가 필요합니다.
  • 로컬 저장소에서 오프라인으로 작업 할 수 있도록 (즉, 주 서버 저장소에 접근 할 수 없음)
  • 온라인으로 로컬 저장소를 기본 저장소와 동기화 할 수있게하려면 각 클라이언트가 필요합니다. 필요한 경우 데이터 병합

ModeShape 및/또는 Infinispan의 클러스터링 옵션을 사용하여 이러한 동작을 얻는 방법에 대해 알고 있습니까? 아니면 더 나은 접근법을 생각할 수 있습니까?

답변

1

주 서버의 구성은 꽤 일반적입니다. ModeShape (및 Infinispan)는 여기에서 꽤 유연하므로 더 힘든 부분은 ModeShape의 모든 내용을 유지할 방법/위치를 결정하는 것입니다. 이 프로젝트에는 다양한 구성을 가진 꽤 많은 수의 complete examples이 있으며 많은 도움이 될 configurations for test cases도 있습니다.

클라이언트의 경우 로컬 디스크에 보관되는 로컬 저장소에 콘텐츠를 저장하도록 권장하므로 인피니언의 JDBC 캐시 저장소 또는 파일 시스템 캐시 저장소를 사용하는 것이 좋습니다. (ModeShape 4.0에서는 훨씬 더 잘 작동하고 수행 할 수있는 몇 가지 Infinispan 캐시 저장소가 있습니다.)

그런 다음 질문은 데이터를 동기화하는 방법입니다. ModeShape에는 클러스터링이 내장되어 있지만 모든 저장소 인스턴스를 동일하게 만드는 것은 원하는 것이 아닙니다. 불행히도,이 기능을 직접 지원하는 ModeShape에는 아무것도 없지만, 독자적으로 구현할 수있는 기능입니다. 그런 다음 클라이언트는 주 저장소 내용 (또는 이벤트 저널 정보를 기반으로 변경된 노드)의 하위 집합을 연결하고 다운로드 한 다음 로컬 복사본을 업데이트 할 수 있습니다. 물론 클라이언트가 업데이트했지만 아직 서버와 동기화되지 않은 로컬 컨텐트를 덮어 쓰지 않았는지 확인하고 싶을 수도 있습니다.

이렇게하는 것은 약간의 노력이 필요하지만, ModeShape 위에서 완전히 할 수 있습니다. 실제로, 작업의 대부분은 각 저장소의 이벤트 저널 (예 : 저장 트랜잭션 저널 및 각 트랜잭션에서 변경된 내용)을 사용하여 독립적으로 업데이트 된 두 개의 저장소의 내용을 병합합니다.

관련 문제