I used Wikipedia to do my research. And then, I added my own interpretation.
What is a Content Repository and why is it needed?
While Content Management Systems (CMS) stores users' content and allow people to access (read) it, there are few functions/features a CMS should provide for maintenance, query, version management, import, export, etc. Now that there are so many CMS around, people (involved in managing CMS) started asking whether a CMS provides these features. So, it has become more of a compliance issue.
These "Content Repository" features made into separate product (Example: Apache Jackrabbit). Some CMS(s) now delegate this "Content Repository" function to separate components (Example: Hippo CMS and Magnolia).
Java's implementation of Content Repository
"Content Repository API for Java", or JCR is Java's implementation of Content Repository. It has been developed via JSR-170 and JSR-283. The main Java packages are javax.jcr.
JCR has certain features:
- Export and import via XML
- Query by SQL and DOM
- Associate types, attributes and values to each document
Implementation of JCR
- Apache Jackrabbit is reference and open-source implementation of JCR.
- Content Repository Extreme (CRX) is commercial JCR implementation.
- Alfresco has CMS that offers JSR-170 API.
- etc.
CMS using JCR
- Hippo CMS and Magnolia use Apache Jackrabbit, and can switch to other JSR-170 implementation.
- Oracle Beehive supports JSR-170.
- etc.
Reference:
- Content repository: http://en.wikipedia.org/wiki/Content_repository
- Content Repository API for Java: http://en.wikipedia.org/wiki/JSR-170