0

Quartz トリガーで OSGi サービスにアクセスするにはどうすればよいですか?

以下では、タイマーがトリガーされると、私のサービス companyDao は null になります。バンドル コンテキストをスケジューラまたはジョブに与える必要がありますか? もしそうなら、どのように?

@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();
    }

}
4

1 に答える 1