CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

adobe/aem-cloud-service

All AEM as a Cloud Service skills: component development, Workflow model design, development, triggering, launchers, debugging, and triaging, Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening, Rapid Development Environment (RDE) deployment, log inspection, snapshots, and troubleshooting via `aio aem rde`, Jackrabbit Oak query/index tuning (property, Lucene index definitions), and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.

Quality

85%

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

architecture-overview.mdskills/aem-workflow/workflow-development/references/workflow-foundation/

Granite Workflow Engine — Architecture Overview (AEM Cloud Service)

Engine Flow

User / Launcher / API
        ↓
WorkflowSession.startWorkflow(model, data)
        ↓
Sling Event Job created
  topic: com/adobe/granite/workflow/job/**
  (transient: com/adobe/granite/workflow/transient/job/**)
        ↓
JobHandler.process()   ← consumes job, drives step loop
        ↓
For PROCESS nodes:     WorkflowProcess.execute(item, session, args)
For PARTICIPANT nodes: WorkItem persisted → Inbox / Task Management
For EXTERNAL_PROCESS:  ExternalProcessPollingHandler (polling job)
        ↓
On normal return:      workflow advances to next node
On WorkflowException:  retry (up to queue max), then FAILED + Inbox alert

Key Design Points

  • Consecutive PROCESS steps run in a single thread loop — no job re-queue between them.
  • Two JCR sessions per job: one for workflow state (/var/workflow/instances), one for payload operations. Keeps payload changes isolated from engine state.
  • Transient workflows create no JCR node until a retry or external process forces persistence.
  • InstanceLock serializes concurrent access to the same workflow instance.

Workflow Instance States

StateMeaning
RUNNINGActive, steps executing
SUSPENDEDPaused at a Participant or Task step awaiting human action
COMPLETEDTerminal — all steps completed normally
ABORTEDTerminated by admin or a process step
FAILEDExhausted retries; failure inbox item created

OSGi Registration Requirements

SPI InterfaceRequired PropertyValue
WorkflowProcessprocess.labelDisplay label shown in model editor
ParticipantStepChooserchooser.labelLabel shown in Dynamic Participant step config
WorkflowExternalProcessprocess.labelSame as WorkflowProcess
RuleEngine(standard OSGi)Used for OR-split rule evaluation

Thread Pool and Queues

Workflow jobs run on the Sling Job Queue named com/adobe/granite/workflow/job. Thread pool size and queue capacity are configured via:

  • OSGi config: org.apache.sling.event.impl.jobs.queues.QueueConfigurationImpl
  • Queue name: com\/adobe\/granite\/workflow\/job\/.*

Monitor queue depth at: Tools → Workflow → Instances or /system/console/slingevent.

skills

README.md

tile.json