JCR 创建单个文件,从不同节点链接

Posted

技术标签:

【中文标题】JCR 创建单个文件,从不同节点链接【英文标题】:JCR create single file, link from different nodes 【发布时间】:2012-03-28 03:52:35 【问题描述】:

我正在尝试为具有名称(例如 A.gif)的图像创建单个文件节点。现在,我想跨多个节点重用该文件。有没有办法做到这一点? 作为一种解决方法,我正在为我的存储库中的不同路径重新创建文件节点,但这会导致文件重复。

【问题讨论】:

【参考方案1】:

如果您使用的是jackrabbit,如果DataStore 处于活动状态,则复制文件节点(或者更确切地说复制二进制属性)会很便宜。

该组件确保“大”二进制属性(具有可配置的大小阈值 IIRC)仅存储一次,基于其内容的摘要。

因此,在这种情况下,您可以多次复制同一个文件节点,而不必担心磁盘空间问题。

【讨论】:

【参考方案2】:

我不确定我是否理解您的问题。但是,我要做的是将文件存储在一个位置,然后使用 path 属性从多个位置引用它。

假设你有如下节点结构

-content
 - articles
  - article1
  - article2
 - images
  - image1

您可以在每篇文章上设置一个名为imagePath 的属性,该属性指向要显示的图像的路径,在本例中为/content/images/image1

【讨论】:

嗨,罗伯特,这正是我想要做的。将文件存储在单个位置并从多个位置引用它。但是,我无法弄清楚如何从多个位置设置“路径”? 另外,我使用标识符 (node.getIdentifier()),因为它不会改变。这意味着您可以移动/更改图像的路径,而无需更改所有引用。【参考方案3】:

nt:linkedFile 类型就是为这种用途而设计的。

【讨论】:

【参考方案4】:

为了完整起见,不要忘记references。

Node imageNode = rootNode.addNode("imageNode");
imageNode.addMixin(JcrConstants.MIX_REFERENCEABLE);

Node node1 = rootNode.addNode("1");
node1.setProperty("image", imageNode);

Node node2 = rootNode.addNode("2");
node2.setProperty("image", imageNode);

session.save();

PropertyIterator references = imageNode.getReferences();
while (references.hasNext()) 
    Property reference = references.nextProperty();
    System.out.println(reference.getPath());

【讨论】:

请注意,引用在 David 的模型 (wiki.apache.org/jackrabbit/….) 中被认为是有害的 - 我个人同意这一点,但意见当然不同。 我也不使用引用:) 只是为了完整性。

以上是关于JCR 创建单个文件,从不同节点链接的主要内容,如果未能解决你的问题,请参考以下文章

如何创建将从多个链接打开随机链接的单个链接

linux原理与基础

软链接与硬链接的区别

什么是硬链接和软链接 --- 2021-11-08

Linux 练习题-3文件与磁盘 问答

创建一个链接三种不同节点类型和两个节点引用的视图