2012-08-30 3 views
4

리모컨 CMIS repository에는 여러 폴더/파일이 있습니다.원격 CMIS 저장소의 변경을 감지하는 가장 효율적인 방법은 무엇입니까?

나는이 폴더/파일의 로컬 복사본을 동기화 상태로 유지하는 a software을 쓰고 있습니다.

  1. 처음에는 모든 것을 재귀 적으로 다운로드합니다.
  2. 나중에 실행하면 변경된 내용을 확인하고 변경 사항을 다운로드합니다.

원격 변경 사항을 확인하는 가장 효율적인 방법은 무엇입니까?
(파일/폴더 추가/제거)
가장 효율적 = 최소 대역폭 사용.

CMIS protocol 만 사용할 수 있으며 원격 서버에서 사용자 지정 소프트웨어를 실행할 수 없습니다.

내 아이디어 지금까지 :

  • 아이디어 1 : 다시 다운로드 모든게 좋을 꺼마다.
  • 아이디어 2 : 수정 날짜가 재귀적일 것으로 기대하면서 루트 폴더의 수정 날짜를 확인하십시오.
  • 아이디어 3 : CMIS 검색을 사용하여 마지막으로 동기화 한 파일보다 최신 파일을 모두 찾으십시오. 문제 : 어떤 파일이 제거되었는지 알려주지 않습니다.

다른 아이디어?
나는 CMIS 프로토콜에 대해 많이 모른다. 좀 더 편리 할 수도있다.

답변

8

저장소의 변경 로그를 사용하는 것이 올바른 방법이지만 모든 저장소가이를 지원하지는 않습니다. 예를 들어, Alfresco의 경우 감사 서브 시스템을 구성해야하며 alfresco- global.properties에서 audit.cmischangelog.enabled = true를 설정해야합니다.

저장소가 변경 사항을 지원하는지 확인하려면 저장소의 getCapabilities 응답 결과로 볼 수 있습니다. '변경 사항'이 '없음'으로 설정되면 저장소가 변경 로그를 지원하지 않습니다.

그렇다고 가정하면 리포지토리에 최신 변경 로그 토큰을 요청해야합니다. getRepositoryInfo에서 가져올 수 있습니다. getContentChanges를 호출하기 전에 저장하십시오. 그런 다음, 다음 호출에서 토큰을 전달하십시오. 토큰이 발행 된 이후에 변경 사항이 적용됩니다.

그래서, 당신의 코드가 필요 :가 아닌 다른 뭔가를

  1. 검사는 GetCapabilities를 변경 = 없음
  2. 저장 getRepositoryInfo의 latestChangeLogToken
  3. 물어 처음, 인수없이 getContentChanges 전화
  4. 다음에 요청할 때 마지막으로 저장된 토큰을 사용하여 getcontentChanges를 호출하십시오.
  5. 그러면 결과 집합을 처리 할 수 ​​있습니다. 각 변경 로그 항목은 유형 (생성, 업데이트, 삭제, 권한 등, 정확한 값을 보려면 spec 참조)을 알려주고 변경된 객체의 cmis : objectId를 제공합니다. 2 단계

내가 가진

  • 반복 파이썬으로 구현이 방법을 사용하여 단방향 동기화를 수행하는 "CMIS 동기화"스크립트가 있습니다. Alfresco를 소스로, OpenCMIS InMemory 저장소를 대상으로 테스트했습니다. 거기에 관심이 있다면 나는 그것을 사용할 수 있습니다.

  • +0

    고마워요! 따라서 changelog가 활성화되지 않은 경우 검색 또는 수정 날짜와 같은 다른 방법으로 폴백해야 할 것입니다. 나는 당신의 파이썬 스크립트에 매우 흥미가있다! DotCMIS는 OpenCMIS와 매우 비슷하므로 훌륭한 참고 자료가 될 것입니다. 어쨌든 내 이메일은 [email protected] –

    +0

    @ jeff-potts cmis-sync 스크립트를 우리와 공유 할 수 있었습니까? – toong

    +1

    예, 여기 있습니다 : http://code.google.com/p/cmis-sync/ –

    2

    아이디어 3의보다 이상적인 버전은 게시 한 CMIS 프로토콜을 통해 파고들에 따라 쉽게 완성됩니다.

    2.1.11 Change Log

    CMIS 애플리케이션 과거의 특정 시점 이후 저장소에 저장된 객체에 발생한 변경 세트를 쉽게 발견 할 수 있도록하기 위해 "변경 로그"메커니즘을 제공합니다. 이 변경 로그는 리포지토리의 외부 인덱스를 유지 관리하는 검색 서비스와 같은 응용 프로그램에서 인덱스를 현재 리포지토리의 현재 상태와 동기화하는 방법을 효율적으로 결정하기 위해 사용할 수 있습니다 (현재 리포지토리에있는 모든 개체를 쿼리하지 않고) .

    변경 로그에 기록 된 항목을 "변경 이벤트"라고합니다.

    변경 로그의 변경 이벤트는 변경 이벤트가 발생한 시간의 오름차순으로 반환되어야합니다.

    원하는 도구를 사용하면 전체 저장소의 초기 풀링을 수행하고 풀이 수행 된 시간을 절약 할 수 있어야합니다.(사용자가 선택한 간격으로) 저장소에 대한 후속 쿼리는 다음과 같은 절차를 완료 :

    • 저장소
    • 구문 분석 이전 이후에 생성 된 모든 변경
    • 이 수행 작업을 끌어에서 CMIS 변경 로그를 아래로 당겨 ChangeType enum을 기반으로합니다. 예를 들어, "deleted"열거 형이 objectID에 대해 존재하는 경우 해당 객체를 로컬로 삭제합니다.
    관련 문제