基本觀念之外

如果您計劃提供同步化支援,且沒有現有的機制可用來處理同步化狀態,這一節說明如何從頭實作訂閱者。 這意謂著不存在現有的同步化基礎架構,同時也將說明如何利用所提供的某個 API 來維護同步化狀態。

在這個範例的其餘部分,我們將使用一個執行中的範例。 您可以在 org.eclipse.team.examples.filesystem 外掛程式的檔案系統提供者套件中找到程式碼。 您應該從 CVS 儲存庫移出專案,用來作為閱讀這份指導教學時的參考資料。

從頭實作訂閱者

這第一個範例假設沒有現有的基礎架構可用來維護本端工作區的同步化狀態。 從頭實作訂閱者時,您可以利用 org.eclipse.team.core 外掛程式所提供的某些其他 API。 org.eclipse.team.core.variants 套件包含 Subscriber 的兩個可用來簡化實作的子類別。 第一個是下面第二個範例所將討論的 ResourceVariantTreeSubscriber。 第二個是第一個的子類別:ThreeWaySubscriber。 這項訂閱者實作提供了若干可供管理本端工作區同步化狀態的很有用的類別。 如果您沒有任何現有的基礎架構,這是一個好的開始。

我們將利用 org.eclipse.team.examples.filesystem 外掛程式中的檔案系統範例,說明如何從頭實作訂閱者。 下列說明中使用儘可能少的程式碼,因為您可以在 Eclipse CVS 儲存庫中找到它。 雖然在技術上不是一個三向訂閱者,但這個檔案系統範例仍可以很好地使用這個基礎架構。 FTP 和 WebDAV 外掛程式也是用這個基礎架構來建置的。

ThreeWaySubscriber

在檔案系統範例中,我們已有 RepositoryProvider 的實作,它將本端專案關聯於本端內容鏡映所在的檔案系統位置。 FileSystemSubscriber 建立成 ThreeWaySubscriber 的子類別來利用 ThreeWaySynchronizer 管理工作區同步化狀態。 這個類別的子類別必須執行下列動作:

除了訂閱者實作之外,檔案系統提供者的取得和放置作業都進行過修改,來更新 ThreeWaySynchronizer 中的同步化狀態。 這些作業是在 org.eclipse.team.examples.filesystem.FileSystemOperations 類別中實作的。

ThreeWaySynchronizer

ThreeWaySynchronizer 用來管理本端工作區和遠端位置之間的同步化狀態。 它會快取和持續保存本端、基礎和遠端時間戳記,以便支援資源同步化狀態的有效計算。 它也會向任何登錄的接聽器發動變更通知。 ThreeWaySubscriber 會將這些變更事件轉換成適當的格式,以便傳送給訂閱者所登錄的接聽器。

ThreeWaySynchronizer 利用核心排程規則和鎖定來確保執行緒安全以及提供變更通知批次作業。

ThreeWayRemoteTree

ThreeWayRemoteTree 是用來配合 ThreeWaySubscriber 進行調整的 ResourceVariantTree 的子類別。 用戶端必須置換它來提供從伺服器提取遠端狀態的機制。 下一個範例將詳細討論 ResourceVariantTree

CachedResourceVariant

CachedResourceVariant 是在某個時段(目前是 1 小時)內用來快取任何提取內容的 IResourceVariant 的局部實作。 這很有用,因為在一小段時間內,內容可能會重複存取許多次(比方說,判定同步化狀態及將內容顯示在比較編輯器中)。 子類別仍必須提供唯一內容 ID 及可持續保存以便重建資源變式控點的位元組陣列。

在現有的工作區同步化上建置

許多儲存庫提供者可能已有用來管理其同步化狀態的機制(例如,它們有現有的外掛程式)。 ResourceVariantTreeSubscriber 及其相關類別提供在現有同步化基礎架構上進行建置的功能。 比方說,這是所有 CVS 訂閱者的 Super 類別。

ResourceVariantTreeSubscriber

如上一範例所提及,ThreeWaySubscriber 是利用 ThreeWaySynchronizer 來提供本端工作區同步化的 ResourceVariantTreeSubscriber 的子類別。 ResourceVariantTreeSubscriber 的子類別必須提供:

訂閱者的其他功能是利用這些機能來實作的。

ResourceVariantTree

ResourceVariantTree 是提供下列功能的 IResourceVariantTree 的具體實作:

子類別必須實作下列作業:

提供 ResourceVariantByteStore 的具體實作,用來跨越工作台呼叫持續保存位元組 (PersistantResourceVariantByteStore) 或只快取現行階段作業的位元組 (SessionResourceVariantByteStore)。 不過,在現有工作區同步化基礎架構上建置訂閱者,通常需要實作 ResourceVariantByteStore 子類別來連結基礎同步化程式。 比方說,ThreeWayRemoteTree 會使用將遠端位元組儲存在 ThreeWaySynchronizer 中的位元組儲存庫實作。

在這個範例中,除了要求控點的來源是資源變式樹狀結構實例而非訂閱者之外,資源變式控點的建立與上一個範例沒有不同。