CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

adobe/aem-6-5-lts

All AEM 6.5 LTS skills: Workflow model design, development, triggering, launchers, debugging, and triaging; Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening; Replication agent configuration, content activation, API usage, and troubleshooting for AEM 6.5 LTS and AMS environments; Jackrabbit Oak query/index tuning (property, Lucene index definitions); and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.

Quality

79%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

65-lts-guardrails.mdskills/aem-workflow/workflow-triggering/references/workflow-foundation/

AEM 6.5 LTS Guardrails — Workflow Development

Model Storage

LocationUse CaseNotes
/conf/global/settings/workflow/models/All new modelsRequires explicit Sync to /var
/etc/workflow/models/Legacy models onlyAuto-deployed without Sync
/libs/settings/workflow/models/OOTB modelsOverlay at /conf or /apps to survive upgrades

Deployment

  • Use Package Manager (mvn install -P autoInstallPackage) for development
  • Use a content package (ui.content) for production deployment
  • filter.xml: always use mode="merge" for model paths to avoid overwriting sibling nodes
<filter root="/conf/global/settings/workflow/models/my-workflow" mode="merge"/>
<filter root="/conf/global/settings/workflow/launcher/config/my-launcher" mode="merge"/>

OSGi Annotations

Both Felix SCR and DS R6 work on 6.5 LTS. Prefer DS R6 for new code:

// DS R6 (preferred)
@Component(service=WorkflowProcess.class, property={"process.label=My Step"})

// Felix SCR (still valid)
@Component(metatype=false)
@Service(value=WorkflowProcess.class)
@Property(name="process.label", value="My Step")

Never mix Felix SCR and DS R6 annotations in the same class.

Service Users

Create in CRXDE Lite or via repoinit. Always use loginService() with the sub-service name — never loginAdministrative().

// Correct on 6.5 LTS
Map<String, Object> auth = Collections.singletonMap(
    ResourceResolverFactory.SUBSERVICE, "workflow-process");
ResourceResolver resolver = factory.getServiceResourceResolver(auth);

Workflow Packages (Multi-Page Payloads)

When Manage Publication sends multiple pages, the payload is a cq:WorkflowContentPackage node under /etc/workflow/packages/.

In process steps, check:

if ("cq:WorkflowContentPackage".equals(
        resource.getValueMap().get("jcr:primaryType", ""))) {
    // iterate members via ResourceCollectionManager
}

Purge workflow packages along with instances using scheduledpurge.purgePackagePayload=true.

Launcher Override

To disable an OOTB launcher, create a node with the same name under /conf/global/settings/workflow/launcher/config/<name> with enabled={Boolean}false. Do not delete or modify the /libs or /etc node directly.

Globally Excluded Launcher Paths (Same as Cloud Service)

  • /var/audit, /var/eventing, /var/taskmanagement, /tmp, /var/workflow/instances

Purge

Configure via Adobe Granite Workflow Purge Configuration OSGi factory.

Manual trigger: curl -u admin:admin -X POST http://localhost:4502/libs/granite/operations/content/maintenance/granite_weekly/granite_workflowpurgetask.run.html

skills

README.md

tile.json