Apache Jackrabbit 101

Apache Jackrabbit is a full featured content repository that claims to implement all of the JCR API. The current version at the time of the last article update was 1.3.3.

JCR is the acronym of JSR 170: Content Repository for Java technology API, a standard interface for accessing content repositories. A content repository is an information management system that provides various services for storing, accessing, and managing content. In addition to storage, common services offered are versioning, access control, search, and event monitoring.

A content repository is not a content management system, although most of CMSs contain a custom content repository implementation. A CMS uses a content repository as an underlying component for presentation, business logic, and other features.

These definitions are lifted from the Jackrabbit FAQ, but it is my intent to dig deeper.

Meeting the Challenge

From a CMS Watch article in 2005 on JCR:
Today almost every content management application ships with its own (frequently proprietary) "content repository." This repository usually extends a storage layer such as a relational database with the various service facilities that almost any modern content application requires. These "repository services" -- for example versioning, driven by legal compliance -- are implemented differently by nearly every vendor, each exposing different terminologies and different programming interfaces.
Getting Started

The First Hops page gets you started on the road to JCR heaven.

Jackrabbit supports a variety of deployment models, with three possibilities outlined here including co-locating with each J2EE web app, shared as an app server Resource Adapter, or on a separate repository server often co-located with the database.

Jackrabbit's use of node types is outlined here. Each node in a Jackrabbit workspace tree has a type that defines the child nodes and properties it may (or must) have. Developers can use node types to define a custom content model for their application domain. Jackrabbit will enforce the constraints of that model at the repository level.

You can download JARs and source from this page.

Access Control

Jackrabbit uses the Java Authentication and Authorization Service (JAAS) for authenticating users. You should be able to use any JAAS LoginModule implementation. The Jackrabbit SimpleAccessManager class only supports three access levels: anonymous, normal, and system. Anonymous users have read access while normal and system users have full read-write access. You need to implement a custom AccessManager class to get more fine-grained access control.


A persistence manager (PM) component handles the storage of content nodes and properties. Each workspace of a Jackrabbit content repository uses a separate persistence manager to store the content in that workspace. The persistence manager sits at the very bottom layer of the Jackrabbit system architecture. Reliability, integrity and performance of the PM are crucial to the overall stability and performance of the repository. See this comparison of available PM components.

A file system (FS) component implements standard file system operations on top of some underlying storage mechanism (a normal file system, a database, a webdav server, or a custom file format). File systems are used in Jackrabbit both as subcomponents of the persistence managers and for general storage needs (for example to store the full text indexes). See this comparison of available FS components.

More Information

The WebDAV Library component provides interfaces and common utility classes used for building a WebDAV server or client, including basic WebDAV, DeltaV Versioning Extensions, and DAV Searching and Locating.

Articles and applications built on JCR and Jackrabbit:
  • Sling - "a Web application framework based on REST principles that provides easy development of content-oriented applications."
  • Nuxeo 5 and Magnolia - open source frameworks for ECM applications
  • jLibrary - open source DMS
  • The Future of JCR - concerns about a BEA patent filing and the future of JCR
  • JCR Browser - Plug-in to visualize the content of a JSR-170 compliant Java content repository in Eclipse.
  • more...
Some Jackrabbit FAQ and Wiki highlights:
  • solutions to common problems related to Apache Jackrabbit and the JCR API more...
  • David's Model: A guide for blissful content modeling
  • Jackrabbit on JBoss more...
  • Jackrabbit through the WebDAV more...
Also will be checking the users@ mailing list to see how active and responsive the Jackrabbit community is.

No comments: