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
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 }