View Javadoc
1   package com.atlassian.refapp.demo.scheduler;
2   
3   import java.util.Date;
4   
5   import javax.inject.Inject;
6   import javax.inject.Named;
7   
8   import com.atlassian.plugin.spring.scanner.annotation.export.ExportAsService;
9   import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
10  import com.atlassian.sal.api.lifecycle.LifecycleAware;
11  import com.atlassian.scheduler.SchedulerRuntimeException;
12  import com.atlassian.scheduler.SchedulerService;
13  import com.atlassian.scheduler.SchedulerServiceException;
14  import com.atlassian.scheduler.config.JobConfig;
15  import com.atlassian.scheduler.config.JobId;
16  import com.atlassian.scheduler.config.Schedule;
17  
18  import org.slf4j.Logger;
19  import org.slf4j.LoggerFactory;
20  
21  import static com.atlassian.scheduler.config.RunMode.RUN_LOCALLY;
22  import static com.atlassian.scheduler.config.RunMode.RUN_ONCE_PER_CLUSTER;
23  
24  @Named("refappSchedulerActivator")
25  @ExportAsService ({ LifecycleAware.class })
26  public class RefAppStreamsSchedulerActivator implements LifecycleAware {
27      private static final Logger log = LoggerFactory.getLogger(RefAppStreamsSchedulerActivator.class);
28  
29      @ComponentImport
30      private final SchedulerService schedulerService;
31  
32      private final DemoJobRunner demoJobRunner;
33  
34      private static final JobId LOCAL_JOB_ID = JobId.of("Refapp-demo-local-schedule");
35      private static final JobId CLUSTERED_JOB_ID = JobId.of("Refapp-demo-clustered-schedule");
36  
37      @Inject
38      public RefAppStreamsSchedulerActivator(final SchedulerService schedulerService, final DemoJobRunner demoJobRunner) {
39          this.schedulerService = schedulerService;
40          this.demoJobRunner = demoJobRunner;
41      }
42  
43      @Override
44      public void onStart() {
45          registerDemoSchedules();
46  
47      }
48  
49      @Override
50      public void onStop() {
51          schedulerService.unregisterJobRunner(DemoJobRunner.RUNNER_KEY);
52          schedulerService.unscheduleJob(LOCAL_JOB_ID);
53          schedulerService.unscheduleJob(CLUSTERED_JOB_ID);
54      }
55  
56      private void registerDemoSchedules()
57      {
58          schedulerService.registerJobRunner(DemoJobRunner.RUNNER_KEY, demoJobRunner);
59  
60          try
61          {
62              JobConfig jobConfig = JobConfig.forJobRunnerKey(DemoJobRunner.RUNNER_KEY)
63                      .withSchedule(Schedule.forInterval(60_000L, new Date()));
64  
65              // Schedule 2 jobs, one local and one clustered.
66              schedulerService.scheduleJob(CLUSTERED_JOB_ID, jobConfig.withRunMode(RUN_ONCE_PER_CLUSTER));
67              schedulerService.scheduleJob(LOCAL_JOB_ID, jobConfig.withRunMode(RUN_LOCALLY));
68  
69              log.debug("Demo schedules have been registered.");
70          }
71          catch (SchedulerServiceException sse)
72          {
73              log.error("Can't scheduler demo schedules.", sse);
74              throw new SchedulerRuntimeException("Can't scheduler demo schedules.", sse);
75          }
76      }
77  
78  }