Event handler is not working in aem cloud dev server | Community
Skip to main content
New Participant
February 9, 2025
Solved

Event handler is not working in aem cloud dev server

  • February 9, 2025
  • 4 replies
  • 1013 views

Hi, 

I am trying to start a workflow on the basis of asset creation event in dam. It is working perfectly fine in AEM cloud local server but post deployment it is not working , though when i am starting the workfloww from workflow model , workflow is working fine . i am attching the code here, what can be the issue. Please guide me on this. What can be the alternative.

 

@ankurahlawat-1 @arunpatidar  @erika_antkowiak 

 

package com.disney.core.listeners;

import com.day.cq.dam.api.DamEvent;
import com.day.cq.workflow.WorkflowException;
import com.day.cq.workflow.WorkflowService;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.model.WorkflowModel;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.jcr.Session;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Component(

service = EventHandler.class,
property = {
EventConstants.EVENT_TOPIC + "=" + DamEvent.EVENT_TOPIC,
EventConstants.EVENT_FILTER + "=(type=ASSET_CREATED)"
},
immediate = true
)
public class AssetVersionListener implements EventHandler {
private static final String DISNEY_WORKFLOW_ADMIN = "disney-workflow-admin";

@Reference
private ResourceResolverFactory resourceResolverFactory;

private final Logger log = LoggerFactory.getLogger(AssetVersionListener.class);
@Reference
private WorkflowService workflowService;

@Override
public void handleEvent(Event event) {
log.info("Inside Event Handler");
try {
Map<String, Object> authInfo = new HashMap<>();
authInfo.put(ResourceResolverFactory.SUBSERVICE, DISNEY_WORKFLOW_ADMIN);
ResourceResolver resolver = resourceResolverFactory.getServiceResourceResolver(authInfo);
String assetPath = (String) event.getProperty("assetPath");
Resource assetResource = resolver.getResource(assetPath);
if (Objects.nonNull(assetResource)) {
if (fileNameMatcher(assetResource.getName())) {
WorkflowSession wfSession = workflowService.getWorkflowSession(resolver.adaptTo(Session.class));
if (Objects.nonNull(wfSession)) {
WorkflowModel wfModel = wfSession.getModel("/var/workflow/models/asset-version-notificaion");
if (Objects.nonNull(wfModel)) {
WorkflowData workflowData = wfSession.newWorkflowData("JCR_PATH", assetPath);
if (Objects.nonNull(workflowData)) {
wfSession.startWorkflow(wfModel, workflowData);
}
}
}
}
}
} catch (WorkflowException | LoginException e) {
log.error("error in handle event method", e);
}
}

// function to match pattern in file name
public static boolean fileNameMatcher(String fileName) {
Pattern pattern = Pattern.compile("^(.*?)(?:_v_|_)(\\d+)\\.(\\w+)$"); //any filename following the _v_# or _# pattern
Matcher matcher = pattern.matcher(fileName);
return matcher.matches();
}
}

Best answer by narendragandhi

Hi @shikhaso3 

 

Have you tried using Workflow launcher ? You can refer this article - https://www.techiearchive.com/configure-launcher-with-aem-workflow-aemaacs/ for how to configure workflow launchers.

 

Hope this helps!

 

Thanks

Narendra

4 replies

abhishekanand_
New Participant
February 20, 2025

Hi @shikhaso3 

 

AEMaaCS has optimized event handling, and DamEvent.EVENT_TOPIC may not behave consistently, switch to ResourceChangeListener for better AEMaaCS event handling also ensure the model exists at this path in Cloud.

try WorkflowModel wfModel = wfSession.getModel("/conf/global/settings/workflow/models/asset-version-notification");

 

The service user (disney-workflow-admin) might not have sufficient permissions in the Cloud environment, check the service user is mapped in the system/console/confMgr under Apache Sling Service User Mapper Service Amendment. 

 

last thing check assetPath is not null

 

Hope this helps!

Abhishek Anand
kautuk_sahni
Employee
February 18, 2025

@shikhaso3 Did you find the suggestions helpful? Please let us know if you need more information. If a response worked, kindly mark it as correct for posterity; alternatively, if you found a solution yourself, we’d appreciate it if you could share it with the community. Thank you!

Kautuk Sahni
New Participant
February 17, 2025
narendragandhi
narendragandhiAccepted solution
New Participant
February 16, 2025

Hi @shikhaso3 

 

Have you tried using Workflow launcher ? You can refer this article - https://www.techiearchive.com/configure-launcher-with-aem-workflow-aemaacs/ for how to configure workflow launchers.

 

Hope this helps!

 

Thanks

Narendra