2012-03-28 5 views
0

Ich versuche einen einzelnen Dateiknoten für ein Bild mit Namen zu erstellen (zB A.gif). Jetzt möchte ich die Datei über mehrere Knoten hinweg wiederverwenden. Gibt es eine Möglichkeit, dies zu tun? Als Workaround neu erstellt ich Dateiknoten für verschiedene Pfade in meinem Repository, aber dies führt zu doppelten Dateien.JCR create single file, Verknüpfung von verschiedenen Knoten

Antwort

0

Ich bin mir nicht sicher, ob ich Ihr Problem verstehe. Was ich jedoch tun würde, ist, die Datei an einem einzigen Ort zu speichern und dann unter Verwendung einer path Eigenschaft von mehreren Standorten aus darauf zu verweisen.

Angenommen, Sie eine der folgenden Knotenstruktur

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

Sie haben an jedem der Artikel eine Eigenschaft mit dem Namen gesetzt imagePath, die auf den Pfad der Bildpunkte angezeigt werden, in diesem Fall /content/images/image1.

+0

hi robert, das ist genau das, was ich versuche zu tun .. Datei an einem Ort zu speichern und verweisen Sie von mehreren Standorten. Ich bin jedoch nicht in der Lage, herauszufinden, wie man "Pfad" von mehreren Orten aus einstellt. – sfbay

+0

Siehe mein Update. –

+0

danke für die Antwort, Robert. schätze es – sfbay

1

Wenn Sie Jackrabbit verwenden, ist das Kopieren eines Dateiknotens (oder vielmehr das Kopieren einer Binäreigenschaft) günstig, wenn DataStore aktiv ist.

Diese Komponente stellt sicher, dass "große" binäre Eigenschaften (mit einem konfigurierbaren Größengrenzwert IIRC) nur einmal gespeichert werden, basierend auf einer Zusammenfassung ihres Inhalts.

So können Sie in diesem Fall den gleichen Dateiknoten viele Male kopieren, ohne sich um Festplattenspeicher kümmern zu müssen.

+0

danke für die antwort, bertrand. schätze es – sfbay

0

Und nur für die Vollständigkeit, vergessen Sie nicht 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()); 
} 
+0

Beachten Sie, dass Referenzen in Davids Model (http://wiki.apache.org/jackrabbit/DavidsModel#Rule_.235:_References_considered_harmful) als schädlich gelten. - Ich persönlich stimme dem zu, aber die Meinungen sind natürlich unterschiedlich. –

+0

Ich verwende auch keine Referenzen :) wurde nur der Vollständigkeit halber erwähnt. – TedTrippin

+0

Ok, macht absolut Sinn ;-) –

0

Der Typ nt:linkedFile wurde nur für diese Art der Verwendung hergestellt.