Restricting Scheduler to run in published Env. | Community
Skip to main content
October 11, 2019
Solved

Restricting Scheduler to run in published Env.

  • October 11, 2019
  • 4 replies
  • 3715 views

I want to restrict the scheduler to run in published env. which approach will be good for this?

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 khamat_bn

In the run() of scheduler you have to runmode wheather its autour or publisher

@Reference

    private SlingSettingsService settingsService;

    private Set<String> runModes;

    @Override

    public void run() {

        this.runModes = settingsService.getRunModes();

        if (null != runModes && runModes.contains("author")) {

//your code goes here...

}

4 replies

Ankur_Khare
Community Advisor
Community Advisor
October 12, 2019

Use run mode configuration.

Add a config in config.author folder so that scheduler will not run in author

Add a config in config.publish folder so that it gets executed in publish.

Hope this helps.

ArpitVarshney
Community Advisor
Community Advisor
October 12, 2019

Hi venusj64090183

In your service, you can define policy = ConfigurationPolicy.REQUIRE as below

@Component(policy = ConfigurationPolicy.REQUIRE) 

Now create OSGi config only for publish run mode. Your service will not satisfied with the author instance.

Reference: OSGi component in AEM that is active only in specific run mode (say, publish). – Compute Patterns

Regards,

Arpit

khamat_bn
khamat_bnAccepted solution
Level 4
October 12, 2019

In the run() of scheduler you have to runmode wheather its autour or publisher

@Reference

    private SlingSettingsService settingsService;

    private Set<String> runModes;

    @Override

    public void run() {

        this.runModes = settingsService.getRunModes();

        if (null != runModes && runModes.contains("author")) {

//your code goes here...

}

joerghoh
Adobe Employee
Adobe Employee
October 13, 2019

While the answer by khamat.bn​ works for that, the best solution for this is the one by arpitv27529355​: You should never hardcode this in the code, but rely on configuration instead.

Personally I would consider every call of SlingSettingsService.getRunmodes() as bad practice.