JCR的基本概念

时间:2014-02-18 05:43:56

标签: java jackrabbit jcr magnolia

我最近一直在使用Magnolia CMS,恰好使用JCR。

我遇到的一个问题是JCR数据损坏,我发现我对如何解决这种情况知之甚少。

我对JCR的理解如下:

  1. JCR是一个规范,有几个实现
  2. Jackrabbit是一个JCR实施
  3. Jackrabbit可以直接使用文件系统存储信息,也可以使用像MySQL这样的数据库
  4. 现在我的问题是

    1. 如何备份和恢复JCR存储库?
    2. 是否有任何特定工具可用于检查给定JCR的完整性并尝试修复它?我一直在玩托罗米罗。
    3. 是否有任何特定的信息/教程资源我应该阅读以充分和正确地理解JCR技术?
    4. 更新:

      我还有其他一些问题:

      1. 如果给定的JCR实现将内容存储在数据库中,我可以期望所有内容都存储在该数据库中,还是会发生一些内容(即图像)直接存储在文件系统上而不是在数据库中?
      2. 目前我们有一个JCR仓库,由三个不同的Web服务器访问,我的理解是JCR规范考虑了这种情况,并且它保护了repo,以防止由于并发写访问而导致内容不一致。这是对的吗?
      3. 具体来说,我们遇到的问题包括节点A包含对节点B的引用,但节点B不可访问,在使用groovy脚本后,我们设法删除了节点B(这似乎是但是,我们怎样才能找到对节点B的所有引用(可能不仅是节点A引用它,而且还有节点C)。到底怎么可能导致JCR repo变得腐败呢?,顺便说一句,我们还尝试使用forceConsistencyCheck,autorepair和enableConsistencyCheck标志,它没有解决问题。
      4. 由于

1 个答案:

答案 0 :(得分:2)

您对JCR的理解是正确的:它是由多个项目(包括Jackrabbit,ModeShape,Alfresco,eXo等)实施的规范。实际上,JCR有多个版本(1.0,2.0和很快2.1),并非所有实现都支持所有JCR版本。

(完全披露:我是ModeShape的创始人和负责人。)

备份JCR存储库没有标准的通用方法,但有些实现提供了自己的机制。例如,如果所有内容都存储在DBMS中,则可以使用DBMS备份和还原功能。 Jackrabbit拥有自己的backup mechanismModeShape也是如此。

您正在做什么样的完整性检查,Toromino如何做到这一点? JCR实现不应允许保存任何违反定义约束的内容(例如,具有属性和子节点定义的节点类型定义),并且它们(在不同程度上)限制如何更改这些节点定义。

我不知道任何优秀的JCR书籍或在线资源,但请查看Jackrabbit docsModeShape docs