One question we often get about ModeShape is what makes ModeShape different than other JCR implementations, including the reference implementation. We’ve answered it in a previous blog post, but it’s important enough to give a more recent and succinct answer.
Here’s a really brief, very high-level summary of what ModeShape is and where our emphases lie:
ModeShape is a lightweight, embeddable, extensible open source JCR repository implementation that federates and unifies content from multiple systems, including files systems, databases, data grids, other repositories, etc. You can use the JCR API to access the information you already have, or use it like a conventional JCR system. It’s useful for portals, for knowledge bases, for storing/versioning artifacts, for managing configuration, for managing metadata, and more. ModeShape is easy to configure, easy to cluster, and easy to extend.
Of course, we can look at some of the ModeShape features to get an even better understanding of what it does and why it rocks:
- Supports all the JCR 2.0 required features: repository acquisition; authentication; reading/navigating; query; export; node type discovery; permissions and capability checking
- Supports most of the JCR 2.0 optional features: writing; import; observation; workspace management; versioning; locking; node type management; same-name siblings; orderable child nodes; shareable nodes; and
mix:lastModifiedmixins with autocreated properties.
- Supports the JCR 1.0 and JCR 2.0 languages (e.g., XPath, JCR-SQL, JCR-SQL2, and JCR-QOM) plus a full-text search language based upon the JCR-SQL2 full-text search expression grammar. Additionally, ModeShape supports some very useful extensions to JCR-SQL2:
- subqueries in criteria
- set operations (e.g, “
EXCEPT“, each with optional “
- limits and offsets
- duplicate removal (e.g., “
- depth, reference and path criteria
- set and range criteria (e.g., “
NOT IN“, and “
- arithmetic criteria (e.g., “
SCORE(t1) + SCORE(t2)“)
- full outer join and cross joins
- and more
- Choose from multiple storage options, including RDBMSes (via Hibernate), data grids (e.g., Infinispan), file systems, or write your own storage connectors as needed.
- Use the JCR API to access information in existing services, file systems, and repositories. ModeShape connectors project the external information into a JCR repository, potentially federating the information from multiple systems into a single workspace. Write custom connectors to access other systems, too.
- Upload files and have ModeShape automatically parse and derive structured information representative of what’s in those files and then store this derived information in the repository so you can query and access it just like any other content. ModeShape supports a number of file types out-of-the-box , including: CND, XML, XSD, WSDL, DDL, CSV, ZIP/JAR/EAR/WAR, Java source, Java classfiles, Microsoft Office, image metadata, and Teiid models and VDBs. Writing sequencers for other file types is also very easy.
- Automated and extensible MIME type detection, with out-of-the-box detection using file extensions and content-based detection using Aperture.
- Extensible text extraction framework, with out-of-the-box support for Microsoft Office, PDF, HTML, plain text, and XML files using Tika.
- Simple clustering using JGroups.
- Embed ModeShape into your own application, or deploy on JBoss Application Server, or use in any other application server.
- RESTful API (requires deployment into an application server).
- WebDAV support
These are just some of the highlights. For details on these and other ModeShape features, please see the ModeShape documentation.