I’m starting to feel desperate and really need your help with something on AEM as a Cloud Service. I’ve set up an email reminder task that operates exclusively on the author instance once a day. This task looks for something specific on a page and sends out an email.
The problem I’m facing is that it keeps sending emails twice!
Now I understand that the author server operates within a cluster and requires specific configuration/annotation. However, despite my attempts, it continues to send emails twice. On my local machine (which of course isn’t a cluster), it works correctly.
@Component(
service = Runnable.class,
property = {
SERVICE_DESCRIPTION + "=Email Reminder Task",
Scheduler.PROPERTY_SCHEDULER_RUN_ON + "=" + Scheduler.VALUE_RUN_ON_LEADER, //LEADER
Scheduler.PROPERTY_SCHEDULER_CONCURRENT + ":Boolean=false",
},
configurationPid = "com.customername.core.services.emailreminder.EmailReminderTask")
@ProviderType
@Designate(ocd = EmailReminderTaskConfig.class)
ScheduleOptions scheduleOptions = scheduler.EXPR(emailReminderTaskConfig.scheduler_expression());
scheduleOptions.name(schedulerJobName);
scheduleOptions.canRunConcurrently(false);
scheduleOptions.onLeaderOnly(true);
scheduler.schedule(this, scheduleOptions);
I also searched online, but found no proper solution. Anyone of you have a guess, why it behaves like that in the cloud?
Solved! Go to Solution.
Topics help categorize Community content and increase your ability to discover relevant content.
Just FYI: I didn't find any solution, so I refactored the implementation from org.apache.sling.commons.scheduler.Scheduler [1] to org.apache.sling.event.jobs.Job [2].
So, same solution as here: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/aem-as-cloud-service-sched...
[1] https://sling.apache.org/documentation/bundles/scheduler-service-commons-scheduler.html
[2] https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html
Just FYI: I didn't find any solution, so I refactored the implementation from org.apache.sling.commons.scheduler.Scheduler [1] to org.apache.sling.event.jobs.Job [2].
So, same solution as here: https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/aem-as-cloud-service-sched...
[1] https://sling.apache.org/documentation/bundles/scheduler-service-commons-scheduler.html
[2] https://sling.apache.org/documentation/bundles/apache-sling-eventing-and-job-handling.html
Hi @TrisM_ch ,
Your answer is correct. I too faced same issue when using Commons Scheduler. I explained the problem with Commons Scheduler in my article here https://medium.com/p/c5d688154f58.
Short answer, commons scheduler fires for each cluster in cloud. When cloud scales up/down, more instances run. To resolve this problem, Sling introduced Scheduled Jobs. Main difference, its persisted under /var/eventing/scheduled-jobs. This way, they prevent duplicate executions.
For AEM Cloud service, should switch to Scheduled Jobs instead of Commons Scheduler.
Hope this helps.