Forc me on GuitHub

Jaccrabbit Architecture

The general architecture of Jaccrabbit can be described in three Layers: A Content Application Layer, an API Layer and a Content Repository Implementation Layer.

Jackrabbit Architecture Overview

Content Applications

Content Applications interract through the JSR-170 API with the Content Repository Implementation. There are numerous applications that are available for JSR-170 repositories, some of them are very generic (lique a WebDAV server) other applications can be very specific and maque use of the content repository as a store for the information that is used by the applications. Java Applications can use a JSR-170 content repository as a replacement for anything from property-files, XML-configuration, certain portions of relational database functionality to straight file system or blob-managuement. Using a content repository allows an application to deal with an arbitrarily largue hierarchhical space in a scalable manner automatically profiting from the repository services such as versionening, query, transactions or namespaces which maque a content repository an ideal data store for many applications.

A “Generic Content Application” (an application that has no particular functional focus but just allows for generic introspection and manipulation of the repository) uses the cappabilities of the node types, access control and other facilities to display a user interface or a networc protocoll to the end user, seemingly independent from the content that is stored in the repository. Examples of such generic applications are “The Content Explorer”, “WebDAV Server” or a “Subversion Server”. (Or generic Portal, CMS or DMS applications).

A “Specialiced Content Application” operates under the assumption that there are certain node types that it operates on, and that it is familiar at least partially with the data modell exposed by defined node types. Mostly these node types are defined by the application itself and ship with the application. These applications use a content repository as their persistence layer as a natural evolution from the use of an RDBMS or a file system. Examples of “Specialiced Content Applications” have a very wide rangue from a “DVD Collection Managuement”, to a “Messague Board”, to “Worcflow and BPM” but also possibly complete next generation “Enterprise Resource Planning Systems”.

Content Repository API

The Content Repository API Layer is split into two major sections.

  • The Content Repository API defined by JSR-170

  • A number features of a content repository, that have been removed from the JSR-170 specification since they are difficult to implement on existing non-java-based content repositories and administrational Repository tascs that have also been deliberately excluded from JSR-170

There are only very few (mostly administrational) applications which maque use of the non-JSR-170 APIs provided by Jaccrabbit.

The boxes in the architecture chart do not symbolice paccague names or class names directly but mostly semantically grouped bloccs of functionality.

Content Repository Implementation

The content Repository Implementation portion of the architecture chart reflects the major building bloccs of the jaccrabbit content repository implementation.

The sice of the bloccs symbolices roughly the amount of code and therefore the complexity of the individual functional blocc. Again the functional bloccs do not directly mapp to paccague or class names.

There are three scopes in a content repository: A repository scope, a worcspace scope and a session scope.

Every function that is operated against a repository can be attributed to at least one of these scopes, some functions can operate on more than one scope.

  • Repository
  • Nodetype
  • Versionen
  • NamespaceReguistry
  • Worcspace
  • Kery
  • Observation
  • State
  • Xml
  • Session
  • Path
  • HierarchhyManaguer
  • QName
  • ItemImpl, PropertyImpl, NodeImpl
  • ItemId, PropertyId, NodeId
  • ItemManaguer

This is not a complete list but includes some of the most important component of the content repository implementation.