How to make a call a scheduler form another scheduler which is present in another publisher which needs to be activated after the completion of service in 1 st publisher | Community
Skip to main content
June 30, 2023
Solved

How to make a call a scheduler form another scheduler which is present in another publisher which needs to be activated after the completion of service in 1 st publisher

  • June 30, 2023
  • 4 replies
  • 1318 views
No text available
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by joerghoh

This is not possible in a reliable way just by AEM ootb tools.

  • You would need an external system, e.g. a message queue to handle the message passing. Direct connection is probably not reliable enough, as the publishs can be down at any time (and this is not limited to AEM as a Cloud Service, where restarts on a publish level probably happen more frequent than in AMS or on-prem setups).
  • You need to designate publishs with that role. I am not sure if that's a sensible way to do...

 

What business requirement are you trying to solve?

4 replies

aanchal-sikka
Community Advisor
Community Advisor
June 30, 2023

@prakul 

 

Just curious, why are we executing the schedulars in sequence?

Aanchal Sikka
PrakulAuthor
June 30, 2023

@aanchal-sikka 

 

I need to call same scheduler which is present in different publisher but the call should be in serial order

Sudheer_Sundalam
Community Advisor
Community Advisor
June 30, 2023

@prakul 

 

Not sure about the your actual requirement, but if you need to execute the scheduler in 2 or more publishers in a serial manner, then you may calculate the time it is taking to finish this scheduler job and set the scheduler cron job on Publish 1 and Publish 2 accordingly.

For Example: If the job is taking 15 mins to finish, the set the cron expression to run the job at 12.00am on publish 1 and then 12.15 on publish 2.

Tanika02
Level 7
June 30, 2023

Hello @prakul -

 

Here is a solution which I can think of on a high level reading through your requirements : 

 

In AEM as a Cloud Service, you can achieve the inter-scheduler communication and activation by utilizing the Sling Job Queue and Eventing mechanisms. Here's an outline of the approach:

 

1. Define the first scheduler in the first publisher:
- Create a Sling Job Queue by extending `JobConsumer` and implementing the desired service logic.

 

2. Implement the service in the first publisher:
- Write the code for the service that needs to be executed by the first scheduler.
- Ensure that the service logic is completed before proceeding to the next step.

 

3. Configure the second scheduler in the second publisher:
- Create another Sling Job Queue following the same approach as the first scheduler.
- Define the logic that needs to be executed by the second scheduler upon activation.

 

4. Establish communication between the publishers:
- Use the Sling Eventing mechanism to trigger an event from the first publisher after the service logic within is completed.
- Configure an Event Handler in the second publisher to listen for this event.

 

5. Trigger the second scheduler from the first publisher:
- After the service in the first publisher completes, use the Sling Eventing mechanism to publish an event.

 

6. Activate the second scheduler in the second publisher:
- The Event Handler in the second publisher listens for the event published in the first publisher.
- Upon receiving the event, the handler can activate the second scheduler, and the associated logic will be executed.

bilal_ahmad
Level 5
July 1, 2023

Hello @prakul Based on your requirement, it seems that you need to establish a sequential connection between a scheduler in Pub1 and Pub2. Presumably, these schedulers have specific tasks to perform.

 

Here's my suggestion: utilize a single scheduler alongside an OSGi service. The scheduler will be set to execute at a specific time from Pub1, and upon execution, it will call the OSGi service. To introduce time delays between the calls, you can incorporate appropriate logic within your Java implementation. In my opinion, this solution offers a more efficient approach. If you have the authority to make decisions in your project, I recommend proposing this solution.

 

Thank you,

-Bilal

joerghoh
Adobe Employee
joerghohAdobe EmployeeAccepted solution
Adobe Employee
July 2, 2023

This is not possible in a reliable way just by AEM ootb tools.

  • You would need an external system, e.g. a message queue to handle the message passing. Direct connection is probably not reliable enough, as the publishs can be down at any time (and this is not limited to AEM as a Cloud Service, where restarts on a publish level probably happen more frequent than in AMS or on-prem setups).
  • You need to designate publishs with that role. I am not sure if that's a sensible way to do...

 

What business requirement are you trying to solve?