ModeShape
ModeShape is a JCR implementation with a slew of additional services and functionality, including a REST/HTTP API, additional query languages (including full-text search), clustering and federation, and automatic disassembly of ingested content into repository nodes.
From the ModeShape website:
ModeShape is a distributed, hierarchical, transactional, and consistent data store with support for queries, full-text search, events, versioning, references, and flexible and dynamic schemas. It is very fast, highly available, extremely scalable, and it is 100% open source and written in Java. Clients use the (JSR-283) standard Java API for content repositories (aka, JCR) or ModeShape's REST API, and can query content through JDBC and SQL.
Features
Notes from Experience
- While we try to maintain some independence from the JCR implementation, some code (in particular concerning low-level binary storage) is tightly bound to Modeshape, but where possible depends on the public API extensions to org.modeshape.jcr.api.
- Long-lived sessions with lots of changes is bad.
- JCR loves hierarchy.
- Creating sessions is cheap. Saving sessions takes time.
- Nothing is persisted until the session is saved (almost.)
- Binary content is stored using the SHA-1 value as its key, meaning:
- only one copy of content is persisted to the storage layer (although the storage layer may keep multiple copies around)
- content can be stored immediately, and lazily garbage collected
Namespace prefixes must be pre-registered before they can be used
Pro/Con Overview
Pro: | Con: |
---|---|
Supports JCR semantics (including optional functionality) | Commits us to JCR semantics or a superset |
Offered by JBoss as a product with several years of history | Not clear how far community extends beyond JBoss |
Due to JCR semantics, could persist content as well as relationships | |
Has many beyond-JCR functionalities that could be useful to F4 | Additional functionalities are unique to ModeShape |
Open source, Apache2 (code hosted on GitHub) | |
Fully streaming persistence | But not asynchronous access to that persistence |
Offers prebuilt HTTP/REST API | Which doesn't take account of the Fedora object model |
Relies largely on JBoss Infinispan for persistence, which is well-supported technology | But would limit F4 to Infinispan-supported persistence options, or implementing ModeShape-specific interfaces |
Installation Package of ModeShape has a size of 179MB | |
JNDI enabled | Sparse documentation about Apache Tomcat deployment |