JCR-Repositorys unterscheiden sich von RDBMS, da ein JCR-Repository:
- ist hierarchisch und ermöglicht es Ihnen, Ihre Inhalte in einer Struktur zu organisieren, die Ihren Anforderungen genau entspricht und in der verwandte Informationen häufig eng beieinander gespeichert und somit einfach zu navigieren sind
- ist flexibel und ermöglicht die Anpassung und Weiterentwicklung des Inhalts mithilfe eines Knotentypsystems, das vollständig "schemenlos" bis vollständig restriktiv sein kann (z. B. wie eine relationale Datenbank).
- verwendet eine Standard-Java-API (z. B. javax.jcr)
- Abstracts, in denen die Informationen tatsächlich gespeichert sind: Viele JCR-Implementierungen können Inhalte in einer Vielzahl relationaler Datenbanken und anderer Speicher speichern, einige können Nicht-JCR-Speicher über die JCR-API verfügbar machen und einige können mehrere Speicher in einem einzigen virtuellen Repository zusammenfassen.
- unterstützt sofort Abfragen und Volltextsuche
- unterstützt Ereignisse, Sperren, Versionsverwaltung und andere Funktionen
Sie können sicherlich alle oder einige dieser Funktionen in Ihrer eigenen Anwendung erstellen, aber das entfernt sich wahrscheinlich weiter von Ihrem Hauptzweck Ihrer App.
Welche Art von Anwendungen kann von diesen Funktionen profitieren? Content-Management-Systeme verwenden seit langem Repositorys, und JCR (und Jackrabbit) sind aus der Notwendigkeit einer gemeinsamen Standard-API für den Zugriff auf verschiedene Content-Repositorys entstanden (siehe JSR-170 und JSR-283 ).
Ein weiteres Beispiel sind Dokumentenverwaltungssysteme, die elektronische Dateien (häufig Bilder von Papierdokumenten) verwalten und Suchen und Abfragen ermöglichen. DMS verwenden seit einiger Zeit Repositorys.
Artefaktverwaltungssysteme können Repositorys verwenden, um digitale Artefakte (häufig Dateien) zusammen mit zusätzlichen Informationen (Metadaten) zu verwalten. JCR funktioniert hier hervorragend, da Sie die Metadaten am selben Speicherort wie die Dateien speichern können: Diejenigen, die diese zusätzlichen Eigenschaften verstehen, können sie sehen, diejenigen, die sich nicht darum kümmern, müssen sie nicht sehen. Ich weiß, dass Artifactory eine Maven-Repository-Implementierung ist, die JCR verwendet. Es gibt auch Repositorys zum Verwalten von Webdienstartefakten, Datendienstartefakten und Testartefakten.
JCR-Repositorys dienen jedoch nicht zum Verwalten von Dateien. JCR verwendet einen einfachen Begriff einer Hierarchie von Knoten, wobei die Knoten benannte Eigenschaften (mit einem oder mehreren Werten) und untergeordnete Elemente enthalten können. Die zulässigen Eigenschaften und untergeordneten Knoten werden vollständig von den Knotentypen bestimmt, die bei Bedarf Knoten für Knoten geändert und gemischt werden können. JCR definiert einige integrierte Knotentypen vor, die häufig benötigt werden, z. B. solche, die zur Darstellung von Dateien und Ordnern im Repository verwendet werden. Sie können diese integrierten Typen wiederverwenden, erweitern oder eigene schreiben. Viele Leute befürworten die Verwendung von Mixins fast als Facetten oder Aspekte. Wenn ein Knoten eine Facette annehmen muss, können Sie dem Knoten einfach ein Mixin hinzufügen.
JCR wurde entwickelt, um das Importieren von XML-Inhalten in das Repository zu unterstützen, wobei jedes Element einem Knoten und jedes Attribut einem Attribut zugeordnet wird. Viele Dinge werden mit XML (oder YAML oder JSON) dargestellt, und all dies kann einfach dargestellt und in einem JCR-Repository gespeichert werden. Stellen Sie sich als Beispiel ein JCR-Repository vor, in dem Konfigurationsinformationen gespeichert sind (die normalerweise in mehreren XML-Dateien gespeichert sind). JCR kann diese Informationen versionieren, den Zugriff von mehreren Prozessen aus ermöglichen, das Abfragen und Suchen aktivieren und die Anwendung (en) benachrichtigen, wenn sich der Inhalt ändert.
Es gibt mehrere gute Übersichten über JCR mit mehr Details und Beispielen. Einige davon sind: