Lately, I have spent some time trying to better understand the AEM technology stack. There are so many pieces, it seems easy to get confused. I have been looking over the JCR implementations on AEM. I keep reading that it uses CRX. However, I know that it uses Apache Jackrabbit as well. Is it using both? What is the logic behind using both implementations? When and where is each used?
A better question might be what is the relationship between CRX and Jackrabbit?
JCR (JSR-170) is the a standard Java API for content repositories. It provides an interface for Java applications to interact with content repositories, however it does not provide a repository implementation.
Apache Jackrabbit is an open source content repository implementation that fully implements the JCR API.
Adobe CRX is the commercial content repository component used in the AEM, which uses some elements of Jackrabbit (e.g. some of the security APIs). CRX provides additional features such as development tools & clustering capabilities and has its own storage mechanism which differs from the Jackrabbit implementation.