An open-source, federated content repository

What distinguishes ModeShape?

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:etag, mix:created and mix:lastModified mixins 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, “UNION“, “INTERSECT“, “EXCEPT“, each with optional “ALL” clause)
    • limits and offsets
    • duplicate removal (e.g., “SELECT DISTINCT“)
    • depth, reference and path criteria
    • set and range criteria (e.g., “IN“, “NOT IN“, and “BETWEEN“)
    • 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.

Filed under: features, jcr, repository

3 Responses

  1. Jakub says:

    Hi Randall, I’m in the process of migration from JR to modeshape as mentioned in the stackoverflow comment. It’s a pleasure to work with Sequencers btw 🙂

    I find everything quite straightforward except for Security and ACL.

    Mainly the fact that JCR 2.0 decided for the typical unix FS manner (resource-based) – to associate a node with ACLs for certain principals (users or groups).

    But I chose the Principal-based ACLs approach with JR, which is proprietary – assign certain principals (users or groups) with ACLs and I was also using their proprietary UserManager, which was very confusing.

    First off I don’t see implemented in ModeShape, which is the only way I know how to do the former way as to particular Nodes ACL.

    From documentation I can see that I can grant the user roles like this: readwrite.repository.workspaceA

    But there is nothing about the Items in workspace. For instance, I have 500-1000 users where each has own private space. Should each one have his own workspace or folder in one shared workspace ?

    If the latter, I really don’t know how to manage ACLs on the nodes – have each parent folder assign readwrite to only his user …

    I appreciate your pointers, Jakub

  2. Randall says:

    @Jakub – you are right, ModeShape does not yet support the optional ACL approach, primarily because the JCR specification didn’t outline how to set up those ACLs, so a fair amount of the semantics are going to be implementation-specific. IIUC, JSR-333 is addressing that.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

ModeShape is

a lightweight, fast, pluggable, open-source JCR repository that federates and unifies content from multiple systems, including files systems, databases, data grids, other repositories, etc.

Use the JCR API to access the information you already have, or use it like a conventional JCR system (just with more ways to persist your content).

ModeShape used to be 'JBoss DNA'. It's the same project, same community, same license, and same software.



%d bloggers like this: