JCR ist ein Standard, um ''(hauptsächlich in [Java], aber es gibt auch APIs in anderen Sprachen und Abwandlungen wie [PHPCR|http://phpcr.github.io/])'' Inhalte beliebigen Formats in einem einheitlichen Datenspeicher (Repository) abzulegen. Die abgelegten Daten (oder auch Dateien) können dann mit Metadaten ''(Eigenschaften, Properties)'' und ggf. Unterdaten ''(Unterverzeichnissen, Child-Nodes)'' versehen werden. Die JCR-API regelt den Zugriff auf diese Daten direkt oder durch Abfragen ähnlich wie in einer relationalen [Datenbank] oder auch wie in einer XML-Datenbank per XPath. Sie regelt auch die Beschreibung von Node-Typen, Versionierung, Zugriffsrechte, etc. Ein besonderer Bonus ist, das man zumeist auch per WebDAV auf die Daten zugreifen kann ''(zumindest auf entsprechende Node-Typen)''. Siehe auch den [Wikipedia-Artikel|http://de.wikipedia.org/wiki/Content_Repository_for_Java_Technology_API] sowie die [Jackrabbit Homepage|http://jackrabbit.apache.org] und das dortige Wiki.

JCR ist definiert worden von der Firma [Day|http://www.day.com] (heute Teil von Adobe) und dann im Rahmen des Java Community Prozess in der Version 1 als [JCP-170|http://jcp.org/en/jsr/detail?id=170] und in Version 2 als [JCP-283|http://jcp.org/en/jsr/detail?id=283] standardisiert worden. Die Referenzimplementierung ist [Apache Jakrabbit|http://jackrabbit.apache.org]. Es gibt aber auch einige andere interessante Implementierungen wie z.B. [JBoss ModeShape|http://www.jboss.org/modeshape.html] oder auch viele offene (z.B. [Alfresco]) und proprietäre [Dokumentenmanagement]-Systeme, die eine JCR-Schnittstelle anbieten, um auf Ihre Daten zuzugreifen.

=== Versuch einer Abgrenzung ===

In seiner Gesamtheit erscheint mir eine Implementierung des JCR-Standards von den Zugriffsmöglichkeiten her leistungsfähiger als spezialisiertere Content- oder [Dokumentenmanagement]-Systeme oder NoSQLDatenbanken. Letzlich handelt es sich um eine wohldefinierte Art einer ~NoSQL-Datenbank, die recht gut mit interner Struktur der Daten umgehen kann (ein Fokus, den auch sogenannte XML-Datenbanken haben, die auch oft ähnliche Eigenschaften haben). Der WebDAV-Zugriff zeigt, das die Stärke bei der Verwaltung von Daten liegt, die man gemeinhin als "Dateien" bezeichnen würde. Die zusätzlichen Metadaten erlauben dann weitere Strukturierung und Information. Wenn man Kommentaren in Foren folgt, hat Jackrabbit bestimmte Schwächen, wenn das Repository richtig gross wird. Das liegt zum Teil sicherlich daran, das gewisse Versprechen hinsichtlich der Durchsuchbarkeit auch zwangsläufig zu gewissen Kompromissen bei der internen Struktur der Daten führen. Andererseits habe ich noch keine grundsätzliche Kritik an JCP, sondern eher an der Jackrabbit-Implementierung gelesen. Wer also mehr Daten verwalten will, kann dies auch mit [JBoss ModeShape|http://www.jboss.org/modeshape.html] ''([Unterschiede|http://stackoverflow.com/questions/6392815/what-does-modeshape-offer-that-jackrabbit-doesnt/6399032#6399032])'' oder [Alfresco] probieren oder sich ggf. sogar was proprietäres kaufen.

Interessante Links zum Thema gibt es im [Jackrabbit Wiki: JcrLinks|http://wiki.apache.org/jackrabbit/JcrLinks]. Es gibt ein paar informative ältere Artikel über JCR (bei [onjava.com|http://www.onjava.com/pub/a/onjava/2006/10/04/what-is-java-content-repository.html] und [IBM|http://www.ibm.com/developerworks/java/library/j-jcr/]). Interessant ist bestimmt auch [Apache Sling|https://sling.apache.org/]. Das ist ein Webframework, das komplett auch dem JCR aufbaut. Es erlaubt, Webapplikationen direkt aus dem Content zu erstellen.


== Einstieg ==

Den [Jackrabbit Standalone Server|http://jackrabbit.apache.org/standalone-server.html] hatte ich ohne runterladen in unter 5 Minuten laufen. Dann kann man bereits per Browser und per WebDAV auf das Repository zugreifen. Auf der Jackrabbit-Webseite gibt es die Seite [First Hops|http://jackrabbit.apache.org/first-hops.html], die einen einfachen Einstieg in die API bietet.

== Browser für JCR ==

Schön für erste Spielereien und auch für die Wartung eines Repositories ist eine BEnutzeroberfläche, die es einem erlaubt, sich im Repository umzusehen - und das unabhängig von einer bestimmten Applikation, die vielleicht bestimmte Nodetypen benutzt. Hier gibt es einige Browserprogramme:

* [JCR Controller/Connector|http://sourceforge.net/projects/jcrconnector/] - Swing
* [SPTJCRManager|http://code.google.com/p/sptjcrmanager/] - Java EE (Webapplikation)
* [JCR Web-Explorer|http://www.jcr-explorer.org/faq.html] - Webapplikation
* [Jackrabbitexplorer|http://code.google.com/p/jackrabbitexplorer/] - Webapplikation (GWT)
* [JCR Browser|http://sourceforge.net/projects/jcrbrowser/] - Auf Basis der Eclipse-Plattform
* [JCR Standalone Client|http://sourceforge.net/projects/jcrclient/?source=recommended] - Swing, ''(Version 0.1 und Sourceforge-Status "planning")''
* [http://www.jcrbrowser.org/sling/website/] - Read-only Webapp im Sling-Framework ''(kann nicht viel, könnte aber ein gutes Sling-Beispiel sein)''
* In JBoss ~ModeShape scheint es Pläne zu geben, demnächst einen [Repository Browser|https://github.com/ModeShape/modeshape/pull/919] zu integrieren
* [ältere Übersicht bei Day|http://dev.day.com/microsling/content/blogs/main/jcrtools.html]
* es gibt aber auch andere Möglichkeiten:
** Soweit es sich um File-Nodes handelt, kann man diese im Browser direkt im Jackrabbit ansehen (nur lesend).
** Auch ein Filemanager mit einer WebDAV-URL kann eine Art Browser in das Repository sein.
** [CRaSH|http://www.crashub.org/] - Kommandozeilen-Shell für Java und JCP



[{Tag Datenbank Java}]