/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.process.core.timer.impl; import org.drools.core.time.InternalSchedulerService; import org.drools.core.time.Job; import org.drools.core.time.JobContext; import org.drools.core.time.JobHandle; import org.drools.core.time.TimerService; import org.drools.core.time.Trigger; import org.drools.core.time.impl.TimerJobFactoryManager; import org.drools.core.time.impl.TimerJobInstance; import org.jbpm.process.core.timer.TimerServiceRegistry; import org.kie.api.time.SessionClock; import java.util.Collection; /** * Simple delegate for timer service that fetches the real instance of timer service from * TimerServiceRegistry under "default" key. * That requires TimerService to be registered prior to using this delegate, which usually * means before any session is created. * * This delegate should be configured in session configuration so when initializing it will use * right TimerService implementation: * <code> * Properties conf = new Properties(); * conf.setProperty("drools.timerService", "org.jbpm.process.core.timer.impl.RegisteredTimerServiceDelegate"); * KieSessionConfiguration sessionConf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(conf); * </code> * */ public class RegisteredTimerServiceDelegate implements TimerService, InternalSchedulerService, SessionClock { private TimerService timerService; public RegisteredTimerServiceDelegate() { this("default"); } public RegisteredTimerServiceDelegate(String timerServiceKey) { timerService = TimerServiceRegistry.getInstance().get(timerServiceKey); if (timerService == null) { throw new IllegalStateException("TimerService with key " + timerServiceKey + " was not found in the registry"); } } @Override public JobHandle scheduleJob(Job job, JobContext ctx, Trigger trigger) { return timerService.scheduleJob(job, ctx, trigger); } @Override public boolean removeJob(JobHandle jobHandle) { return timerService.removeJob(jobHandle); } @Override public void setTimerJobFactoryManager( TimerJobFactoryManager timerJobFactoryManager) { timerService.setTimerJobFactoryManager(timerJobFactoryManager); } @Override public TimerJobFactoryManager getTimerJobFactoryManager() { return timerService.getTimerJobFactoryManager(); } @Override public void internalSchedule(TimerJobInstance timerJobInstance) { ((InternalSchedulerService)timerService).internalSchedule(timerJobInstance); } @Override public long getCurrentTime() { return timerService.getCurrentTime(); } @Override public void shutdown() { timerService.shutdown(); } @Override public long getTimeToNextJob() { return timerService.getTimeToNextJob(); } @Override public Collection<TimerJobInstance> getTimerJobInstances(long id) { return timerService.getTimerJobInstances(id); } }