<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by SACHIN SHARMA on Medium]]></title>
        <description><![CDATA[Stories by SACHIN SHARMA on Medium]]></description>
        <link>https://medium.com/@srmag1295?source=rss-b18d9cf97b41------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*brbS0olHF3UVY-f5</url>
            <title>Stories by SACHIN SHARMA on Medium</title>
            <link>https://medium.com/@srmag1295?source=rss-b18d9cf97b41------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 17 May 2026 02:30:04 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@srmag1295/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[AEM MSM Practical Handbook: AEMaaCS & 6.X Step-by-Step Guide]]></title>
            <link>https://medium.com/@srmag1295/aem-msm-practical-handbook-aemaacs-6-x-step-by-step-guide-74f1600f8b23?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/74f1600f8b23</guid>
            <category><![CDATA[mms]]></category>
            <category><![CDATA[architecture]]></category>
            <category><![CDATA[adobe]]></category>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[adobe-experience-manager]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Mon, 05 Jan 2026 03:46:57 GMT</pubDate>
            <atom:updated>2026-01-05T03:46:57.182Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZYhctW7twI41tjaKwLk0pg.png" /><figcaption>The <strong>MSM Practical Handbook</strong> cover illustrating the <strong>Master-Live Copy</strong> workflow for <strong>AEMaaCS</strong> and <strong>AEM 6.X</strong>.</figcaption></figure><p>This handbook provides a practical, step-by-step guide to mastering <strong>Multi-Site Manager (MSM)</strong> in Adobe Experience Manager (AEM), covering both AEM 6.X and AEM as a Cloud Service (AEMaaCS).</p><p><strong>1. Core Concept Overview</strong></p><p>MSM allows you to reuse content from a “Source” to multiple “Targets” while maintaining a live connection for updates.</p><ul><li><strong>Blueprint:</strong> A source configuration that defines pages to be reused.</li><li><strong>Live Copy:</strong> A target site or page that inherits content from a blueprint/source.</li><li><strong>Rollout Configuration:</strong> Rules defining when and how content is synchronized (e.g., “On Update”, “On Activation”).</li></ul><p><strong>2. Practical Step-by-Step Implementation</strong></p><p><strong>Step 1: Establishing the Master Structure</strong></p><p>Before using MSM, organize your content hierarchy. Best practice follows a “Language Master” approach.</p><ol><li>Navigate to <strong>Sites</strong> console.</li><li>Create a root folder (e.g., /content/my-brand).</li><li>Create a <strong>Language Master</strong> folder (e.g., /content/my-brand/language-masters).</li><li>Author your primary content in a base language, such as English (/content/my-brand/language-masters/en).</li></ol><p><strong>Step 2: Creating a Blueprint Configuration</strong></p><p>This step makes your “Language Master” available for live copies.</p><ol><li>Go to <strong>Tools &gt; Sites &gt; Blueprints</strong>.</li><li>Select <strong>Create</strong> and choose the <strong>Blueprint Template</strong>.</li><li>Select your Source Path (e.g., /content/my-brand/language-masters/en).</li><li>Provide a Title and Name, then click <strong>Create</strong>.</li></ol><p><strong>Step 3: Creating a Live Copy</strong></p><p>You can create a Live Copy via the “Create Site” wizard or manually.</p><ol><li><strong>Via Create Site:</strong></li></ol><ul><li>Select <strong>Create &gt; Site</strong>.</li><li>Choose your <strong>Blueprint</strong> (created in Step 2).</li><li>Specify the destination path (e.g., /content/my-brand/us/en).</li><li>Select the <strong>Standard Rollout Configuration</strong>.</li></ul><p><strong>2. Manually (Individual Pages):</strong></p><ul><li>Select the source page in the Sites console.</li><li>Select <strong>Create &gt; Live Copy</strong>.</li><li>Pick the target destination and required rollout configs.</li></ul><p><strong>3. Managing Inheritance &amp; Synchronization</strong></p><p><strong>A. Rolling Out Changes (Source to Target)</strong></p><ul><li><strong>Manual Rollout:</strong> Select a page in the <strong>Language Master</strong>, click <strong>Properties &gt; Blueprint &gt; Rollout</strong>. This pushes changes to all associated Live Copies.</li><li><strong>Automatic Rollout:</strong> Configured via “On Modification” or “On Activation” rollout triggers.</li></ul><p><strong>B. Breaking Inheritance (Target Localization)</strong></p><p>If a local country site needs unique content, you must break inheritance.</p><ol><li>Open the Live Copy page in <strong>Editor</strong>.</li><li>Select a component and click the <strong>“Cancel Inheritance”</strong> (lock icon).</li><li>The component can now be edited locally without being overridden by the next rollout.</li></ol><p><strong>4. Key Differences: AEM 6.X vs. AEMaaCS</strong></p><p>FeatureAEM 6.X (On-Prem/AMS)AEM as a Cloud Service (AEMaaCS)<strong>Blueprint UI</strong>Classic/Touch UI tools available.Touch UI only; enhanced “Quick Site Creation” tools.<strong>Asset MSM</strong>Managed via traditional replication.Uses <strong>Asset Microservices</strong> for cloud-native asset reuse.<strong>Rollout Speed</strong>Limited by local server resources.Inherently scalable; optimized for high-volume content distribution.<strong>Deployment</strong>Mutable content packages via Package Manager.Strict separation of immutable code and mutable content.</p><p><strong>5. Troubleshooting &amp; Best Practices</strong></p><ul><li><strong>Avoid Over-Customization:</strong> Minimize custom rollout configurations to ensure better system performance and easier upgrades.</li><li><strong>Governance:</strong> Establish clear ownership between “Global Authors” (masters) and “Local Authors” (live copies) to prevent accidental overwrites.</li><li><strong>Audit Regularly:</strong> Use the <strong>Live Copy Overview</strong> console to monitor the status of inheritance and synchronization across complex site structures.</li></ul><p><strong>Feedback and Discussion</strong></p><ol><li>What are your biggest challenges with MSM rollouts in AEMaaCS? <strong>Share your thoughts</strong> in the comments below!</li><li>Did this guide help clarify the Master/Live Copy relationship? <strong>Let me know</strong> your key takeaways or any advanced tips you use!</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=74f1600f8b23" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Comprehensive Guide to Adobe Experience Manager’s Multifield Component]]></title>
            <link>https://medium.com/@srmag1295/comprehensive-guide-to-adobe-experience-managers-multifield-component-f20b39e1707d?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/f20b39e1707d</guid>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[adobe-experience-manager]]></category>
            <category><![CDATA[adobe]]></category>
            <category><![CDATA[blog]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Tue, 07 Jan 2025 16:46:16 GMT</pubDate>
            <atom:updated>2025-01-07T16:46:16.442Z</atom:updated>
            <content:encoded><![CDATA[<p>Adobe Experience Manager (AEM) is a powerful content management system that provides a variety of tools to streamline content creation, editing, and management. One of the most versatile tools in AEM is the <strong>Multifield component</strong>. This component allows authors to input and manage multiple sets of related data within a single dialog, making it a crucial feature for dynamic content structures.</p><p>In this blog, we’ll dive deep into the AEM Multifield component, explaining its properties, implementation, and usage with relevant code snippets to help you master its potential.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8OZ-XSQvY55EgIez745gug.jpeg" /><figcaption>Multifield in AEM</figcaption></figure><h3>What is the Multifield Component in AEM?</h3><p>The Multifield component is a Granite UI widget in AEM that allows authors to add, remove, and reorder multiple entries of similar data. It is commonly used in scenarios where users need to manage lists of content, such as images, links, or other repeated sets of fields.</p><p><strong>For example:</strong></p><ul><li>A carousel component might allow authors to add multiple slides, each with an image, title, and description.</li><li>A navigation component might allow authors to define multiple menu items.</li></ul><h3>Key Features of the Multifield Component</h3><ol><li><strong>Dynamic Input</strong>: Authors can add an unlimited number of entries.</li><li><strong>Complex Structures</strong>: Supports nested fields for complex content models.</li><li><strong>Flexibility</strong>: Works with various field types, including text, rich text, dropdowns, and more.</li></ol><h3>Core Properties of the Multifield Component</h3><p>Here’s a breakdown of the properties used to configure the Multifield component:</p><p>sling:resourceType Defines the type of component (e.g., cq/gui/components/authoring/dialog/multifield).</p><p>name The name of the property where data is stored in the repository.</p><p>field The child node that defines the structure of individual fields in the multifield.</p><p>allowReorder Determines whether authors can reorder items in the Multifield. Defaults to true.</p><p>minItems Specifies the minimum number of items required.</p><p>maxItems Specifies the maximum number of items allowed.</p><p>deleteHint Ensures proper deletion of child nodes when removing items from the Multifield. Defaults to true.</p><h3>Basic Implementation of the Multifield Component</h3><p>Let’s look at a simple example where we configure a Multifield component to allow authors to input a list of links with their titles.</p><h4>Dialog Configuration</h4><p>Below is the XML code for the Multifield dialog:</p><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>&lt;jcr:root xmlns:sling=&quot;http://sling.apache.org/jcr/sling/1.0&quot;<br>          xmlns:cq=&quot;http://www.day.com/jcr/cq/1.0&quot;<br>          xmlns:jcr=&quot;http://www.jcp.org/jcr/1.0&quot;<br>          jcr:primaryType=&quot;cq:Dialog&quot;<br>          xmlns:granite=&quot;http://www.adobe.com/jcr/granite/1.0&quot;&gt;<br>    &lt;content jcr:primaryType=&quot;nt:unstructured&quot;<br>             sling:resourceType=&quot;cq/gui/components/authoring/dialog&quot;&gt;<br>        &lt;items jcr:primaryType=&quot;nt:unstructured&quot;&gt;<br>            &lt;content jcr:primaryType=&quot;nt:unstructured&quot;<br>                     sling:resourceType=&quot;granite/ui/components/coral/foundation/container&quot;&gt;<br>                &lt;items jcr:primaryType=&quot;nt:unstructured&quot;&gt;<br>                    &lt;multifield jcr:primaryType=&quot;nt:unstructured&quot;<br>                                sling:resourceType=&quot;cq/gui/components/authoring/dialog/multifield&quot;<br>                                name=&quot;./links&quot;<br>                                allowReorder=&quot;{Boolean}true&quot;&gt;<br>                        &lt;field jcr:primaryType=&quot;nt:unstructured&quot;<br>                               sling:resourceType=&quot;granite/ui/components/coral/foundation/container&quot;&gt;<br>                            &lt;items jcr:primaryType=&quot;nt:unstructured&quot;&gt;<br>                                &lt;title jcr:primaryType=&quot;nt:unstructured&quot;<br>                                       sling:resourceType=&quot;granite/ui/components/coral/foundation/form/textfield&quot;<br>                                       fieldLabel=&quot;Title&quot;<br>                                       name=&quot;./title&quot; /&gt;<br>                                &lt;link jcr:primaryType=&quot;nt:unstructured&quot;<br>                                      sling:resourceType=&quot;granite/ui/components/coral/foundation/form/pathfield&quot;<br>                                      fieldLabel=&quot;Link&quot;<br>                                      name=&quot;./link&quot; /&gt;<br>                            &lt;/items&gt;<br>                        &lt;/field&gt;<br>                    &lt;/multifield&gt;<br>                &lt;/items&gt;<br>            &lt;/content&gt;<br>        &lt;/items&gt;<br>    &lt;/content&gt;<br>&lt;/jcr:root&gt;</pre><h3>Explanation of the Code</h3><ol><li><strong>Multifield Configuration</strong></li></ol><ul><li>The sling:resourceType is set to cq/gui/components/authoring/dialog/multifield, indicating that this is a Multifield component.</li><li>The name property (./links) specifies the path in the content repository where the data will be stored.</li><li>The allowReorder property is enabled, allowing authors to reorder the links.</li></ul><p><strong>2. Field Definition</strong></p><ul><li>The field node defines the structure of each item in the Multifield. In this case, each item consists of two fields:</li><li>A textfield for the title.</li><li>A pathfield for the link.</li></ul><p><strong>3. Nested Items</strong></p><ul><li>Each field (title and link) is defined as a child node under the field node with its respective sling:resourceType.</li></ul><h3>Storing and Retrieving Multifield Data</h3><p>When authors populate the Multifield and save the dialog, the data is stored in the content repository in a JSON-like structure. For example:</p><pre>&quot;links&quot;: [<br>  {<br>    &quot;title&quot;: &quot;Adobe&quot;,<br>    &quot;link&quot;: &quot;/content/we-retail/home&quot;<br>  },<br>  {<br>    &quot;title&quot;: &quot;Google&quot;,<br>    &quot;link&quot;: &quot;https://www.google.com&quot;<br>  }<br>]</pre><h4>Accessing Multifield Data in HTL (HTML Template Language)</h4><p>You can retrieve and iterate over the Multifield data in your component’s HTL file as follows:</p><pre>&lt;div&gt;<br>  &lt;ul&gt;<br>    &lt;sly data-sly-list=&quot;${model.links}&quot;&gt;<br>      &lt;li&gt;<br>        &lt;a href=&quot;${item.link}&quot; target=&quot;_blank&quot;&gt;${item.title}&lt;/a&gt;<br>      &lt;/li&gt;<br>    &lt;/sly&gt;<br>  &lt;/ul&gt;<br>&lt;/div&gt;</pre><h3>Advanced Usage: Nested Multifield</h3><p>AEM Multifield supports nested configurations for more complex use cases. For example, a Multifield can contain another Multifield to manage hierarchical data.</p><h4>Example of Nested Multifield</h4><p>Here’s an example XML configuration for a nested Multifield:</p><pre>&lt;multifield jcr:primaryType=&quot;nt:unstructured&quot;<br>            sling:resourceType=&quot;cq/gui/components/authoring/dialog/multifield&quot;<br>            name=&quot;./nestedLinks&quot;&gt;<br>    &lt;field jcr:primaryType=&quot;nt:unstructured&quot;<br>           sling:resourceType=&quot;cq/gui/components/authoring/dialog/multifield&quot;&gt;<br>        &lt;field jcr:primaryType=&quot;nt:unstructured&quot;<br>               sling:resourceType=&quot;granite/ui/components/coral/foundation/container&quot;&gt;<br>            &lt;items jcr:primaryType=&quot;nt:unstructured&quot;&gt;<br>                &lt;label jcr:primaryType=&quot;nt:unstructured&quot;<br>                       sling:resourceType=&quot;granite/ui/components/coral/foundation/form/textfield&quot;<br>                       fieldLabel=&quot;Label&quot;<br>                       name=&quot;./label&quot; /&gt;<br>                &lt;url jcr:primaryType=&quot;nt:unstructured&quot;<br>                     sling:resourceType=&quot;granite/ui/components/coral/foundation/form/pathfield&quot;<br>                     fieldLabel=&quot;URL&quot;<br>                     name=&quot;./url&quot; /&gt;<br>            &lt;/items&gt;<br>        &lt;/field&gt;<br>    &lt;/field&gt;<br>&lt;/multifield&gt;</pre><h3>Best Practices for Using Multifield</h3><ol><li><strong>Minimize Nested Multifields</strong>: While nested Multifields are powerful, they can complicate the content structure and make debugging more challenging.</li><li><strong>Use Validation</strong>: Leverage AEM’s validation mechanisms to ensure data integrity.</li><li><strong>Set Boundaries</strong>: Use minItems and maxItems to control the number of items authors can add.</li></ol><h3>Conclusion</h3><p>The AEM Multifield component is a robust tool that simplifies the management of dynamic and repeated data structures. By understanding its properties, configurations, and best practices, you can create flexible and user-friendly authoring experiences for your AEM projects. Whether you’re building simple lists or complex hierarchical data models, the Multifield component is an essential part of your toolkit.</p><p>Let us know how you use Multifield in your AEM projects or if you have any questions in the comments below!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f20b39e1707d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Comparison of AEM 6.5 and AEM as a Cloud Service (AEMaaCS)]]></title>
            <link>https://medium.com/@srmag1295/comparison-of-aem-6-5-and-aem-as-a-cloud-service-aemaacs-69e92075ae73?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/69e92075ae73</guid>
            <category><![CDATA[java]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[adobe-experience-manager]]></category>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[adobe]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Sat, 21 Dec 2024 12:38:09 GMT</pubDate>
            <atom:updated>2024-12-21T12:38:09.491Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*34akc-1Y6VkL194XoMD0gw.jpeg" /></figure><h3>1. Architectural Difference:</h3><figure><img alt="Architectural difference between AEM On-Prem &amp; AEMaaCS" src="https://cdn-images-1.medium.com/max/649/1*9DEwwOT2T7qy7qJ5dSOGuw.png" /><figcaption>Difference between AEM &amp; AEMaaCS</figcaption></figure><h3>2. Deployment Models</h3><h4>AEM 6.5 Deployment</h4><p><strong>Options</strong>:</p><ul><li><strong>On-premise</strong>: Hosted on company-owned servers.</li><li><strong>Cloud-hosted</strong>: Deployed on third-party cloud providers like AWS, Azure, or GCP.</li></ul><p><strong>Deployment Process</strong>:</p><ul><li>Involves manual setup of Author and Publish instances, dispatcher configuration, and custom CI/CD pipelines.</li></ul><p><strong>Example Use Case</strong>:</p><ul><li>A government agency managing sensitive data prefers AEM 6.5 deployed on-premise for complete control over data security.</li></ul><h4>AEMaaCS Deployment</h4><p><strong>Options</strong>:</p><ul><li>Fully managed by Adobe with no control over the underlying infrastructure.</li></ul><p><strong>Deployment Process</strong>:</p><ul><li>Cloud Manager provides CI/CD pipelines for automating code and content deployments.</li><li>Configuration involves deploying to predefined cloud environments (Development, Staging, Production).</li></ul><p><strong>Example Use Case</strong>:</p><ul><li>An e-commerce giant needing quick scalability for seasonal traffic peaks chooses AEMaaCS for its auto-scaling capabilities.</li></ul><h3>3. Key features comparison</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/652/1*xs-LXNjFHvAgMbJa--Edow.png" /><figcaption>Key feature comparison of AEM &amp; AEMaaCS</figcaption></figure><h3>4. Real-world Use Cases</h3><h4>AEM 6.5 Use Cases</h4><p><strong>Financial Institutions</strong>:</p><ul><li>Require on-premise deployment for strict regulatory compliance and control over data.</li><li>Example: A bank uses AEM 6.5 for its public website and secure internal portals.</li></ul><p><strong>High Customization Needs</strong>:</p><ul><li>Organizations with complex workflows or extensive backend integrations prefer AEM 6.5.</li><li>Example: A global media company develops a highly customized content workflow.</li></ul><h4>AEMaaCS Use Cases</h4><p><strong>Scalability and Rapid Deployment</strong>:</p><ul><li>Ideal for organizations needing quick scaling for global campaigns.</li><li>Example: An e-commerce platform launches promotional microsites that can handle high traffic during sales events.</li></ul><p><strong>Frequent Updates</strong>:</p><ul><li>Businesses prioritizing agility and continuous feature updates.</li><li>Example: A fashion brand uses AEMaaCS for a content-rich website with seasonal updates.</li></ul><h3>5. Integration and API Capabilities</h3><p><strong>AEM 6.5</strong>:</p><ul><li>Allows extensive backend integration with custom APIs.</li><li>Example: Integrating with legacy systems for complex data workflows.</li></ul><p><strong>AEMaaCS</strong>:</p><ul><li>Focuses on extensibility through Adobe I/O Runtime and cloud-based APIs.</li><li>Example: Using GraphQL APIs to serve content to a Single Page Application (SPA).</li></ul><h3>Conclusion</h3><p><strong>Choose AEM 6.5</strong> if:</p><ul><li>You need complete control over the environment.</li><li>Data security and compliance are paramount.</li><li>Extensive customizations are a priority.</li></ul><p><strong>Choose AEMaaCS</strong> if:</p><ul><li>Scalability and agility are critical.</li><li>You prefer a SaaS model with minimal operational overhead.</li><li>You require frequent updates without maintenance effort.</li></ul><p>Both versions are powerful, but the choice depends on the organization’s priorities and technical requirements.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=69e92075ae73" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Adobe Experience Manager (AEM): Overview and Functionality]]></title>
            <link>https://medium.com/@srmag1295/adobe-experience-manager-aem-overview-and-functionality-85decee956f7?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/85decee956f7</guid>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[experience]]></category>
            <category><![CDATA[cms]]></category>
            <category><![CDATA[adobe]]></category>
            <category><![CDATA[engineering]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Thu, 19 Dec 2024 17:52:43 GMT</pubDate>
            <atom:updated>2024-12-19T17:52:43.578Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Adobe Experience Manager (AEM)</strong> is an enterprise-grade content management system (CMS) that enables businesses to deliver personalized and consistent digital experiences across multiple channels, including websites, mobile apps, and other digital touchpoints. AEM combines content management with digital asset management, streamlining the creation, management, and deployment of content.</p><figure><img alt="A developer’s workspace with a lecture on Adobe Experience Manager Overview displayed on the computer screen." src="https://cdn-images-1.medium.com/max/1024/1*iCY7MpISSAhbw2OQECtUzA.jpeg" /><figcaption>Adobe Experience Manager Overview and Functionality</figcaption></figure><h3>Purpose of AEM</h3><ol><li><strong>Centralized Content Management</strong>:</li></ol><ul><li>AEM provides a unified platform for managing digital content, ensuring consistency across various channels and campaigns.</li></ul><p><strong>2. Personalization</strong>:</p><ul><li>It allows businesses to deliver tailored experiences to specific audiences using real-time insights and data integration.</li></ul><p><strong>3. Efficiency in Content Delivery</strong>:</p><ul><li>AEM enables rapid content updates and deployment, reducing time-to-market for new campaigns and initiatives.</li></ul><h3>Key Features of AEM</h3><ol><li><strong>Content Management</strong>:</li></ol><ul><li>Easy-to-use interface for creating, editing, and managing content using drag-and-drop functionality.</li><li>Support for reusable components and templates to maintain brand consistency.</li></ul><p><strong>2. Digital Asset Management (DAM)</strong>:</p><ul><li>Robust asset library to store, organize, and retrieve digital assets like images, videos, and documents.</li></ul><p><strong>3. Multichannel Delivery</strong>:</p><ul><li>Content delivery optimized for web, mobile, IoT devices, and more.</li></ul><p><strong>4. Headless CMS Capabilities</strong>:</p><ul><li>Support for Content Fragments and GraphQL APIs for delivering structured content to any frontend application.</li></ul><p><strong>5. Integration with Adobe Experience Cloud</strong>:</p><ul><li>Seamless integration with Adobe Analytics, Target, and Campaign for insights, personalization, and marketing automation.</li></ul><p><strong>6. Workflows and Collaboration</strong>:</p><ul><li>Built-in workflows for content approvals and publishing.</li></ul><p><strong>7. Scalability and Performance</strong>:</p><ul><li>Cloud-native architecture in AEM as a Cloud Service for auto-scaling and high availability.</li></ul><p><strong>8. Translation and Localization</strong>:</p><ul><li>Simplified management of multilingual content using translation tools and language copies.</li></ul><h3>Use Cases in Digital Experience Management</h3><ol><li><strong>Web Content Management</strong>:</li></ol><ul><li>Managing websites for global brands with consistent design and localized content.</li></ul><p><strong>2. E-commerce</strong>:</p><ul><li>Integration with commerce platforms for product content and personalized shopping experiences.</li></ul><p><strong>3. Marketing Campaigns</strong>:</p><ul><li>Creating landing pages, promotional content, and microsites to support campaigns.</li></ul><p><strong>4. Headless CMS for Mobile Apps</strong>:</p><ul><li>Delivering content to native apps or Single Page Applications (SPAs) using APIs.</li></ul><p><strong>5. Digital Asset Management</strong>:</p><ul><li>Organizing and sharing assets for use across marketing channels and teams.</li></ul><p><strong>6. Multilingual Content Delivery</strong>:</p><ul><li>Efficiently managing and delivering localized content to global audiences.</li></ul><p><strong>7. Customer Personalization</strong>:</p><ul><li>Enhancing user experiences using data-driven insights and dynamic content targeting.</li></ul><h3>Example Workflow</h3><ul><li><strong>Content Creation</strong>: A content author creates a page using AEM’s intuitive Touch UI, selecting components like text, images, and forms.</li><li><strong>Review and Approval</strong>: A built-in workflow routes the page for review and approval.</li><li><strong>Publishing</strong>: Upon approval, the page is published to the publish environment, making it live for end-users.</li><li><strong>Analytics Integration</strong>: Adobe Analytics tracks user interactions, providing insights to optimize content performance.</li></ul><p>AEM’s powerful features and seamless integrations make it an indispensable tool for enterprises aiming to deliver impactful digital experiences efficiently.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=85decee956f7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Getting Started with Git and GitHub: A Beginner’s Guide]]></title>
            <link>https://medium.com/@srmag1295/introduction-8ed735e5ac1f?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/8ed735e5ac1f</guid>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[computer-science]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[version-control]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Sat, 02 Nov 2024 13:13:29 GMT</pubDate>
            <atom:updated>2024-11-02T13:14:31.293Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introduction</h3><ul><li><strong>Brief Overview</strong>: Explain what Git and GitHub are, their importance in modern software development, and how they work together to manage version control.</li><li><strong>Who This Guide Is For</strong>: Mention that this guide is for anyone new to version control, Git, and GitHub, and that it will walk through the basics in a step-by-step manner.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VGOSichBr2M77-U_OZpqVA.jpeg" /><figcaption>Getting Started with Git and GitHub: A beginner-friendly guide to version control, from setup to best practices.</figcaption></figure><h3>1. Creating Your GitHub Account</h3><p><strong>Account Creation</strong>:</p><ul><li>Describe how to sign up on <a href="https://github.com">GitHub</a>.</li><li>Briefly explain the difference between free and paid plans, if relevant.</li></ul><p><strong>Setting Up Your Profile</strong>:</p><ul><li>Add a profile picture, bio, and relevant information.</li><li>Mention the importance of keeping your GitHub profile active as it acts like a portfolio for developers.</li></ul><h3>2. Setting Up Git Locally</h3><p><strong>Installing Git</strong>:</p><ul><li>Guide the reader to download Git from the official site and install it on different operating systems (Windows, macOS, Linux).</li></ul><p><strong>Initial Setup</strong>:</p><ul><li>Run essential setup commands:</li></ul><pre>bash<br><br>git config --global user.name &quot;Your Name&quot;<br>git config --global user.email &quot;you@example.com&quot;</pre><ul><li>Explain that these commands link their commits to their GitHub profile.</li></ul><p><strong>Checking Git Version</strong>:</p><ul><li>Verify the installation:</li></ul><pre>bash<br><br>git --version</pre><h3>3. Creating and Initializing a Local Repository</h3><p><strong>Folder Setup</strong>:</p><ul><li>Guide them to create a new project folder on their machine.</li></ul><p><strong>Initializing the Repository</strong>:</p><ul><li>Explain the git init command:</li></ul><pre>bash<br><br>git init</pre><p><strong>Basic Workflow</strong>:</p><ul><li>Mention the workflow: <strong>edit → add → commit</strong>.</li><li><strong>git add</strong>: Stage changes.</li><li><strong>git commit -m &quot;commit message&quot;</strong>: Commit changes.</li></ul><p>Example of basic commands:</p><pre>bash<br><br>echo &quot;# MyProject&quot; &gt;&gt; README.md<br>git add README.md<br>git commit -m &quot;Initial commit&quot;</pre><h3>4. Connecting to GitHub and Pushing Your First Code</h3><p><strong>Creating a GitHub Repository</strong>:</p><ul><li>Guide readers through creating a new repository on GitHub and explain public vs. private repos.</li></ul><p><strong>Linking Local to Remote</strong>:</p><ul><li>Show how to add a GitHub remote:</li></ul><pre>bash<br><br>git remote add origin https://github.com/username/repository.git</pre><p><strong>Pushing Code to GitHub</strong>:</p><ul><li>Explain the git push command:</li></ul><pre>bash<br><br>git push -u origin main</pre><ul><li>Discuss branches briefly (e.g., using main or master branch).</li></ul><h3>5. Essential Git Commands and Tools to Remember</h3><p><strong>Basic Commands</strong>:</p><ul><li>git status: Check the status of your repository.</li><li>git log: View commit history.</li><li>git pull: Sync local repository with remote.</li><li>git clone: Clone a repository.</li><li>git branch: Work with branches.</li><li>git merge: Merge branches.</li></ul><p><strong>Advanced Commands (optional)</strong>:</p><ul><li>Briefly mention git rebase, git stash, git cherry-pick for more advanced readers.</li></ul><p><strong>Useful Tools</strong>:</p><ul><li><strong>Git GUIs</strong>: GitHub Desktop, Sourcetree, and GitKraken for those who prefer graphical interfaces.</li><li><strong>VS Code Integration</strong>: Explain how to use Git directly within VS Code.</li></ul><h3>6. Git and GitHub Best Practices</h3><ul><li><strong>Commit Often</strong>: Make small, frequent commits.</li><li><strong>Use Descriptive Commit Messages</strong>: Explain what each change does for future reference.</li><li><strong>Branching Strategy</strong>: Use branches to organize features, bug fixes, and experiments.</li><li><strong>Review and Document</strong>: Always review code before merging and document any important changes in the README or comments.</li></ul><h3>7. Common Mistakes to Avoid</h3><ul><li><strong>Not Committing Frequently</strong>: Avoid large, infrequent commits.</li><li><strong>Ignoring </strong><strong>.gitignore</strong>: Always use a .gitignore file to exclude unnecessary files.</li><li><strong>Not Pulling Before Pushing</strong>: Remember to sync with the remote repository before pushing changes.</li></ul><h3>Documentation and Resources</h3><p><strong>Git Basics</strong>:</p><ul><li><strong>Official Git Documentation</strong>: <a href="https://git-scm.com/doc">https://git-scm.com/doc</a></li><li><strong>Git Book</strong> (an open-source, detailed book on Git): <a href="https://git-scm.com/book/en/v2">https://git-scm.com/book/en/v2</a></li></ul><p><strong>GitHub</strong>:</p><ul><li><strong>GitHub Docs</strong>: <a href="https://docs.github.com/">https://docs.github.com/</a></li><li><strong>GitHub Learning Lab</strong> (guided courses and tutorials): <a href="https://lab.github.com/">https://lab.github.com/</a></li><li><strong>GitHub CLI</strong> (for managing GitHub from your terminal): <a href="https://cli.github.com/manual/">https://cli.github.com/manual/</a></li></ul><p><strong>Installing Git</strong>:</p><ul><li><strong>Download Git</strong>: <a href="https://git-scm.com/downloads">https://git-scm.com/downloads</a></li></ul><p><strong>Git Workflow and Commands</strong>:</p><ul><li><strong>Git Cheat Sheet</strong> (official quick reference guide): <a href="https://education.github.com/git-cheat-sheet-education.pdf">https://education.github.com/git-cheat-sheet-education.pdf</a></li><li><strong>Atlassian Git Tutorials</strong>: <a href="https://www.atlassian.com/git/tutorials">https://www.atlassian.com/git/tutorials</a></li></ul><p><strong>Branching and Merging</strong>:</p><ul><li><strong>Git Branching Basics</strong>: <a href="https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging">https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging</a></li><li><strong>Understanding Git Merge and Rebase</strong>: <a href="https://www.atlassian.com/git/tutorials/merging-vs-rebasing">https://www.atlassian.com/git/tutorials/merging-vs-rebasing</a></li></ul><p><strong>Git GUI Tools</strong>:</p><ul><li><strong>GitHub Desktop</strong>: <a href="https://desktop.github.com/">https://desktop.github.com/</a></li><li><strong>Sourcetree</strong>: <a href="https://www.sourcetreeapp.com/">https://www.sourcetreeapp.com/</a></li><li><strong>GitKraken</strong>: <a href="https://www.gitkraken.com/">https://www.gitkraken.com/</a></li></ul><p><strong>.gitignore and Ignoring Files</strong>:</p><ul><li><strong>Creating </strong><strong>.gitignore Files</strong>: <a href="https://git-scm.com/docs/gitignore">https://git-scm.com/docs/gitignore</a></li><li><strong>GitHub’s Recommended </strong><strong>.gitignore Templates</strong>: <a href="https://github.com/github/gitignore">https://github.com/github/gitignore</a></li></ul><p><strong>VS Code and Git</strong>:</p><ul><li><strong>VS Code Git Integration</strong>: <a href="https://code.visualstudio.com/docs/editor/versioncontrol">https://code.visualstudio.com/docs/editor/versioncontrol</a></li></ul><p><strong>General Resources</strong>:</p><ul><li><strong>Pro Git eBook</strong> (available free online, great for advanced topics): <a href="https://git-scm.com/book/en/v2">https://git-scm.com/book/en/v2</a></li><li><strong>GitHub Glossary</strong> (terms and definitions): <a href="https://docs.github.com/en/get-started/quickstart/github-glossary">https://docs.github.com/en/get-started/quickstart/github-glossary</a></li></ul><h3>Conclusion</h3><ul><li><strong>Encourage Practice</strong>: Reinforce the importance of hands-on practice with Git and GitHub.</li><li><strong>Additional Resources</strong>: Suggest further reading or resources like Git documentation, GitHub Learning Lab, and YouTube tutorials for deepening their knowledge.</li></ul><p>— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8ed735e5ac1f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Best Practices for AEM Sling Servlets: Registration Methods, Key Differences, and Which to Choose]]></title>
            <link>https://medium.com/@srmag1295/best-practices-for-aem-sling-servlets-registration-methods-key-differences-and-which-to-choose-268e112e75bb?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/268e112e75bb</guid>
            <category><![CDATA[servlet]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[sling]]></category>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[adobe]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Sat, 05 Oct 2024 05:14:18 GMT</pubDate>
            <atom:updated>2024-10-05T05:14:18.971Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Sling servlet" src="https://cdn-images-1.medium.com/max/358/1*tTPDemzz9UiBuHU1hajyUQ.png" /></figure><h3>Best Practices for AEM Sling Servlets</h3><h4>1. Component-Based OSGi (Declarative Services) Registration (Recommended)</h4><p>This is the <strong>modern</strong> and most <strong>preferred</strong> way of registering servlets, following OSGi R7 standards. It involves using <strong>OSGi Declarative Services (DS)</strong> and annotations to register servlets.</p><p>Example Code:</p><pre>import org.apache.sling.api.servlets.SlingAllMethodsServlet;<br>import org.apache.sling.api.SlingHttpServletRequest;<br>import org.apache.sling.api.SlingHttpServletResponse;<br>import org.osgi.service.component.annotations.Component;<br>import javax.servlet.Servlet;<br>import java.io.IOException;<br><br>@Component(<br>    service = Servlet.class,<br>    property = {<br>        &quot;sling.servlet.paths=/bin/myservlet&quot;,<br>        &quot;sling.servlet.methods=GET&quot;,<br>        &quot;sling.servlet.extensions=json&quot;<br>    }<br>)<br>public class MySlingServlet extends SlingAllMethodsServlet {<br>    @Override<br>    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {<br>        response.setContentType(&quot;application/json&quot;);<br>        response.getWriter().write(&quot;{\&quot;message\&quot;: \&quot;Hello AEM\&quot;}&quot;);<br>    }<br>}</pre><h3>Key Features of OSGi Component-Based Registration:</h3><ul><li><strong>Annotations</strong>: Leverages the @Component annotation to define metadata such as the servlet path (sling.servlet.paths), supported HTTP methods (sling.servlet.methods), and file extensions (sling.servlet.extensions).</li><li><strong>Lifecycle Management</strong>: OSGi framework manages the servlet lifecycle, including activation and deactivation.</li><li><strong>SlingAllMethodsServlet</strong>: Supports multiple HTTP methods (GET, POST, etc.), allowing flexibility.</li></ul><h4>Pros:</h4><ul><li><strong>Modularity</strong>: Managed by OSGi Declarative Services, offering modularity and loose coupling.</li><li><strong>Dynamic Service Management</strong>: OSGi can dynamically start, stop, and update servlets without restarting the application.</li><li><strong>OSGi Configurations</strong>: Can be configured and deployed as an OSGi component, ensuring clarity and separation of concerns.</li><li><strong>Reduced Boilerplate</strong>: Use of annotations leads to cleaner and more maintainable code.</li></ul><h4>Cons:</h4><ul><li><strong>Initial Complexity</strong>: Slightly more setup involved due to OSGi annotations.</li><li><strong>Learning Curve</strong>: Developers need to understand OSGi Declarative Services, which might be complex for newcomers.</li></ul><figure><img alt="Sling servlet with sugar coated image" src="https://cdn-images-1.medium.com/max/1000/1*l_K208ti1CQQMG-ejpDKoA.jpeg" /></figure><h4>2. Traditional Registration via Sling Resource Types (JCR-based)</h4><p>This method registers servlets using resource type bindings via <strong>JCR node configurations</strong> or <strong>Sling Mapping</strong>. It was a more commonly used method before Declarative Services became the norm.</p><p>Example Configuration:</p><p>In this approach, you define a servlet in <strong>JCR</strong> by adding a cq:Servlet node under a specific path and assigning it a resource type.</p><p>Example Code:</p><pre>import org.apache.sling.api.servlets.SlingSafeMethodsServlet;<br>import org.apache.sling.api.SlingHttpServletRequest;<br>import org.apache.sling.api.SlingHttpServletResponse;<br>import org.osgi.service.component.annotations.Component;<br><br>@Component(service = Servlet.class, property = {<br>    &quot;sling.servlet.resourceTypes=myproject/components/structure/page&quot;,<br>    &quot;sling.servlet.methods=GET&quot;<br>})<br>public class MyResourceTypeServlet extends SlingSafeMethodsServlet {<br>    @Override<br>    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {<br>        response.getWriter().write(&quot;This servlet is bound to a resource type.&quot;);<br>    }<br>}</pre><h4>Pros:</h4><ul><li><strong>JCR Binding</strong>: Can bind servlets to specific resource types, allowing requests to be processed based on page/component structures.</li><li><strong>Component-Oriented</strong>: Ideal for servlets tied to specific content resources or page types.</li></ul><h4>Cons:</h4><ul><li><strong>JCR Overhead</strong>: Involves additional configuration in JCR (e.g., defining servlet nodes), making it less flexible for servlet deployment.</li><li><strong>Harder to Test</strong>: This approach requires more setup in content repositories, making unit testing more complicated.</li><li><strong>JCR Dependency</strong>: Strong dependency on JCR structures, which makes the approach less flexible compared to OSGi.</li></ul><h3>Choosing the Right Approach</h3><ul><li><strong>OSGi Declarative Services (DS)</strong> is <strong>preferred</strong> in most scenarios, especially in <strong>AEM as a Cloud Service (AEMaaCS)</strong>, where modularity and service dynamism are essential. This method offers more flexibility, cleaner configurations, and less dependency on JCR content.</li><li><strong>Resource Type Registration</strong> can still be useful if your servlet is closely tied to a specific <strong>component-based</strong> or <strong>resource-based</strong> use case, but it’s often more cumbersome and difficult to maintain.</li></ul><h3>Conclusion</h3><p>For modern <strong>AEM</strong> implementations, especially <strong>AEM as a Cloud Service</strong>, <strong>OSGi Declarative Services</strong> with <strong>annotations</strong> is the best practice for registering Sling Servlets. It ensures a cleaner, modular, and more flexible setup with easier management of servlet lifecycle and configurations.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=268e112e75bb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Resolving WiFi Issues with Intel Dual Band AC 3160 and Jio AirFiber]]></title>
            <link>https://medium.com/@srmag1295/resolving-wifi-issues-with-intel-dual-band-ac-3160-and-jio-airfiber-a3ece87e6b93?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/a3ece87e6b93</guid>
            <category><![CDATA[jio-air-fiber]]></category>
            <category><![CDATA[wifi]]></category>
            <category><![CDATA[laptop]]></category>
            <category><![CDATA[driver]]></category>
            <category><![CDATA[intel]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Sat, 05 Oct 2024 04:56:15 GMT</pubDate>
            <atom:updated>2024-10-05T04:56:15.292Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="airtel and Jio Fiber comparison image" src="https://cdn-images-1.medium.com/max/800/1*Fv1OkEnpewAvhFVh63ClXA.png" /></figure><p>Are you facing trouble with your Intel Dual Band AC 3160 not detecting Jio AirFiber 2.4GHz or 5GHz bands? This issue can be frustrating, but several users have successfully fixed it by following specific troubleshooting steps.</p><p><strong>Common Causes</strong><br>1. <strong>Driver Compatibility:</strong> If you’re running Windows 10 and using WiFi 6-capable routers, outdated or incorrect drivers for the AC 3160 adapter might be causing the issue.<br>2. <strong>Driver Version</strong>: The correct driver version (18.33.17.1) for Windows 10 is key. Many users found that after upgrading to this driver, their Intel Dual Band AC 3160 was able to detect Jio AirFiber networks properly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qi2ejYUZTrbEokcCXuVOPg.jpeg" /><figcaption>Wifi driver update and installation</figcaption></figure><p><strong>Solutions to Try<br></strong>1. <strong>Upgrade the Driver:</strong><br> — Update to the driver version 18.33.17.1, which is available in the 21.10.1 package. This driver ensures compatibility with newer WiFi standards and fixes detection issues. <br> — You can find archived versions of discontinued drivers online (some community members have shared reliable sources). Intel has stopped hosting these drivers on their official site.<br> <br>2. <strong>Rollback to an Older Driver</strong>: <br> In some cases, users reported success by rolling back to an even older driver version like 17.15.0.5 (dated 2015). This can be a solution if you face compatibility problems with more recent driver versions.</p><p>3. <strong>Advanced Settings Adjustment:</strong> <br> — Navigate to the Device Manager and modify the Preferred Band setting under the adapter’s properties in the Advanced tab. This could help force your device to connect to a specific frequency range, either 2.4GHz or 5GHz.</p><p><strong>Things to Keep in Mind</strong><br>- <strong>Discontinued Adapter</strong>: Intel has stopped supporting the AC 3160 adapter, which makes obtaining official driver updates challenging. However, community-shared resources and forums may help you access the necessary drivers.</p><p>- <strong>Compatibility with Windows 11</strong>: If you plan on upgrading to Windows 11, be cautious. The Intel Dual Band AC 3160 may not be fully supported, and no guarantee exists for a smooth transition. However, some users still find workarounds.</p><p>By following these steps, you should be able to get your Intel AC 3160 adapter to detect Jio AirFiber networks.</p><p><strong>Further Reading &amp; References:</strong><br>- [Intel Community Forum on Wireless Adapters](<a href="https://community.intel.com/t5/Wireless/Intel-Dual-Band-AC-3160-selectively-not-detecting-Jio-Airfiber-2/m-p/1565651">https://community.intel.com/t5/Wireless/Intel-Dual-Band-AC-3160-selectively-not-detecting-Jio-Airfiber-2/m-p/1565651</a>)</p><p>Do you need help with specific steps in the process? Let me know!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3ece87e6b93" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Setting up AEM Headless on your local machine]]></title>
            <link>https://medium.com/@srmag1295/setting-up-aem-headless-on-your-local-machine-6c01a5c520a0?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c01a5c520a0</guid>
            <category><![CDATA[headless-cms]]></category>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[adobe]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[education]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Fri, 07 Jun 2024 11:44:32 GMT</pubDate>
            <atom:updated>2024-06-07T11:44:32.708Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/864/1*tAQhCGKV26yzUcX_0GUgyQ.png" /><figcaption>AEM Headless</figcaption></figure><h3>1. Install AEM 6.5</h3><p><strong>Download AEM 6.5:</strong></p><ol><li>Go to the [Adobe Experience Manager downloads page](<a href="https://experienceleague.adobe.com/docs/experience-manager-65/release-notes/service-pack/sp-release-notes.html">https://experienceleague.adobe.com/docs/experience-manager-65/release-notes/service-pack/sp-release-notes.html</a>).</li><li>Download the AEM 6.5 Quickstart jar file.</li></ol><p><strong>Start AEM 6.5:</strong></p><ol><li>Place the Quickstart jar file in a directory (e.g., `C:\AEM\`).</li><li>Open the command prompt and navigate to the directory containing the jar file.</li><li>Run the following command to start AEM:<br> java -jar aem-quickstart-6.5.jar -nofork</li><li>Wait for AEM to start. It will be accessible at `<a href="http://localhost:4502`">http://localhost:4502`</a>.</li></ol><h3>2. Install Service Packs and Feature Packs</h3><ol><li><strong>Download Service Packs</strong>:<br>- Visit the [Service Pack download page](<a href="https://experienceleague.adobe.com/docs/experience-manager-65/release-notes/service-pack/sp-release-notes.html">https://experienceleague.adobe.com/docs/experience-manager-65/release-notes/service-pack/sp-release-notes.html</a>) and download the latest service pack.</li><li><strong>Install Service Packs</strong>:<br>- Log in to AEM at `<a href="http://localhost:4502`">http://localhost:4502`</a> using the default credentials (`admin` / `admin`).<br>- Navigate to `<a href="http://localhost:4502/crx/packmgr`">http://localhost:4502/crx/packmgr`</a>.<br> — Upload and install the service pack.</li></ol><h3>3. Configure AEM for Headless</h3><p><strong>Install Core Components:</strong></p><ol><li>Download the Core Components package from [Adobe GitHub repository](<a href="https://github.com/adobe/aem-core-wcm-components/releases">https://github.com/adobe/aem-core-wcm-components/releases</a>).</li><li>Install the package via the CRX Package Manager (`<a href="http://localhost:4502/crx/packmgr`">http://localhost:4502/crx/packmgr`</a>).</li></ol><p><strong>Configure Content Services:</strong></p><ol><li>Navigate to the AEM Web Console at `<a href="http://localhost:4502/system/console/configMgr`">http://localhost:4502/system/console/configMgr`</a>.</li><li>Search for and configure the following:<br> — <strong>Apache Sling GET Servlet</strong>: Ensure that JSON rendering is enabled.<br> — <strong>Apache Sling Content Distribution</strong>: Configure the appropriate endpoints if necessary.</li></ol><h3>4. Create Content Services Configuration</h3><ol><li>Go to `<a href="http://localhost:4502/aem/start.html`">http://localhost:4502/aem/start.html`</a>.</li><li>Navigate to `Tools &gt; General &gt; Configurations`.</li><li>Create a new configuration for your content services.</li></ol><h3>5. Create a Content Fragment Model</h3><ol><li>Navigate to `<a href="http://localhost:4502/aem/start.html`">http://localhost:4502/aem/start.html`</a>.</li><li>Go to `Tools &gt; Assets &gt; Content Fragment Models`.</li><li>Create a new content fragment model, defining the necessary fields for your API.</li></ol><h3>6. Create Content Fragments</h3><ol><li>Navigate to `<a href="http://localhost:4502/aem/start.html`">http://localhost:4502/aem/start.html`</a>.</li><li>Go to `Assets &gt; Files`.</li><li>Create a new content fragment using the model you defined.</li></ol><h3>7. Enable GraphQL</h3><ol><li>Navigate to the AEM Web Console at `<a href="http://localhost:4502/system/console/configMgr`">http://localhost:4502/system/console/configMgr`</a>.</li><li>Configure the <strong>Adobe Experience Manager GraphQL Service</strong>.</li></ol><h3>8. Test Your Setup</h3><p><strong>Access JSON Content:</strong></p><ol><li>Navigate to one of your content fragments in the Assets UI.</li><li>Click on the content fragment and check the JSON output by appending `.json` to the URL.</li></ol><p><strong>Access GraphQL Endpoint:</strong></p><ol><li>Go to `<a href="http://localhost:4502/api/graphql`">http://localhost:4502/api/graphql`</a>.</li><li>Run a GraphQL query to fetch your content fragment data.</li></ol><h3>9. Develop and Test Your Application</h3><p>You can now develop and test your headless application using the content served from AEM. Use tools like Postman to interact with your APIs and ensure they return the expected data.</p><h3>10. Optimize and Secure Your AEM Instance</h3><ol><li><strong>Optimize</strong>: Implement caching strategies and optimize the response times of your APIs.</li><li><strong>Secure</strong>: Configure appropriate authentication mechanisms and ensure your APIs are secure.</li></ol><p>By following these steps, you should have a functional AEM 6.5 Headless setup on your local machine. If you encounter any issues, the [AEM documentation](<a href="https://experienceleague.adobe.com/docs/experience-manager-65.html">https://experienceleague.adobe.com/docs/experience-manager-65.html</a>) is a valuable resource for troubleshooting and additional configurations.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6c01a5c520a0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Integrating SOLR with AEM Site]]></title>
            <link>https://medium.com/@srmag1295/integrating-solr-with-aem-site-6dc0863d1eae?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/6dc0863d1eae</guid>
            <category><![CDATA[aem-solr-integration]]></category>
            <category><![CDATA[solr-setup-for-aem]]></category>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[aem-indexing-with-solr]]></category>
            <category><![CDATA[aem-search-functionality]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Fri, 17 May 2024 18:06:16 GMT</pubDate>
            <atom:updated>2024-05-17T18:06:16.453Z</atom:updated>
            <content:encoded><![CDATA[<p>Integrating Apache Solr with Adobe Experience Manager (AEM) can significantly enhance your site’s search capabilities. Solr, a powerful open-source search platform from the Apache Lucene project, provides advanced full-text search, faceted search, real-time indexing, dynamic clustering, and rich document handling. This blog will guide you through the entire process of integrating Solr with AEM, step-by-step, ensuring even beginners can follow along with ease.</p><figure><img alt="Indexing ofthe site and actual search result" src="https://cdn-images-1.medium.com/max/1024/1*iSvH7yvFF-98rJNSVCIynA.png" /></figure><h3>Table of Contents</h3><ol><li>Prerequisites</li><li>Setting Up Solr</li></ol><ul><li>Installing Solr</li><li>Configuring Solr</li></ul><p>3. Integrating Solr with AEM</p><ul><li>Configuring AEM to Use Solr</li><li>Creating Solr Configuration Files</li></ul><p>4. Indexing AEM Content in Solr</p><p>5. Implementing Search Functionality in AEM</p><p>6. Testing and Debugging</p><p>7. Advanced Configurations</p><p>8. Conclusion</p><h3>1. Prerequisites</h3><p>Before we begin, ensure you have the following:</p><ul><li>AEM installed (AEM 6.5 or newer is recommended)</li><li>Solr installed (Solr 8.x is recommended)</li><li>Basic knowledge of AEM, Java, and Apache Solr</li><li>Administrative access to your AEM instance</li></ul><h3>2. Setting Up Solr</h3><h4>Installing Solr</h4><ol><li><strong>Download Solr</strong>: Visit the <a href="https://solr.apache.org/downloads.html">official Solr website</a> and download the latest version of Solr.</li><li><strong>Install Solr</strong>:</li></ol><pre>tar xzf solr-8.11.1.tgz<br>cd solr-8.11.1<br>bin/solr start</pre><h4>Configuring Solr</h4><ol><li><strong>Create a New Core:</strong> A core in Solr is a running instance that uses its own configuration. Create a new core named aemcore:</li></ol><pre>bin/solr create -c aemcore</pre><p>2. <strong>Configure the Schema</strong>: Update the schema.xml file to define the fields and types Solr will index. Typically located in solr-8.11.1/server/solr/aemcore/conf/.</p><h3>3. Integrating Solr with AEM</h3><h4>Configuring AEM to Use Solr</h4><ol><li><strong>Install Solr Integration Package:</strong> Download and install the Solr integration package for AEM. You can find this on Adobe’s package share or <a href="https://github.com/HeadwireCom/aem-solr-search">AEM Solr Integration GitHub Repository</a>.</li><li><strong>Configure Solr Server in AEM:</strong></li></ol><ul><li>Navigate to AEM Web Console: <a href="http://localhost:4502/system/console/configMgr">http://localhost:4502/system/console/configMgr</a></li><li>Search for Apache Solr Search</li><li>Configure the Solr server details (URL, core name, etc.).</li></ul><h4>Creating Solr Configuration Files</h4><ol><li><strong>Solr Configuration:</strong> Create or update solrconfig.xml and schema.xml files in the Solr core directory.</li><li><strong>AEM Configuration:</strong> Update the org.apache.solr.client.solrj.impl.HttpSolrClient configuration in AEM to point to your Solr server.</li></ol><h3>4. Indexing AEM Content in Solr</h3><ol><li><strong>Create an Indexing Service</strong>: Write an OSGi service in AEM to push content to Solr. Here is a sample code snippet:</li></ol><pre>@Component(service = IndexingService.class, immediate = true)<br>public class IndexingService {<br>    @Reference<br>    private HttpSolrClient solrClient;<br><br>    public void indexContent(Page page) {<br>        SolrInputDocument document = new SolrInputDocument();<br>        document.addField(&quot;id&quot;, page.getPath());<br>        document.addField(&quot;title&quot;, page.getTitle());<br>        // Add other fields as needed<br>        solrClient.add(document);<br>        solrClient.commit();<br>    }<br>}</pre><p>2. <strong>Configure Event Listeners</strong>: Set up event listeners to trigger indexing when content is created or updated in AEM.</p><h3><strong>5. Implementing Search Functionality in AEM</strong></h3><ol><li><strong>Create a Search Servlet:</strong> Implement a servlet to handle search requests and query Solr.</li></ol><pre>@Component(<br>    service = { Servlet.class },<br>    property = {<br>        &quot;sling.servlet.paths=/bin/search&quot;,<br>        &quot;sling.servlet.methods=GET&quot;<br>    }<br>)<br>public class SearchServlet extends SlingSafeMethodsServlet {<br>    @Reference<br>    private HttpSolrClient solrClient;<br><br>    @Override<br>    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {<br>        String query = request.getParameter(&quot;q&quot;);<br>        SolrQuery solrQuery = new SolrQuery();<br>        solrQuery.setQuery(query);<br>        QueryResponse solrResponse = solrClient.query(solrQuery);<br>        // Process and return search results<br>    }<br>}</pre><p>2. <strong>Create Search Components: </strong>Develop AEM components for the search form and results display using HTL and JavaScript.</p><h3>6. Testing and Debugging</h3><ol><li><strong>Test the Integration</strong>: Use AEM’s author and publish environments to test Solr integration.</li><li><strong>Debugging</strong>: Check logs in AEM and Solr for any errors and ensure data is correctly indexed and searchable.</li></ol><h3>7. Advanced Configurations</h3><ol><li><strong>Faceted Search</strong>: Configure Solr to support faceted search.</li><li><strong>Synonym Handling</strong>: Add a synonyms.txt file in Solr to handle search synonyms.</li><li><strong>Multilingual Support</strong>: Configure Solr and AEM to support multilingual content indexing and searching.</li></ol><h3>8. Conclusion</h3><p>Integrating Solr with AEM can significantly improve the search experience on your site, offering faster and more relevant search results. This guide provided a step-by-step approach to setting up and configuring Solr with AEM, ensuring even beginners can follow along and implement a robust search solution.</p><p><strong>For more details, you can refer to the following resources:</strong></p><ul><li><a href="https://solr.apache.org/guide/">Apache Solr Documentation</a></li><li><a href="https://experienceleague.adobe.com/docs/experience-manager.html">Adobe Experience Manager Documentation</a></li><li><a href="https://github.com/HeadwireCom/aem-solr-search">AEM Solr Integration GitHub Repository</a></li></ul><p>By following this guide, you’ll be well on your way to mastering Solr integration with AEM, providing your users with an exceptional search experience.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6dc0863d1eae" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding AEM Models with Exporter]]></title>
            <link>https://medium.com/@srmag1295/understanding-aem-models-with-exporter-2b64e5e5c7d8?source=rss-b18d9cf97b41------2</link>
            <guid isPermaLink="false">https://medium.com/p/2b64e5e5c7d8</guid>
            <category><![CDATA[aem-developer]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[aem]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[adobe]]></category>
            <dc:creator><![CDATA[SACHIN SHARMA]]></dc:creator>
            <pubDate>Fri, 17 May 2024 16:39:17 GMT</pubDate>
            <atom:updated>2024-05-17T16:39:17.720Z</atom:updated>
            <content:encoded><![CDATA[<p>Adobe Experience Manager (AEM) provides a powerful feature known as Sling Model Exporters, which allows developers to export AEM content as JSON or other formats. This is particularly useful for headless CMS implementations where content needs to be consumed by various front-end applications.</p><h3>What is a Sling Model Exporter?</h3><p>A Sling Model Exporter is a framework that enables the conversion of Sling Models into JSON. It uses annotations to define how a model can be exported and serialized, making it easier to share data with web services and JavaScript applications.</p><h3>Setting Up Your AEM Project</h3><p>Before you begin, ensure your AEM project is configured to use Sling Models and the Exporter framework. You’ll need to include the necessary dependencies in your pom.xml file and configure your Maven Bundle Plugin accordingly.</p><h3>Creating Your First Sling Model with Exporter</h3><p>Let’s create a simple Sling Model that can be exported as JSON.</p><pre>package com.example.aem.models;<br>import org.apache.sling.api.resource.Resource;<br>import org.apache.sling.models.annotations.Model;<br>import org.apache.sling.models.annotations.Exporter;<br>@Model(adaptables = Resource.class)<br>@Exporter(name = &quot;jackson&quot;, extensions = &quot;json&quot;)<br>public class ExampleModel {<br>    @Inject<br>    private String title;<br>    // Standard getters and setters<br>}</pre><p>In the above code snippet, we define a Sling Model ExampleModel that is adaptable from a Resource. We use the <a href="http://twitter.com/Exporter">@Exporter</a> annotation to specify that we want to export this model using Jackson to serialize it into JSON format.</p><h3>Exporting the Model</h3><p>To export the model, simply access the resource via HTTP request with the .json extension, and AEM will automatically use the Jackson exporter to serialize the model.</p><p>For example, if your model is associated with a resource at /content/example, you would access /content/example.model.json to get the JSON output.</p><h3>Customizing the Export</h3><p>You can further customize the JSON output using Jackson annotations. For example, you can use <a href="http://twitter.com/JsonProperty">@JsonProperty</a> to rename properties or <a href="http://twitter.com/JsonIgnore">@JsonIgnore</a> to exclude certain properties from serialization.</p><pre>package com.example.aem.models;<br>import org.apache.sling.api.resource.Resource;<br>import org.apache.sling.models.annotations.Model;<br>import org.apache.sling.models.annotations.Exporter;<br>import com.fasterxml.jackson.annotation.JsonProperty;<br>import com.fasterxml.jackson.annotation.JsonIgnore;<br>@Model(adaptables = Resource.class)<br>@Exporter(name = &quot;jackson&quot;, extensions = &quot;json&quot;)<br>public class CustomExampleModel {<br>    @Inject<br>    @JsonProperty(&quot;customTitle&quot;)<br>    private String title;<br>    @Inject<br>    @JsonIgnore<br>    private String internalId;<br>    // Standard getters and setters<br>}</pre><p>In the <strong>CustomExampleModel</strong>, we’ve renamed the title property to <strong>customTitle</strong> in the JSON output and excluded the internalId property from serialization.</p><p>Sling Model Exporters in AEM are a robust way to expose your content as JSON or other formats. They provide a seamless integration between your AEM content repository and the consuming applications, enabling a more flexible and decoupled architecture.<br>Remember to test your models and exporters thoroughly to ensure the output is as expected. With the right setup, AEM Models with Exporter can significantly streamline your content delivery process.</p><p>I hope this blog post helps you understand AEM Models with Exporter.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2b64e5e5c7d8" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>