How can I access my OSGi services in a quartz trigger?
Below, my service companyDao is null when the timer is triggered. Do I need to give the bundle context to the scheduler or the job? if so, how?
@Service
@Component(immediate = true, specVersion = "1.1", inherit = true)
public class TechnicalStageTimer implements Job {
@Reference(cardinality = MANDATORY_UNARY, policy = DYNAMIC)
protected CompanyDao companyDao;
private static final Logger LOG = LoggerFactory.getLogger(TechnicalStageTimer.class.getCanonicalName());
Scheduler scheduler;
@Activate
public void start(BundleContext context) throws Exception {
LOG.warn("Starting Timer TechnicalStageTimer");
SchedulerFactory sf = new StdSchedulerFactory();
scheduler = sf.getScheduler();
JobDetail job = JobBuilder.newJob(TechnicalStageTimer.class).build();
Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(11, 00)) // every day at 11:00
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
}
@Deactivate
public void stop(BundleContext context) throws Exception {
scheduler.shutdown(true);
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
LOG.warn("Timer Triggered");
List<Company> companies = companyDao.getPool();
}
}