This article details building an example Java web application using Helidon MP libraries and deploying it on Google App Engine.

Part 1 : Build a new Helidon MP Project


  1. Java SDK — Used OpenJDK 11 for this example
  2. Apache Maven — Used 3.6.3 for this example
  3. Google Cloud SDK
  4. Account on Google Cloud Platform

Step 1 — Build a new Helidon MP Project

mvn archetype:generate -DinteractiveMode=false \
-DarchetypeGroupId=io.helidon.archetypes \
-DarchetypeArtifactId=helidon-quickstart-mp \
-DarchetypeVersion=2.0.0-M3 \
-DgroupId=io.helidon.examples \
-DartifactId=helidon-mp-gae-greet \

Anatomy of Folder Structure (listing only important files/folder):

|_pom.xml [primary maven build file]
| |_java/io/helidon/examples/quickstart/mp
| |
| | [JAX-RS resource with api paths]
| | [list…

by Suren Konathala

Oracle changed Java licensing model for version after Java SE 8. This article details the available licenses and pricing model for enterprises to use Java.

This article is based on pricing models and available data as of April 29, 2020.

Oracle Java SE 8 remain free. Java SE 11 is available for free under Open Source license. And current version Java SE 14 is available for free for personal, development use.

For Production use, organizations need to pay. Oracle calls it Java SE Subscription.

License Types

We can build projects for AEM with a SPA(Single Page Application) as frontend (can use either Angular or React).

There is a specific folder structure that AEM requires projects to be built. Using an Archetype to build the codebase is the best and recommended option. Adobe has AEM SPA Project Archetype for this.

This may old (Stopped since Nov 2019), the new Archetype 23 (as of this writing) have some critical project build issues (Issues: 371, 366)

1. Run AEM SPA Project Archetype

mvn archetype:generate \
-DarchetypeCatalog=remote \ \
-DarchetypeArtifactId=aem-spa-project-archetype \

2. Options

Define value for property 'groupId' (should match expression '^[a-zA-Z0-9\.\-_]+$'): com.project.aem Define value for…

The recommended way (or best approach) to start a new project for AEM (Adobe Experience Manager) is to use an Archetype.

Adobe has a separate project AEM Project Archetype on Github for this.

Here’s the process to create a new project codebase:

  1. Create a new folder
$ mkdir projects
$ cd projects

2. Run this command

$ mvn -B archetype:generate \
-D archetypeGroupId=com.adobe.granite.archetypes \
-D archetypeArtifactId=aem-project-archetype \
-D archetypeVersion=23 \
-D aemVersion=6.5.0 \
-D appTitle="My Site" \
-D appId="mysite" \
-D groupId="com.mysite" \
-D frontendModule=general \
-D includeExamples=n

That’s it. A new project codebase is built with necessary folder and…


Because the default query does not search for value in a case-insensitive way. Which means if a value (say) 009A is saved in AEM, and search for 009a will not return the value. Sounds strange.. and this sounds so trivial for any developer. And this article is about this.


There are several ways we can achieve searching for content in AEM programmatically. One of the approach is to use Query Builder API.

There is a tool (somewhat hidden) in AEM to try search queries at http://localhost:4502/libs/cq/search/content/querydebug.html and looks like:

Query Builder Debugger on AEM

There are several options to develop queries

Default one would be

As of this writing — April 2020, there will not be any major version numbered release of AEM beyond 6.5!

Here’s a note from Cedric Huesler, Director Product Management for…

In Spring 5, a reactive web client was introduced that access REST API’s in a reactive, non-blocking way. An improvement over the much used RestTemplate. This can be also closed compared to RxJs or Angular’s HttpClient to access REST API’s.


This article discusses about using Reactive programming to access API’s within Spring framework.


  1. Build a new project using . Used Spring Web and Spring Reactive Web as dependencies

2. Unzip the downloaded package, and run $mvn spring-boot:run command at the root folder to make sure the default project builds and runs without any errors.

MongoDB has a great tools for using their database on the cloud services and my favorite part — accessing that database via API’s/Services.

The Problem

Almost every website / web application needs a data store. To make it simple.. three primary needs/uses:

  1. Need a place to store data — structured(SQL) or Unstructured (NoSQL)
  2. Need a means for the application to access this data — To Create, Read, Update, Delete(aka CRUD operations)
  3. Need to be maintained along with the application — keep it up & running, backups, restore, security, ..

Either it is SQL or NoSQL. The typical process for dev-teams would be…

This article details the how-to add a heading text / help text / description in a component dialog box.

The Requirement

Show a help or information text for authors when they click on edit on a component.

Why is this a problem?

Though it looks to be a simple ask, I have not seen such examples on the internet and had to struggle a bit to find the solution.

The Solution

The simple answer t this is to use Granite UI’s Heading located at /libs/granite/ui/components/coral/foundation/heading in components’s cq_dialog’s .content.xml file.

text=”Help information.”/>

Placement example:

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root ..>…

AEM is such a huge topic and with Adobe’s continuous innovation, there is never enough content. We’re always looking for great content to help AEM Community get better at what…

Suren Konathala

Programmer, Architect, Computer Scientist, Inventor, Speaker and Writer. Works @HeroDigital

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store