Friday 27 July 2018

Understanding Indexing in AEM

Older version of AEM/ CQ, Jackrabbit index the content by default. But Oak doesn't index content by default. We need to do it like how we do indexing for a DataBase.

Why do we need to index?
When a JCR query gets executed, usually it searches the index first. If there is no index, the query executes for the entire content. This is time consuming and an overhead for the AEM. But keep in mind, if the frequency of queries executed are less, we can ignore the indexing.

Let us understand the Oak and AEM indexing in detail here.

In fact, there are three main types of indexes available in Oak
  • Property
  • Lucene
  • Solr
And below are the supported query languages from Oak
  • XPath (recommended)
  • SQL-2
  • SQL (deprecated)
  • JQOM
AEM allows writing queries in one of three ways:
  • QueryBuilder APIs (recommended)
  • Using XPath (recommended)
  • Using SQL2
Note: all queries are converted to SQL2 before being run,

Indexing modes
Different versions of the node data is compared to find indexes. The indexing mode defines how comparison is performed, and when the index content gets updated. Below given the indexing mode and details.

Sync Vs  Async Vs Nrt
  • Async - When we index in async mode, results returned by index may not always reflect the exact up to date state of the repository.
  • Sync - Sync Index ensures that index is updated as part of each commit.
  • NRT - This method indicates that index is a near real time index.
The flow of index is given in below image.
*Click on image to view it big and more clear.

[Indexing in AEM 6.4]

Below given various indexes in detail.

Property Index - Not a full-text indexing method. Index definition is stored in the repository itself.

type: property;
propertyNames: jcr:uuid (of type Name)

Ordered Index - [deprecated] - This is an extension of the Property index. It keeps the order of the indexed property persistent in the repository.

type: ordered;
propertyNames: jcr:lastModified

Lucene Full Text Index - This is a full text index method, which is asynchronous too.

type: lucene ;
async: async

Lucene Property Index - This is not a full-text indexing.

 type: lucene ;
 async: async ;
 fulltextEnabled: false;
 includePropertyNames: ["alias"]

The Solr Index - This is a full-text search but it can also be used to index search by path, property restrictions and primary type restrictions, which means the Solr index in Oak can be used for any type of JCR query.


Traversal Index - When no indexing is done; All content nodes are traversed to find matches to the query, slower and overhead to AEM.

A tabular version is given below

[AEM Oak Indexing]

Video description of the blog given below.

 Read about AEM 6.4 Oak Queries and Indexing

Best Practices for Queries and Indexing

Monday 23 July 2018

Single Page Applications and AEM

What is Single Page Applications - SPA?

Single Page applications are pages which dynamically update its content using AJAX calls to create a fluid & responsive experience.

In traditional applications, each request reloads/renders the HTML; but in SPA all interactions happens through AJAX calls. The return data is in JSON format. Previous versions of AEM had a miss on the SPA but with upcoming releases AEM SPA Editor provides a wonderful solution for supporting SPAs within AEM.

Single Page Applications - Features

  • This avoids page reloading.
  • Reusable Content.
  • Majority of the work happens in client side.
  • Good separation between content and UI
  • Provides interactive experience

SPA(Single Page Applications) Basics

Below image gives an overview on the Single Page Applications in general.
As mentioned, only the first request is responded with a complete HTML. Further requests are made in AJAX way to the server and response in provided in JSON format.

SPA with AEM.
Latest AEM releases are enabling users to develop Single Page Applications using AEM. AEM SPA Editor allows user to author a page with Content Fragments in addition to other normal components like title, footer, images etc and AEM Sling models generate the Page equivalent JSON. This RESTFul JSON can be made available for other SPA frameworks like Angular React etc.

 In upcoming posts, I will explain, how to create SPA in AEM.

Video version of the post is available below.


AEM 6.4 related posts:
Create Content Fragments : Step By Step Tutorial
Content Fragment out put as JSON

Friday 22 June 2018

Quality, Security, Performance Checks in Adobe Cloud Manager

Brief Overview:
As we all know, Adobe Cloud Manager(ACM) is part of the Adobe Managed Cloud Services. Using Adobe Cloud Manager(ACM) organizations can manage their AEM application in cloud themselves.
Read more: Why you should think of using Adobe Cloud Manager for AEM Projects?

There are 3 types of Quality checks provided by ACM CI/CD process.
  • Code Quality
  • Performance Testing
  • Security Testing

Below given Security & Performance Testing criteria's
1. Security checks


Critical security is based on 13 AEM Security health checks.
  • AuthorizableNodeName Implementation does not expose authorizable ID in the node name.path
  • Dispatcher filtering request validation
  • The Adobe Granite HTML library manager is configured appropriately
  • Default password must be changed
  • Deserialization firewall Attach API readiness is in an acceptable state
  • Deserialization firewall is Functional
  • Deserialization firewall is Loaded
  • Sling default GET servlet is protected from DOS attacks
  • The Sling Java Script Handler is configured appropriately
  • The Sling JSP Script Handler is configured appropriately
  • The Sling referrer filter is configured in order to prevent CSRF Attacks
  • Correct SSL configuration
  • No Obviously insecure user profile polices found
Important - 6 check points
  • CRXDE Support bundle is disabled
  • Sling DavEx bundle and servlet are disabled
  • Sample content is not installed
  • Both the WCM Request Filter and the WCM Debug Filter are disabled
  • The web server is configured to prevent clickjacking
  • Sling WebDAV bundle and servlet are configured appropriately
  • Replication is not using the admin user
2. Performance Tests are based on

  • Error rate is less than 2%
  • Total CPU utilization is less than 80%
  • Disk I/O wait time s less than 50%
  • 95 % response time er page is not longer than 3s
  • Peak response time is not longer than 18s
  • Page views per minute is greater than or equal to 200
  • Disk bandwidth utilization is less than 90%
  • Network bandwidth utilization is less than 90%
  • Overall requests per minute is less than 6000
3. Code Quality checks
The ACM build does code inspection based on SonarQuebe, which includes around 110 rules like standard Sonar Java rules,FindBugs rules, Cognifide AEM Rules, Adobe-created Rules.

Read More:
Why you should think of using Adobe Cloud Manager for AEM Projects? 

Why you should think of using Adobe Cloud Manager for AEM Projects?

Brief Overview:
As we all know, Adobe Cloud Manager(ACM) is part of the Adobe Managed Cloud Services. Using Adobe Cloud Manager(ACM) organizations can manage their AEM application in cloud themselves.

-It includes a continuous integration and continuous delivery.
-Code Inspection, performance testing and security validation.
-Automatic, scheduled or manual deployment.

ACM documentation can be found here.

Can we move existing projects in to ACM?
Yes. We can move any existing AEM projects into ACM with recommended option of upgrading AEM version to the latest.

How safe if Adobe cloud service?
Below given the security measures in Adobe Cloud Manager in detail.

Code push to Cloud Manager is encrypted in transit. Cloud Manager build binaries are also encrypted in transit and when stored.
Each customer gets their own Git Repository and code is secure and not shared with any other Organizations.
All the code push happens securely into the Git Repository over HTTPS protocol.
Any service with third party cloud providers are always secured.
ACM(Adobe Cloud Manager) provides Role Based Permissions, which ensure the user action on application is defined within limits, which means developer will not be able to delete the application from cloud, only the authorized product owner or person will have critical permissions.

Quality checks
There are 3 types of check provided by ACM CI/CD process.
  • Code Quality
  • Performance Testing
  • Security Testing
All critical issues reported by system must be fixed.

Technical details of ACM build environment
  • ACM uses below build environment for managing CI/CD process
  • Linux based container
  • Oracle Java version 8
  • Maven version 3.3.9
  • Adobe maven repository( included default

Additional system packages include,
Imagemagick, Graphicsmagick, bzip2, unzip etc.

Types of build pipe line configuration

3 Ways we can configure the CI/CD pipeline process on stage.
  1. Manual
  2. On Git Changes
  3. Recurring schedule
For the production deployment, system provides options as below
  1. GoLive approval,
  2. CSE oversight
  3. Scheduled
Code quality in ACM pipeline

The ACM build does code inspection based on SonarQuebe, which includes around 110 rules like standard Sonar Java rules,FindBugs rules, Cognifide AEM Rules, Adobe-created Rules

Read More: 
Quality, Security, Performance Checks in Adobe Cloud Manager

Friday 15 June 2018

AEM 6.4 Experience Fragment Basics

Experience Fragment Basics in AEM 6.4

AEM 6.4 provides headless(Content as a  service) CMS capabilities through  Content Fragments and Experience Fragments.

What is an experience fragment?

The headless capability to create experiences can be used to deliver content to third party system/touchpoint through various methods. AEM provides experience  fragments which has content and layout, and third party applications then deliver to the end user. Experience Fragments helps reuse of content.

An 'Experience Fragment' is a collection of components with its own content and layout.
  • Each Experience Fragment is based on a template which gives a structure.
  • Each experience fragment has one/many components with its own layout.
  • Each experience itself makes sense.
  • Created with intention of reuse, re ordered, resized.
  • Experience Fragments works on Caas model, with each fragment can be created with multiple variations.

Scenarios when an AEM Experience Fragment to be used?

There are times when we need to replicate same type of page section in other pages. 'Experience Fragments' can help us saving time in this case. Also cases like AEM is used as headless CMS, where AEM to be just used as content storage, not for delivery. In this case AEM Experience Fragment will be available for a third party rendering system for consuming.

Cases when we need multiple version of content, Experience Fragments are a good option.

Additional notes:

Experience Fragments allow to manage sections of experiences that can easily be reused and distributed. They are template based and allow live copy relationship. At present AEM 6.3 supports Experience fragments to html5 web templates, Pinterest and Facebook templates. Custom templates can be created if required.

Monday 4 June 2018

Create Content Service End point in AEM 6.4

Content Services & its use

Content Services enable the creation of Page-based HTTP end-points. This end points helps to render the content to a normalized JSON format.

How to configure & access the content services in AEM 6.4?
We need to configure content service end points when ever we need to export a Content Fragment data to external applications(Like Single Page Application or mobile app etc). Let us see how it can be done. The end point pages are not to be accessed as HTML pages, they just export the content in JSON Format.

We have created multi variation Content Fragments following our previous blog Create Content Fragments : Step By Step Tutorial.

Say we have master, mobile , tab variations as shown below.
[Click om images to see it big]

[Mobile & Tab Content Fragment]

Go to Sites> We-retail, click on 'Create' > 'Page'
Enter details as below and click on create. A new page will be created. (/content/we-retail/content-service-for-sample-fragment.html)

Open the page and author the content fragment in this page(Steps are explained in my previous post).

As you see, I have authored master, variation1(Mobile), Variation 2 (Tab) in the same page.

Now go to the page url and append '.model.json' to invoke JSON exporter. (In my case: content-service-for-sample-fragment.model.json). You can see the JSON with all variations included.

[JSON portion of Content Fragment for Mobile]

[JSON format for tablet]

From this JSON, we can iterate over the content fragments section and by checking for the variation, we can render items across various channels.

Remember I have authored the Content Fragment utilizing an existing we-retail template. So the JSON will have all related items like header , footer etc. In real projects, create a stand alone template and then create a page from this.

Related posts:
Create Content Fragments : Step By Step Tutorial
Content Fragment out put as JSON 


Saturday 2 June 2018

Maintenance Releases Deployment Best Practices in AEM

Adobe releases maintenance fixes in duration of some months based on the issues raised by licensed vendors or internal clients etc. Previously it was known as hot fixes, but now it has changed to 'Cumulative Fix pack' & related 'Service Packs'.

Precautions & Best practices: Ensure you always follow below step;

  1. Test in Lower environments first and then move to prod for any maintenance pack deployments.
  2. Ensure you have done a proper back-up of content, DAM and code.
  3. Validate the new package before install

Curl Commands Vs Package Manager?
CURL is a command line version of package manager. Package manager provides the UI to deploy packages.

We recommend using CURL commands if the package size is big(They execute faster through CURL)

Analyzing the Activity Log on package installation:

We can see a BOLD highlighted letters while installing a package through package manager. Below are the notations.

A : Added new content/code to specified path.
D : Deleted content/code.
U : Updated
- : No action taken (remains as it is )
E : Error on path.

Sometimes admin face issues with new packages like unsatisfied package imports or Overlay issues.

How to validate a new package for issues before install?

On package right side, click on More> Validate and select the check boxes and click on 'validate'. The validation and and any issues which exits can be verified through 'Activity Log'. Contact Adobe if any issues are observed.

Once above precautions are followed(Including a lower environment successful deployment), deploy the maintenance pack in prod, then restart  AEM. Clear any cache, test and validate the package version then verify the project related checkpoints at PROD. This steps helps an admin to install a cumulative pack smoothly.

Read Latest AEM 6.4 Topics
Create Content Fragments : Step By Step Tutorial 
Content Fragment Output as JSON in AEM 6.4