Are you a candidate? Complete list of AEM interview questions 👇
- What is CQ in Adobe CQ5 CMS?
- What are the advantages of AEM CMS CQ5 over another CMS?
- What is the technology stack that CQ5 is based on?
- What is the role of the AEM Dispatcher?
- What is sightly?
- Why is a Content Management System (CMS) required?
- What is RESTful?
- What are the benefits of using OSGI?
- What is the listener property in AEM?
- How do you load digital assets in dam?
- How do you build a bundle through crxde?
- What is the purpose of the Activator.java file?
- What is a CQ5 overlay/override component?
- What is the difference between a dialog and a design dialog?
- What is extending a component?
- How does sightly differ from other templating systems?
- Can you create a page without a template?
- What are xtypes and how are they useful in AEM?
- How do you add properties to the Page Properties dialog?
- What is the difference between the Author and Publish environment?
- What is a replication agent?
- What is resource mapping?
- What design patterns are used in AEM?
- What is reverse replication?
- What is the role of AEM Architects?
- What is the purpose of clientlibs?
- What is Dependency/Dependencies in the client library?
- Difference between package and bundle?
- What is the difference between parsys and iparsys?
- What is the difference between par base and parsys?
- Explain the Multi-Site Manager?
- How to customize page property dialog?
- What is the difference between the live copy and language copy?
- Role of Persistence Manager in CQ5?
- Explain DAM Renditions?
- What is a content repository? What is JCR?
- What is Reverse Replication?
- How clustering is done in CQ5?
- What is the contribution of the Servlet Engine in CQ5?
- What is Adobe Marketing Cloud?
- List out all the available interfaces in Adobe Experience Manager.
- What are the two roles in the CQ5 Dispatcher?
- Where does the cache directory actually exist in CQ5?
- What is the primary use of EditConfig node at the time of component creation?
- What do you mean by Site Page?
- What is the process step in the workflow?
- What is a Template?
- What is a Component?
- What are the basic SCR Annotations used for creating an OSGI component?
- What is an Adaptive Form?
- What is an Adaptive Document?
- How do you resolve a resource ?
- How do you adapt a resource ?
- Can I implement multiple Dispatchers in a setup?
- Does TestNG support the automating of the AEM UI test?
- What is tag library in AEM?
- How to start AEM in debug mode?
- What is an overlay in AEM?
- What happens if replication fails in AEM?
CQ means Communique in Adobe CQ5 CMS.
How to start AEM in debug mode?
The CQ5 technology stack is based on three technologies. These technologies are: Apache Sling, OSGI (Apache Felix), and the Java Content Repository (JCR). Apache Sling is a RESTful framework that is used to access a jcr over http protocol. It will then map that request url to the node in the jcr. OSGI is a framework that is used for modular application development using Java. Each module, which is called a bundle, can be stopped and started independently during runtime. The Java Content Repository uses the JSR-170 API to access the content repository by using Java independently of the physical implementation. CQ5 uses its own implementation of the jcr called CRX.
The dispatcher is AEM’s caching and/or load balancing tool. By using the dispatcher it can also help protect your AEM server from attack since it will be using cached pages. The goal of the dispatcher is to cache as much content as possible, so it does not need to access the layout engine. Load balancing is the practice of distributing computational load of the website across several instances of AEM. The benefits of using the dispatcher as a load balancing tool is so that you gain increased processing power since the dispatcher shares document requests between several instances of AEM, and to have increased fail-safe coverage. This is accomplished by if the dispatcher does not receive responses from an instance, it will automatically relay the request to another instance.
Sightly is an HTML templating language that was introduced in AEM 6.0. It is meant to take the place of JSP files and is the preferred templating system for HTML. The name sightly means “pleasing to the eye”, and its focus is to keep your markup beautiful and maintainable.
A content management system is a piece of software that is used to create and manage documents and Web sites. Many websites are dynamic, so their content needs to be updated frequently. In order manage these changes efficiently, it is recommended to use content management system. There are many CMS providers available, of which Adobe Content Management System is one.
Representational State Transfer (REST) is an architectural style and an approach to communications that is often used in the development of web services. It relies on a stateless, client server, cacheable communications protocol. RESTful applications use HTTP requests to post data, read data, and delete data.The six architectural constraints of REST are: uniform interface, stateless, cacheable, client server, layered system, and code on demand.
The main benefits of using OSGI are:
- It reduces the complexity of the system by having everything in bundles.
- It makes the components loosely coupled and easy to manage since they can be installed, deleted, updated, started, and stopped at run time.
- It increases the performance of the system since parts of the application that are not in use, do not need to be loaded in the memory.
What does extending a component mean?
You can add digital assets to your dam by using the graphical user interface or through WebDav access. If you are using the graphical user interface, you would just browse for the selected files you would like to add, and then cq will create the metadata for those assets in the dam folder. You would generally use the WebDav option when you want to upload a large number or assets at once.
You can build a bundle through crxde by navigating to the source folder of your project located under “apps”. Once you do this, right click on the “src” folder and choose to create a bundle. This will open the wizard that will walk you through creating your bundle. It is recommended that you no longer use crxde to create OSGI bundles for AEM. Instead you should be using Maven.
The purpose of the Activator.java file is that it is to be notified any time there are bundle start and stop events for that bundle. The Activator.java file is an optional listener class that is created when you create a bundle through crxde.
The overlay/override component is used when you want to use an out of the box component in AEM and you want to add extra features to it and you want to change it across all instances of that component. For example if you want to add features to the out of the box “text” component, but you don’t want to create a new component, you would want to copy the “text” component from “libs/foundation/components” to “apps/foundation/components” and keep the same folder structure that is used. When this is done, any changes that done to this new component will be reflected in the out of the box “text” component, without changing the original code under “libs”. It is generally not a good practice to modify the original code, which is why CQ offers the ability to use overlays.
A dialog is a key element of the component because they provide an interface for authors to configure and provide input to that component. This input will be stored at the page level in the jcr. A design dialog is a dialog that will only display when you are in design mode in AEM. The input that is received here will be stored at the template level and will be accessed across the whole site.
Extending a component is when you want to create a new component that will not override a base component, but will have the same features as the original so that you can change or build upon that component. In order to extend a component, you must set “sling:resourceSuperType” of the component to the base component you would like to extend. By doing this, you will inherit everything from the base component.
Sightly differs from other templating systems in three ways. Sightly is secure by default, it offers separation of concerns, and sightly is HTML5 because it is a valid HTML5 file. Sightly is secure by default because it automatically filters and escapes all variables being output to the presentation layer to prevent cross-site-scripting vulnerabilities. Sightly offers separation of concern because it is purposely limited to ensure that a real programming language is used to express the corresponding logic. This is done through the Use-API pattern.
Pages are usually created by selecting a template for the page when you create them in the Website console. However, a page can be created manually in the crxde by using the same properties that are created when you make a page in the Website console. For example, in crxde under the content folder, create a node with the following type “cq:Page” and save it. Then add a child node with the following type “cq:PageContent”. Then you can add the required properties to show any components you want displayed on the page. It is generally not good practice to create pages manually.
In the ExtJS language an xtype is a symbolic name given to a class. In AEM these xtypes are widgets that used in the creation of components. AEM comes with a bunch of widgets that are available out of the box. You can also create and define your own xtype to be used in AEM. An example of an xytpe is when you are creating your dialog for your component, and you want the author to be able to enter text, you would add a “cq:Widget” that has an xtype property of “textfield”.
You can add properties to your page properties dialog by copying the dialog located under “libs/foundation/components/page/dialog” and adding it to your page template. This will allow you to add new tabs and add new properties that you would like the author to chooses from for pages that use that template.
A production environment usually has two difference instances of AEM running. One is the author instance, and the other is the publish instance. These two instances are usually kept in two different settings. The author instance is where you will enter and manage content for your website. This is where you will administer your site as well. The author environment is usually kept behind a firewall. The publish instance is where you will make your content available for your targeted audience. The publish environment is usually kept in a Demilitarized Zone (DMZ).
A replication agent is used to publish active content from the author environment to the publish environment, to flush content from the dispatcher cache, and return user input from the publish environment to the author environment. The replication agents are central to AEM.
Resource mapping is used to define redirects, vanity URLs and virtual hosts for AEM. You can use resource mapping to prefix all requests with “/content” so the internal structure of the AEM site is hidden from your visitors. You can also use resource mapping to define a redirect so that all requests to the gateway page of your site are redirected to another site.
Since AEM is built using OSGI, many of the design patterns for OSGI are valid. Some of these design patterns are Singleton (Service), Adapter Service, Resource Adapter Service, and Whiteboard. Also, since AEM is modular, you should be able to use any design pattern in your application.
Reverse replication is the process of replicating content from publish environment to the author environment. In order to accomplish this you need a reverse replication agent on your author instance that is configured to get content from the publish environment outbox.
AEM Architect will be part of a team that is responsible for evolving a world-class Adobe Experience Manager (AEM) implementation.
It is used for adding site-specific js and CSS files to the page and also third party js and CSS files.
It is a list of other client library categories on which this library folder depends. For example, given two cq: ClientLibraryFolder nodes F and G, if a file in F requires another file in G in order to function properly, then at least one of the categories of G should be among the dependencies of F.
Package: A Package is a zip file that contains the content in the form of a file-system serialization (called “vault” serialization) that displays the content from the repository as an easy-to-use-and-edit representation of files and folders. Packages can include content and project-related data.
Bundle: Bundle is a tightly coupled, dynamically loadable collection of classes, jars, and configuration files that explicitly declare their external dependencies (if any).
parsys: It is called the “Paragraph System” component in which you can add other components at the page level.
iparsys: It is an inherited paragraph system, which inherits parent page “paragraph system”.
par base: The par base allows components to inherit attributes from other components, similar to subclasses in object-oriented languages such as Java, C++, and so on. For example, when you open the /libs/foundation/components/text node in the CRX Explorer, you see that it has a property named sling:resourceSuperType, which references the par base component. The par base here defines tree scripts to render images, titles, and so on so that all components subclassed from this par base can use this script.
phrases (Paragraph System): The paragraph system (parsys) is a compound component that allows authors to add components of different types to a page and contains all other paragraph components. Each paragraph type is represented as a component. The paragraph system itself is also a component, which contains the other paragraph components.
Multi-Site Manager (MSM) enables you to easily manage multiple web sites that share common content. MSM lets you define relations between the sites so that content changes in one site are automatically replicated in other sites.
For example, web sites are often provided in multiple languages for international audiences. When the number of sites in the same language is low (three to five), a manual process for syncronizing content across sites is possible. However, as soon as the number of sites grows or when multiple languages are involved, it becomes more efficient to automate the process.
Step 1 – Copy /libs/foundation/components/page/dialog node to template component’s node.
Step 2 – Modify dialog node.
Live Copy – Copy created from an existing site or blueprint is called Live Copy. Rollout configurations for this Live Copy can be configured from tools console.
Language Copy – Site which is created using a language tool is called Language copy. Basically to create a site for different languages.
The persistence manager saves the repository content to a permanent storage solution, such as the file system or a database. By default, CRX saves repository content to the Tar persistence manager. Following DB’s can be used for storing content – DB2, Oracle, SQL Server, MySQL.
The DAM allows you to create renditions of an image that include different sizes and versions of the same asset. You can use those renditions in the content of your website, and that can be helpful when you need to create thumbnails or smaller views of large, high-resolution images. When you are creating multi-device websites where Internet bandwidth is a varying concern, this feature becomes even more important. After all, you want to minimize the size of any files a site visitor has to download to view your site. Making your site load faster improves your search engine optimization and the user experience.
A Content repository is basically a place where digital content is stored. Generally, the structure of the content repository is hierarchical and represented as a tree structure where each node of the tree is used to store content.
Java Content Repository is a specification provided by the Java community to access the content repository in a uniform way (platform-independent and vendor-independent way). The specification was initially released as JSR-170(JCR 1.0) and then later revised version 2 as (JCR-283).The javax.JCR API provides the various classes and interfaces to access a content repository.
Reverse replication is used to get user content generated on a publish instance back to the author instance. To do this you need a reverse replication agent in the author environment. This act as the active component to collect information from the outbox in the publish environment.
CQ5 CRX is pre-loaded to run within a cluster, even when running a single instance. Hence the configuration of multi-node clusters with little effort happens in CQ5.
Servlet Engine pretends as a server within which each CQ (and CRX if used) instance runs. Even though you can run CQ WCM without an application server, always a Servlet Engine is needed.
The Adobe Marketing Cloud is nothing but the one-stop solution for all the customers where they can utilize these services and make sure their digital marketing side of the business is completely covered by leveraging on Adobe services.
The list of all available interfaces in Adobe Experience Manager is as follows:
- CRX Explorer
- CRX Delite
- Apache Felix
- Site Admin
Within CQ5 dispatcher there are two main roles that should be highlighted, as follows:
- Caching: Within this role, the content on the website is cached as much as possible so that it can be a form of a static website. It will reduce the repeated functioning of the layout engine.
- Load balancing: This is used to increase the performance of the website
The cache directory exists or created in the root of a web server.
A CQ Edit config node is used at the time of component creation because it helps in defining the component behavior.
A site is a website, where we can place an Adaptive document, Adaptive form or a static text.
It is a workflow component that can be found at, and this is used for calling a java class in the workflow.
A CQ template enables you to define a consistent style for the pages in your application. A template comprises of nodes that specify the page structure.
Components are re-usable modules that implement specific application logic to render the content of your web site. You can think of a component as a collection of scripts (for example, JSPs, Java servlets, and so on).
Basic SCR Annotation used for developing a component or service in osgi are:-
- @Component – defines the class as a component.
- @Service – defines the service interface that is provided by the component.
- @Reference – injects a service into the component.
- @Property – defines a property that can be used in the class.
Adaptive forms, are used to break down a form into logical sections, basically it enables end users to focus on filling out the form. When we require to take input from user we use Adaptive Form.
An Adaptive Document is used to display output to the end user. For example- a bank statement is an adaptive document as all its content remain same only name and amount changes. Basically we put place holder text in Adaptive Document which are filled dynamically at run time.
You can resolve using ResourceResolver which you can get from method getResourceResolver() and then use resolve() method to resolve a resource.
You can adapt a resource to any anothor type using adaptTo() method, which accepts class type in which you want to adapt your resource. i.e. Page page = resource.adaptTo(Page.class);
Yes. In such cases, ensure that both the Dispatchers can access the CQ website directly. A Dispatcher cannot handle requests coming from another Dispatcher.
Yes, TestNG supports automating AEM UI tests.
Custom tag libraries can be developed using AEM. This facilitates the calling or invoking its actions from an AEM component. These actions can be invoked using XML code.
Starting the AEM in debug mode will let us enable the debugger mode. The following code needs to be added in the command line:
Overlay in AEM is the process of redefining the existing functionality and customising it. It can be making a custom component by modifying the current foundation component according to requirements.
If the AEM replication fails, the action must be taken according to the situation. If the replications are getting queued in the replication agent queues, it can be checked by accessing the /etc/replication/agents.author.html. Click replication agents to analyse the situation.