Adobe Experience Manager or Adobe Experience Manager or AEM (formerly CQ5) is one of the best Enterprise-grade Web Content Management System. From a high level, it can be said to be so good because it combines building websites, mobile apps and forms along with online communities and it provides native feature of Digital marketing as being a part of Adobe marketing cloud (a set of solutions that integrate seamlessly, allowing users to deliver personalized, cross-channel and real-time marketing campaigns).
AEM is implemented as a Java web application, comes pre-configured with its own built-in servlet engine but can also be installed in any compatible third party application server, and translates any server which supports Java servlet API 3.1 or higher. It provides out of box functionality such as – component library, and set of application services, however majority of project requires custom development which will resolve into custom project code which extends out-of-the-box functionality and adopts it to the projects need.
The Architecture of AEM consists of three major layers :
- Apache Sling Framework
Sling by Apache (an open source project) is a RESTful application framework, which provides access to JCR repository via a restful API. It is used extensively for all the AEM authoring as all actions (dialogs) are made via REST calls to JCR via sling. Sling lives within OSGi as one of its bundles.
- OSGi Application Runtime
OSGi (Open Services Gateway Initiative) is a Java based framework for developing modern modular application stack, a dynamic library management implementation of Apache Felix in AEM. It is a set of specification which describes a modular system and a service platform for the Java programming language that implements a complete and dynamic component model (that doesn’t exist in standalone JVM environment). An application in an OSGi-based system is composed of an assemblage of components, called bundles, that can be dynamically installed, started, stopped or uninstalled even at runtime, without shutting down and restarting the entire application.
- Java Content Repository (JCR)
Java Content Repository (JCR) is a object database which supports both structure & unstructured database. It is a Java API and made up of node and properties to access content repository in a uniform manner. Adobe implementation of JCR is – CRX (Content Repository Extreme).
All these are running in Servlet Container or Java EE Application Server.