2012-08-13 2 views
0

JPA (그리고 지속성 공급자로 최대 절전 모드)를 사용하는 응용 프로그램을 작성했습니다. 여러 테이블이있는 데이터베이스에서 작동합니다.두 개의 JPA 응용 프로그램을 동기화하는 데이터

"오프라인 모드"를 만들 필요가 있습니다. 클라이언트로 작동하는 프로그램 복사본은 도달 할 때 서버와 동기화 된 상태로 데이터를 유지하면서 동일한 기능을 허용합니다.

목표는 서버에서 "분리"하고 데이터를 변경 한 다음 변경 사항을 다시 병합 할 수있는 클라이언트를 얻는 것입니다. 수정 제어 시스템과 조금 같습니다.

사용자가 보관할 버전을 결정하는 경우 충돌을 관리하는 것은 중요하지 않습니다.

제 아이디어는 데이터베이스의 각 행에 마지막 편집 타임 스탬프를 할당하는 것이 었습니다. 클라이언트는 처음에는 전체 데이터베이스의 복사본을 다운로드하고 서버에 연결되어 있지 않을 때 행을 수정할 때 두 번째 타임 스탬프를 기록합니다. 이 방법으로 변경된 데이터와 서버와 동기화되는 마지막 시간 소인을 알 수 있습니다. 서버에 다시 연결할 때, 그는 서버로부터의 마지막 동기화 이후에 변경된 데이터가 무엇인지 물어야하고 변경된 데이터를 보냅니다. (조금 단순화되었지만 충돌 관리는 큰 문제가 아니어야 함)

행을 삭제하는 경우 물론 이것은 물론 작동하지 않습니다. 서버 또는 클라이언트 모두 행을 삭제하면이를 알지 못하며 다른 행은 알 수 없습니다.

해결 방법은 삭제 된 행 목록이있는 테이블을 유지하는 것이지만 너무 비싸 보입니다.

누구나 작동하는 방법을 알고 있습니까? 이미 비슷한 것이 있습니까?

답변

0

Enver은 :

간단한 해결책을 가지고 싶은 경우에, 당신은 당신의 "타임 스탬프"와 같은 역할을 버전-필드를 만들 수 있습니다.

감사 : 당신이 복잡하고 강력한 솔루션을 가지고 싶은 경우에

, 당신은 Hibernateplugin

+0

이 두 번째 완벽 보이지만, 무거운 될 수 없습니다 사용해야합니다/천천히? – lelmarir

+0

드라이브에 더 많은 공간이 필요합니다. –

관련 문제