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.
79%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
// com.adobe.granite.workflow.exec.WorkflowProcess
public interface WorkflowProcess {
void execute(WorkItem item, WorkflowSession session, MetaDataMap args)
throws WorkflowException;
}Registration (DS R6 — preferred):
@Component(service=WorkflowProcess.class, property={"process.label=My Label"})
public class MyProcess implements WorkflowProcess { ... }Registration (Felix SCR — still valid on 6.5):
@Component(metatype=false)
@Service(value=WorkflowProcess.class)
@Property(name="process.label", value="My Label")
public class MyProcess implements WorkflowProcess { ... }// com.adobe.granite.workflow.exec.ParticipantStepChooser
public interface ParticipantStepChooser {
String SERVICE_PROPERTY_LABEL = "chooser.label";
String getParticipant(WorkItem workItem, WorkflowSession session,
MetaDataMap args) throws WorkflowException;
}Registration: @Component(service=ParticipantStepChooser.class, property={"chooser.label=My Chooser"})
Return value: a valid JCR rep:principalName (user ID or group ID).
Obtain via resourceResolver.adaptTo(WorkflowSession.class).
| Method | Purpose |
|---|---|
startWorkflow(model, data) | Start a new workflow instance |
getModel(id) | Get deployed model by /var/workflow/models/<name> path |
deployModel(model) | Sync design-time model to runtime (/var/workflow/models/) |
newWorkflowData(type, payload) | Create WorkflowData for JCR_PATH or BLOB |
getWorkflows(filter) | Query instances by state |
complete(workItem, route) | Advance a participant step |
terminate(workflow) | Abort a running workflow |
suspend(workflow) / resume(workflow) | Pause/resume |
WorkflowData data = session.newWorkflowData("JCR_PATH", "/content/mypage");
data.getMetaDataMap().put("initiatorNote", "from batch");
Workflow instance = session.startWorkflow(model, data);com.adobe.granite.workflow.metadata.MetaDataMap — typed property bag, persisted with the workflow instance.
MetaDataMap meta = item.getWorkflowData().getMetaDataMap();
String status = meta.get("status", "PENDING"); // with default
meta.put("status", "APPROVED");| Method | Purpose |
|---|---|
getWorkflowData() | Instance-level data (payload + shared metadata) |
getMetaDataMap() | Step-scoped metadata |
getNode() | Current WorkflowNode |
getWorkflow() | Workflow instance |
| Interface | Method | Purpose |
|---|---|---|
WorkflowModel | getId() | /var/workflow/models/<name> path |
WorkflowModel | getNodes() | All WorkflowNode objects |
WorkflowNode | getType() | START, END, PROCESS, PARTICIPANT, DYNAMIC_PARTICIPANT, OR_SPLIT, AND_SPLIT, AND_JOIN |
WorkflowNode | getMetaData() | Step configuration (PROCESS, PARTICIPANT, etc.) |
WorkflowTransition | getRule() | ECMA/Groovy rule string for OR splits |
.tessl-plugin
skills
aem-replication
aem-workflow
dispatcher
ensure-agents-md
references
tuning-oak-query-indexes