세부사항

동기화 지원 제공을 계획하지만 동기화 상태를 관리하는 기존 메커니즘이 없을 경우 이 섹션에서는 처음부터 가입자를 구현하는 방법을 설명합니다. 이것은 기존 동기화 하부구조가 없음을 의미하며, 동기화 상태를 관리하기 위해 제공되는 일부 API를 사용하는 방법을 설명합니다.

이 예제의 나머지에서는 실행 중인 예제를 이용합니다. 소스 코드는 org.eclipse.team.examples.filesystem 플러그인의 파일 시스템 제공자 패키지에서 찾을 수 있습니다. CVS 저장소에서 프로젝트를 체크아웃하여 이 학습서를 읽는 동안 참조로 사용해야 합니다.

처음부터 가입자 구현

첫 번째 예제에서는 로컬 작업공간의 동기화 상태를 관리하는 기존 하부구조가 없는 것으로 가정합니다. 처음부터 가입자를 구현할 때 org.eclipse.team.core 플러그인에 제공된 일부 추가 API를 사용할 수 있습니다. org.eclipse.team.core.variants 패키지에는 구현을 단순화하는 데 사용될 수 있는 가입자에 대한 두 개의 서브클래스가 들어 있습니다. 첫 번째는 아래의 두 번째 예제에서 설명될 ResourceVariantTreeSubscriber입니다. 두 번째는 첫 번째의 서브클래스(ThreeWaySubscriber)입니다. 이 가입자 구현은 로컬 작업공간의 동기화 상태를 관리하는 데 필요한 여러 개의 유용한 클래스를 제공합니다. 기존 하부구조가 없을 경우 여기서 시작하는 것이 좋습니다.

처음부터 가입자를 구현하는 것은 org.eclipse.team.examples.filesystem 플러그인에서 사용 가능한 파일 시스템 예제를 사용하여 설명됩니다. 다음 설명에서 코드는 Eclipse CVS 저장소에서 사용 가능하기 때문에 최소한의 크기로 한정됩니다. 기술적으로 3방향 가입자가 아니더라도 파일 시스템 예제에서는 이 하부구조를 계속해서 잘 이용할 수 있습니다. FTP 및 WebDav 플러그인도 이 하부구조를 사용하여 빌드됩니다.

ThreeWaySubscriber

파일 시스템 예제에서 로컬 컨텐츠가 이중복사된 파일 시스템 위치와 로컬 프로젝트를 연관시킨 RepositoryProvider 에 대한 구현을 이미 수행했습니다. 이 예제에서 ThreeWaySynchronizer를 이용하여 작업공간 동기화 상태를 관리하기 위해 ThreeWaySubscriber의 서브클래스로 FileSystemSubscriber가 작성되었습니다. 이 클래스의 서브클래스는 다음을 수행해야 합니다.

가입자 구현 외에 파일 시스템 제공자의 가져오기 및 넣기 조작이 ThreeWaySynchronizer의 동기화 상태를 갱신하기 위해 수정되었습니다. 조작이 org.eclipse.team.examples.filesystem.FileSystemOperations 클래스에 구현됩니다.

ThreeWaySynchronizer

ThreeWaySynchronizer는 로컬 작업공간과 원격지 간 동기화 상태를 관리합니다. 자원의 동기화 상태에 대한 효율적인 계산을 지원하기 위해 로컬, 기본 및 원격 시간 소인을 캐시하고 유지합니다. 또한 등록된 모든 리스너에 대한 변경 알림을 시작합니다. ThreeWaySubscriber는 이러한 변경 이벤트를 가입자에 등록된 리스너로 보낼 적절한 형식으로 변환합니다.

ThreeWaySynchronizer는 코어 스케줄링 규칙 및 잠금을 사용하여 스레드가 안전함을 보장하고 변경 알림 일괄처리 기능을 제공합니다.

ThreeWayRemoteTree

ThreeWayRemoteTreeThreeWaySubscriber에 맞게 조정된 ResourceVariantTree의 서브클래스입니다. 클라이언트에서 이를 대체하여 서버에서 원격 상태를 페치하는 메커니즘을 제공해야 합니다. ResourceVariantTree는 다음 예제에서 자세히 설명됩니다.

CachedResourceVariant

CachedResourceVariant는 일정 기간(현재 1시간) 동안 페치된 컨텐츠를 캐시하는 IResourceVariant에 대한 부분 구현입니다. 이는 단기간에 여러 번 컨텐츠에 액세스할 수 있기 때문에 유용합니다(예: 동기화 상태 판별 및 비교 편집기에 컨텐츠 표시). 서브클래스는 자원 변형 핸들을 재작성하기 위해 유지될 수 있는 바이트 배열과 함께 고유 컨텐츠 ID를 계속 제공해야 합니다.

기존 작업공간 동기화에 빌드

다수의 저장소 제공자에게는 이미 동기화 상태를 관리하는 메커니즘이 있을 수 있습니다(예: 기존 플러그인이 있는 경우). ResourceVariantTreeSubscriber 및 관련 클래스는 기존 동기화 하부구조에 빌드하는 기능을 제공합니다. 예를 들어 이것은 모든 CVS 가입자의 수퍼클래스입니다.

ResourceVariantTreeSubscriber

이전 예제에서 언급된 것처럼 ThreeWaySubscriberThreeWaySynchronizer를 사용하여 로컬 작업공간 동기화를 제공하는 ResourceVariantTreeSubscriber의 서브클래스입니다. ResourceVariantTreeSubscriber의 서브클래스는 다음을 제공해야 합니다.

가입자에 대한 기타 기능은 다음 기능을 사용하여 구현됩니다.

ResourceVariantTree

ResourceVariantTree는 다음 항목을 제공하는 IResourceVariantTree에 대한 구체적인 구현입니다.

다음은 서브클래스에서 구현되어야 합니다.

Workbench 호출(PersistantResourceVariantByteStore) 간 바이트를 유지거나 현재 세션(SessionResourceVariantByteStore)의 바이트만 캐시하는 ResourceVariantByteStore의 구현이 제공되었습니다. 그러나 기존 작업공간 동기화 하부구조에 가입자를 빌드하려면 일반적으로 기본 동기화기와 인터페이스하는 ResourceVariantByteStore 서브클래스에 대한 구현이 필요합니다. 예를 들어 ThreeWayRemoteTreeThreeWaySynchronizer에 원격 바이트를 저장하는 바이트 저장 구현을 사용합니다.

이 예제에서 자원 변형 핸들의 작성은 가입자 대신 자원 변형 트리 인스턴스에서 핸들을 요청하는 것을 제외하면 이전 예제와 다르지 않습니다.