Skip to main content

Day 02: AEM Architecture

AEM Developer Series

In the previous post, we discussed the basics of AEM and the reason behind its hype in the Digital Marketing space. In this post, we will go a bit more technical and will try to understand the architecture or the basic building blocks of AEM.

Hence, without wasting more time, let's dive into the AEM architecture.

image source:

Java Runtime Environment (JRE)

AEM is a Java based web application hence it requires server-side Java Runtime Environment (JRE).

Granite Platform

It is Adobe's open web stack and it forms the technical base on which AEM is built. It also provides the foundation UI framework and its major goals are to - 
  • provide granular UI widgets
  • implement best UI practices
  • provide an extensible UI
image source: aemstack

OSGi Framework

image source: OSGi org

It is a set of specifications. Its core specification defines a component and service model for Java. A practical advantage of OSGi is that every software component can define its API via a set of exported Java packages and that every component can specify its required dependencies.

The components and services can be dynamically installed, activated, de-activated, updated and uninstalled.

The OSGi specification has several implementations, for example, Eclipse Equinox, Knopflerfish OSGi or Apache Felix. AEM uses Apache Felix in its tech stack.

For more details see this post.

Java Content Repository (JCR)

This combines the attributes of file systems and RDBMS and tries to provide the best of both worlds. According to JSR 283, "the Java Content Repository API defines an abstract model and a Java API for data storage and related services commonly used by content-oriented applications." 

The JCR storage model is a tree of nodes and properties: nodes are used to organize the content and named properties store the actual data, either as simple types (string, boolean, number, etc.) or as binary streams for storing files of arbitrary size.

AEM 6.x uses Apache Oak as the JCR implementation.

Apache Sling

AEM is built using Sling, a Web application framework based on REST principles that provide easy development of content-oriented applications. 
Sling uses a JCR repository, such as Apache Jackrabbit, or in the case of AEM, the CRX Content Repository, as its data store.

From Apache Sling's official documentation, Sling maps HTTP request URLs to content resources based on the request's path, extension and selectors. Using convention over configuration, requests are processed by scripts and servlets, dynamically selected based on the current resource. This fosters meaningful URLs and resource-driven request processing, while the modular nature of Sling allows for specialized server instances that include only what is needed.

Thus, anything present in the JCR can be accessed in a RESTful way using HTTP requests.

AEM Modules

On top of the above technology stack, there are AEM specific modules that run. These modules are AEM Sites, AEM Assets, Workflows etc. 

Custom Modules/Code

On top of everything, the organization-specific code runs which is according to their specific needs. In the upcoming posts, we will be learning to do this only - creating custom code on top of AEM.


In this post, we tried to look into the basic building blocks of AEM. From the next post onwards, we will get our hands dirty by learning and writing custom code on AEM. Stay tuned!! 🌝

I would love to hear your thoughts on this post and would like to have suggestions from you to make this post better. 

Feel free to befriend me on Facebook, Twitter or Linked In or say Hi by email.

Happy Learning 😊


Post a Comment

Popular posts from this blog

Day 00: AEM Developer Series

Hello everyone! Welcome to this AEM development series. We can all see the revolution of Digital Marketing today. Companies are dying to be a part of it and they have made this a war for the Digital Marketing tools.
Adobe is way ahead in this war and has gained a lot of market capture. They are leaders in the Digital Marketing platforms since 2014-15. One of the flagship product in Adobe's Digital Marketing suite is Adobe Experience Manager (AEM).
Since AEM is in huge demand, the people who know how to develop on AEM are also in huge demand. But developing on AEM is not easy as it is made up of various open-source technologies such as Apache Felix (OSGi), Apache Sling, Apache Oak and Adobe's own technologies like Granite, HTL etc. Learning all these technologies in conjunction can sometimes become confusing and frustrating 😫.
When I first started learning AEM in 2016, I was dumbfounded to see there is so much going on under the hood. I then spent months to gather all the res…

Day 05: Working with Sling Servlets in AEM

Day 03: Setting up AEM Development Environment