Wann sollte JCR (Content Repository) gegenüber anderen Optionen verwendet werden?

77

Ich versuche, Content-Repositorys ( JSR283 ) wie Jackrabbit und ModeShape zu evaluieren, aber ich muss gestehen, dass ich nicht verstehe, welches Problem zuerst behoben wird und selbst wenn es eine gute Wahl für das Projekt ist. Welche Fälle sind Ihrer Meinung nach die beste Lösung? Ist nicht dasselbe wie relationale Datenbanken, abgesehen von der Größe? Warum? Zusätzliche Punkte für das Zeigen von Beispielen aus der realen Welt.

Danke im Voraus.

Ither
quelle
9
Ich bezweifle, dass ich der einzige bin, der gerne weiß, was Zeug ist und was es tut und wann / warum ich es verwenden möchte, nur für den Fall, dass ich auf ein Problem stoße, das gut dazu passt.
CHao
1
Es wäre nützlich, wenn jemand erklären würde, wie sich ein Inhaltsrepository von einem Verzeichnisdienst (LDAP) unterscheidet. Was ist mit dem Unterschied zu einer NoSQL-Datenbank?
Ryan

Antworten:

88

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:

Randall Hauch
quelle
Einführung der Java Content Repository API durch Titus Barik <- der Link ist unterbrochen.
Adam Arold