3

能否请任何人解释有关 JCR 工作区的 JCR 2.0 规范?

我知道一个会话总是绑定到一个持久工作区,尽管一个持久工作区可能绑定到多个会话。

这可能与版本控制和事务有关,尽管我不知道为什么。

一些观察:

  • 只能在同一工作空间的节点之间进行引用
  • 执行查询将始终针对单个工作区

工作区似乎是关于代表相同内容(相同 UUID)的节点,在:

  • 不同版本的“某物”,也许是项目?
  • 工作流程的不同阶段

并且不应该用于 ACL。

同样在 JackRabbit 中,每个工作区都有其持久性管理器。而 ModeShape 有一个源连接器 - 独立于工作区。

4

1 回答 1

6

David 的模型 ( http://wiki.apache.org/jackrabbit/DavidsModel ) 规则 #3 建议仅在需要 clone()、merge() 或 update() 时使用工作区。对于绝大多数 JCR 应用程序,这意味着不使用工作空间。将事物放在不同的路径下,在它们上设置特定的属性值或混合节点类型并使用 JCR 的版本控制涵盖了您提到的版本控制和工作流用例。

例如,要管理打印作业,您可以简单地在名为“new”、“in-progress”、“rejected”和“done”的 JCR 文件夹之间移动它们。这就是在某些 unix 版本中使用文件系统文件夹的方式。JCR 允许您做同样的事情,同时受益于它的“类固醇文件系统”特性,从而使事情变得非常简单、透明和高效。

还要注意 David 的规则 #5:引用是有害的——我们(Apache Sling 和 Day/Adobe CQ/CRX 开发人员)倾向于只使用路径,作为更松散和更灵活的引用。

正如您提到的查询:我们也很少使用这些查询 - 如果您的内容模型的路径结构对最常见的用例有意义,那么在 JCR 树中导航会更加有效。

于 2011-06-23T11:33:24.033 回答