Java Content Repository meets Document Management Systems

Larysa Visengeriyeva und Stefan Zorn

Verschiedene Dokumentenmanagementsysteme (DMS) können von der JSR-170-Implementierung der Java-Content-Repository-(JCR-)Spezifikation profitieren. Damit ist für einige DMS-Anbieter die Welt der Java-Applikationen geöffnet. Im Folgenden wird nicht nur die JCR-API einer traditionellen Persistenz gegenübergestellt, sondern auch erläutert, warum JCR besonders für DMS geeignet ist.

Es muss nicht immer eine relationale Datenbank sein, um Inhalte persistieren zu können. JCR (derzeit ist nur 1.0 bzw. JSR 170 freigegeben) bietet eine viel reichhaltigere Datenhaltung an. In diesem Artikel wird eine Übersicht über die Fähigkeiten dieser Spezifikation gegeben. Zudem geht es darum, die Spezifikation im Zusammenhang mit der Anbindung an ein DMS und die daraus folgenden Vorteile darzustellen. Zu Beginn werden Philosophie und Ziele der JCR erklärt und einige Eigenschaften der JCR vorgestellt, die traditionelle Persistenz mit Datenbanken oder File-Systemen erweitern. Darauf folgend wird auf das Thema DMS und im Speziellen auf die neuen Möglichkeiten eingegangen, die ein DMS mit Implementierung der JCR hat.

JSR 170 (283) – Ziele der Spezifikation

Mit der Veröffentlichung des JSR 170 wurde eine uniformelle API, ein Interface für den Zugriff auf einen Content-Speicherort, bereitgestellt, die für Anwender herstellerunabhängig ist. Das heißt, das Austauschen von Verkäuferlösungen besteht nur im Austauschen von Bibliotheken, jedoch nicht für aufgerufene Repository-Methoden. Derzeit wird an Version 2.0 der Spezifikation (JSR 283) gearbeitet, die viele Veränderungen, wie die Verwaltung von Metainformationen, neue Benutzerrechte, Workspace- und Nodetype-Funktionalität, mit sich bringen soll und somit als Ablöser der JSR 170 gilt.

Abb. 1: Aufbau der Java Content Repository
JCR-Philosophie

Die JCR-API definiert eine einfache hierarchische Struktur: Das Repository besteht aus einem bis mehreren Workspaces. Jedes Workspace hat eine Baumstruktur, die aus Nodes und Items besteht, ein Workspace hat also genau einen Root Node, an die andere Items angehängt werden können. Der Node-Baum kann eine beliebige Tiefe bzw. Breite haben. Ein Item kann sowohl Node als auch Property sein. Der Unterschied zwischen Nodes und Properties besteht darin, dass an ein Node Properties sowie weitere Nodes angefügt werden können, an eine Property jedoch nicht. Property und Node stehen immer in einer OneToOne-Beziehung. Ausschließlich Properties besitzen Inhalte: von kleinen Strings oder Numbers bis großen Dateien (Bilder, PDF-Dokumente etc.). Abhängig vom Zugriffslevel (Level I: Lesender Zugriff und Level II: Schreibender Zugriff) stellt das Repository vier Grundoperationen zur Verfügung: Lesen, Schreiben, Suchen und Löschen. Mit Listing 1 lässt sich diese grundlegende Funktionalität veranschaulichen.

Listing 1
Repository repository = (Repository)InitialContext.lookup("repository"); 
// Get a Credentials object 
Credentials credentials = new SimpleCredentials("name", "***".toCharArray()); 
// Get a Session 
Session session = repository.login(credentials, "my_workspace");
// Get the root node 
Node root = session.getRootNode(); 
// Traverse to the node you want 
Node nodeA = root.getNode("NodeA"); 
// Retrieve a property of NodeA 
Property property = nodeA.getProperty("property1"); 
// Get the value of the property 
Value value = property.getValue(); 
// Convert the value to the desired type 
String stringValue = value.getString();
// Add a child node 
Node nodeB = nodeA.addNode("nodeB"); 
// Add a property 
nodeB.setProperty("property1", "Property String"); 
// Persist the changes 
session.save();
// Remove the node NodeA (and its subtree: NodeB) 
nodeA.remove(); 
// Persist the changes 
session.save(); 

Als fortgeschrittene JSR-170-Features zur Verwaltung von Inhalten zählen Observation Management, Nodetype Management, Versionierung und Transaktionsverwaltung.

Abb. 2: Repository in einer Applikation
Geschrieben von
Larysa Visengeriyeva und Stefan Zorn
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.