JCR 基本概念
Posted
技术标签:
【中文标题】JCR 基本概念【英文标题】:JCR basic concepts 【发布时间】:2014-02-18 05:43:56 【问题描述】:我最近一直在使用恰好使用 JCR 的 Magnolia CMS。
我面临的一个问题是 JCR 数据损坏,我发现我对如何解决这种情况知之甚少。
我对JCR的理解如下:
-
JCR 是一种规范,有多种实现方式
Jackrabbit 是一种 JCR 实现
Jackrabbit 可以直接使用文件系统或使用 mysql 等数据库来存储信息
现在我的问题是
-
如何备份和恢复 JCR 存储库?
是否有任何特定工具可用于检查给定 JCR 的完整性并尝试修复它?我一直在玩 toromiro。
是否有任何特定的信息/教程资源可供我阅读以全面正确地理解 JCR 技术?
更新:
我还有一些其他问题:
-
如果给定的 JCR 实现将内容存储在数据库中,我是否可以期望所有内容都存储在该数据库中,或者某些内容(即图像)是否会直接存储在文件系统上而不是在数据库中?
目前我们有一个由三个不同的网络服务器访问的 JCR 存储库,据我了解,JCR 规范考虑了这种情况并保护了存储库,以防止由于并发写入访问而导致内容不一致。这是正确的吗?
具体来说,我们遇到的问题在于节点 A 包含对节点 B 的引用,但节点 B 不可访问,在使用 groovy 脚本后,我们设法删除了节点 B(这似乎处于不一致的状态),但是,我们如何找到对节点 B 的所有引用(可能不仅节点 A 引用了它,而且节点 C 也引用了它)。到底是什么原因导致 JCR 存储库损坏?,顺便说一句,我们还尝试使用 forceConsistencyCheck、autorepair 和 enableConsistencyCheck 标志,但没有解决问题。
谢谢
【问题讨论】:
【参考方案1】:您对JCR的理解是正确的:它是一个已经被多个项目(包括Jackrabbit、ModeShape、Alfresco、eXo等)实现的规范。事实上,JCR 有多个版本(1.0、2.0 和很快的 2.1),并非所有实现都支持所有 JCR 版本。
(完全披露:我是 ModeShape 的创始人和负责人。)
没有标准或通用的方法来备份 JCR 存储库,但其中一些实现提供了自己的机制。例如,如果所有内容都存储在 DBMS 中,那么您可以使用 DBMS 备份和恢复功能。 Jackrabbit 有自己的backup mechanism,ModeShape 也是如此。
您正在做什么样的完整性检查,Toromino 是如何做到的? JCR 实现不应允许保存任何违反已定义约束的内容(例如,具有属性和子节点定义的节点类型定义),并且它们限制(在不同程度上)如何更改这些节点定义。
我不知道有什么出色的 JCR 书籍或在线资源,但请查看 Jackrabbit docs 和 ModeShape docs。
【讨论】:
感谢提醒,有没有办法强制所有内容都保存在 DBMS 中?我没有对 toromiro 进行完整性检查,我只是用了一点,希望能有所帮助。请查看我更新的问题并帮助我了解您的知识,非常感谢。 存储的内容可能取决于特定 JCR 实现的配置。 (ModeShape 可以将所有内容存储在关系数据库中,但我们建议不要使用索引,因为查询变得太慢。)更熟悉 Jackrabbit 的人将不得不回答您的一致性检查问题。以上是关于JCR 基本概念的主要内容,如果未能解决你的问题,请参考以下文章