2012-07-29 6 views
0

Java, jpa2, spring, hibernate 데이터베이스 응용 프로그램을 기반으로 솔루션을 찾고 있습니다. 기본적으로 엔티티의 SCM과 같은 작업을 수행 할 수 있습니다. 여러 응용 프로그램 서버에서 호스팅되는 데이터베이스 기반 Java 엔터프라이즈 응용 프로그램이 있습니다. 이러한 응용 프로그램 서버는 모두 동일한 Java 코드를 기반으로하며 동일한 데이터베이스를 사용하는 상태 비 저장 웹 응용 프로그램 (REST API 등)을 호스트합니다. 이 응용 프로그램이 제공하는 하나의 서비스는 파일 관리입니다. 사용자는 (다양한 API 클라이언트와 프론트 엔드 응용 프로그램을 통해) 파일과 폴더를 생성 (업로드), 삭제, 이름 바꾸기, 이동할 수 있습니다.변경 로그 및 데이터베이스 동기화를 사용하는 엔티티

이제 파일 버전 요구 사항이 갑자기 나타 났으며 마침내이 문제를 해결하고 싶습니다. 이것은 내가 자바 실체의 관점에서 해낸 것입니다 :

public class File { 

    private String id; 
    private ReadableInstant created; 

    private List<FileVersion> versions; 

} 

public class FileVersion { 

    private String name; 
    private FileVersion parent; 
    private List<FileVersion> children; 
    private ReadableInstant modified; 
    private FileOperation operation; 

} 

public enum FileOperation { 

    CREATE, 
    RENAME, 
    UPDATE, 
    DELETE 

} 

내가 위임을 통해 직접 File하지 FileVersion를 노출 할 계획입니다. 이 기능을 사용하려면 "head"버전 (버전 컬렉션의 마지막 항목)을 검색하는 간단한 방법이 필요합니다. 기본적으로 File의 모든 쓰기 작업은 현재의 "헤드"를 기반으로 새로운 FileVersion을 생성해야합니다. 동일한 데이터베이스에 액세스하는 여러 응용 프로그램 서버의 관점에서 각자 File 엔티티 (행 수준 잠금?)를 잠글 수있는 몇 가지 방법이 있는지 확실하지 않으므로 올바른 새 파일 버전을 기반으로해야합니다 " 머리".

또 다른 생각은 클라이언트가 변경 사항을 기반으로하는 일종의 버전 식별자를 제공하게하려는 것입니다. 지속될 때이 버전 식별자가 주어진 File에 대한 최신 FileVersion과 일치하지 않는 경우 응용 프로그램은 변경 사항을 거부해야합니다. ...

나는 이와 같은 올바른 방향으로 가고있는 것으로 간주됩니다. 실패?

답변

1

"헤드"값 (정상적인 테이블과 같습니다)과 모든 변경 사항을 기록한 두 번째 테이블 만있는 테이블이 하나 있습니다. 이렇게하면 이전 버전도 얻을 수 있습니다. 저널 테이블을 업데이트하거나 자바로 트리거를 만들 수 있습니다.

+0

답변을 수락하지 못해 죄송합니다. 방금이 질문을 잊어 버렸습니다. 그 동안 나는 당신이 제안한 것과 크게 다르지 않은 해결책을 가지고갔습니다. 나는 이제 보통의 File 객체를 가지며 FileHistoryEntry 컬렉션을 가지고있다. 이 항목은 이전 File 버전을 복구하는 것으로 해석 될 수 있지만 완전히 날아간 SCM 계열 시스템만큼 정교하지는 않습니다. – aeisele