AEM Technology Stack
AEM uses the Granite platform as a base and the Granite platform includes, among other things, the Java™ Content Repository.
Granite
Granite is Adobe’s Open Web stack, providing various components including:
- An application launcher
- An OSGi framework into which everything is deployed
- Several OSGi compendium services to support building applications
- A comprehensive Logging Framework providing various logging APIs
- The CRX Repository implementation of the JCR API Specification
- The Apache Sling Web Framework
- Additional parts of the current CRX product
Granite UI
The Granite engineering platform also provides a foundation UI framework. The major goals of this are to:
- Provide granular UI widgets
- Implement the UI concepts and illustrate best practices (long lists rendering, lists filtering, object CRUD, CUD wizards…)
- Provide an extensible and plug-in based administration UI
These adhere to the requirements:
- Respect “mobile first”
- Be extensible
- Be easy to override
GraniteUI.pdf
Get File
The Granite UI:
- Uses the RESTful architecture of Sling
- Implements component libraries intended for building content-centric web applications
- Provides granular UI widgets
- Provides a default, standardized UI
- Is extensible
- Is designed for both mobile and desktop devices (respects mobile first)
- Can be used in any Granite-based platform/product/project; for example, AEM
- Granite UI Foundation Components
This library of foundation components can be used or extended by other libraries. - Granite UI Administration Components
Client Side vs Server Side
The client-server communication in the Granite UI consists of hypertext, not objects, so there is no need for the client to understand the business logic
- The server enriches the HTML with semantic data
- The client enriches the hypertext with hypermedia (interaction)
Client-Side
This uses an extension of HTML vocabulary, provided so that the author can express their intention to build an interactive webapp. This is a similar approach to WAI-ARIA and microformats.
It primarily consists of a collection of interaction patterns (for example, asynchronously submitting a form) that are interpreted by JS and CSS codes, run on the client-side. The role of the client-side is to enhance the markup (given as the hypermedia affordance by the server) for interactivity.
The client-side is independent of any server technology. As long as the server gives the appropriate markup, the client-side can fulfill its role.
Currently the JS and CSS codes are delivered as Granite clientlibs under the category:
granite.ui.foundation and granite.ui.foundation.admin
These are delivered as part of the content package:
granite.ui.content
Server-Side
This is formed by a collection of sling components that enable the author to compose a webapp fast. The developer develops components, the author assembles the components to be a webapp. The role of the server-side is to give the hypermedia affordance (markup) to the client.
Currently, the components are in the Granite repository at:
/libs/granite/ui/components/foundation
This is delivered as part of the content package:
granite.ui.content