2013-12-22 165 views
1

我正在尋找一個API來同步兩個不同的JCR存儲庫。JCR存儲庫同步API

  • 同步將經常進行(例如每1小時)。
  • 只有指定的子樹必須同步。
  • 存儲庫是主存儲器,另一個是從屬存儲庫。
  • 從屬存儲庫是read-onley,必須在 緊急情況下可訪問。

是否有任何API來做這樣的同步操作?

任何建議表示讚賞。

回答

1

我能想到的幾個方面,這僅使用JCR API中的任何JCR實現的事情:

  1. 創建並註冊在監視感興趣的特定子樹發生的事件的主存儲庫的事件監聽器,然後以某種持久形式記錄這些事件(例如,在隊列,文件系統,第三個存儲庫等中......無論在你的環境中效果如何)。然後定期處理這些記錄的事件,並通過操縱從屬存儲庫中的節點來「重放」它們。
  2. 在主存儲庫上創建並註冊一個事件監聽器,監聽發生在感興趣的特定子樹上的事件,然後立即連接到從屬存儲庫並「重放」這些事件。
  3. 定期連接到主存儲庫並使用日誌記錄功能(如果支持)獲取自上次完成後主存儲庫中已更改的內容,然後連接到從屬存儲庫並「重放」那些適用的事件到特定的感興趣的子樹。

另一種選擇可能是通過對主存儲庫和從屬存儲庫進行羣集完全同步。 Jackrabbit和ModeShape都可以做到這一點,但它們都完全不同,因爲它沒有在JCR規範中定義。

例如,使用ModeShape(披露:我是項目負責人),您可以創建只有2個進程的小羣集或具有多個進程的較大羣集。您可以預先選擇羣集中的每個進程是否具有所有內容的完整副本(即「複製」和「無效」模式),或只是某些內容(即「分佈式」模式)。有關詳細信息,請參閱documentation。這些羣集還可以跨越多個站點,有助於提高容錯能力。 ModeShape具有彈性,因此您可以隨時將更多進程添加到羣集,甚至可以將其刪除。最好的部分是客戶端應用程序仍然只使用JCR API,但看到整個存儲庫內容,就像它們是非集羣存儲庫一樣。

1

(全新的,仍然沒有發佈)Apache Sling replication module這是開箱即用。它需要在存​​儲庫之上運行Sling,但這相當輕量級,併爲JCR應用程序帶來了許多有用的功能。