2013-12-22 166 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应用程序带来了许多有用的功能。