Java Content Repository (JCR)
Das Java Content Repository ist eine Spezifikation für den einheitlichen Zugriff auf Content , Struktur und Metadaten in einem Repository. Die JCR-Version 1.0 wurde unter JSR 170 und die Version 2.0 unter JSR 283 veröffentlicht.
Das Repository besteht aus einem oder mehreren Workspaces. Jeder dieser Workspaces enthält eine hierarchische Baumstruktur, die aus Items besteht. Ein Item kann sowohl Node als auch Property sein. Jeder Baum hat genau eine Root Node und kann eine beliebige Tiefe bzw. Breite haben. Eine Node kann Properties und weitere Nodes enthalten.
JackRabbit
JackRabbit ist die Open Source Referenzimplementierung des JCR-Standards von Apache. Im folgenden Beispiel ist der Zugriff aufs Repository dargestellt.
package de.communardo.jcr; import java.io.IOException; import javax.jcr.LoginException; import javax.jcr.NoSuchWorkspaceException; import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; import org.apache.jackrabbit.core.TransientRepository; public class JCRTester { public static void main(String[] args) throws LoginException, NoSuchWorkspaceException, RepositoryException, IOException { Repository repository = new TransientRepository(); String user = "admin"; String password = "admin"; Session session = repository.login(new SimpleCredentials(user, password.toCharArray()), null); Node root = session.getRootNode(); String primaryNodeTypeName = "nt:folder"; String relPath = "test1"; root.addNode(relPath, primaryNodeTypeName); session.save(); } }
Mit dem TransientRepository
wird auf ein Repository zugegriffen, welches seine Inhalte im Speicher hält. Mit Ende des Lebenszyklus der Referenz repository
ist der Inhalt wieder verschwunden. Dieses Repository eignet sich gut für JUnit-Tests.
Wenn eine JackRabbit-Instanz läuft, kann man diese über eine Instanz von RMIRemoteRepository
ansprechen.
Repository repository = new RMIRemoteRepository("//localhost:1099/jackrabbit");
Wenn der Programmcode erfolgreich gelaufen ist, existiert jetzt Repository ein Ordner /test1. Dies kann man kontrollieren, indem am Repository per WebDAV anbindet. Nach dem Anmelden mit admin admin sieht man das Ergebnis.
Mit dem freien Tool JCR-Explorer kann man noch etwas komfortabler mit dem Repository arbeiten. Man kann Knoten mit entsprechendem Typ anlegen, Properties editieren, komplette Teilbäume verschieben oder kopieren und einiges mehr.
Da auch JSR-283 erwähnt ist, sollte vermerkt werden, dass mit JCR Version 2 eine Node auch mehrere Parents haben kann. Die gesamte Beschreibung und das Code-Beispiel beziehen sich offensichtlich rein auf Version 1 (JSR-170).
Jürg
http://www.twitter.com/juergmeier