Search in sources :

Example 6 with TimerService

use of org.drools.core.time.TimerService in project jbpm by kiegroup.

the class PerCaseRuntimeManager method disposeRuntimeEngine.

@Override
public void disposeRuntimeEngine(RuntimeEngine runtime) {
    if (isClosed()) {
        throw new IllegalStateException("Runtime manager " + identifier + " is already closed");
    }
    try {
        if (canDispose(runtime)) {
            removeLocalRuntime(runtime);
            Long ksessionId = ((RuntimeEngineImpl) runtime).getKieSessionId();
            releaseAndCleanLock(ksessionId, runtime);
            if (runtime instanceof Disposable) {
                // special handling for in memory to not allow to dispose if there is any context in the mapper
                if (mapper instanceof InMemoryMapper && ((InMemoryMapper) mapper).hasContext(ksessionId)) {
                    return;
                }
                ((Disposable) runtime).dispose();
            }
            if (ksessionId != null) {
                TimerService timerService = TimerServiceRegistry.getInstance().get(getIdentifier() + TimerServiceRegistry.TIMER_SERVICE_SUFFIX);
                if (timerService != null) {
                    if (timerService instanceof GlobalTimerService) {
                        ((GlobalTimerService) timerService).clearTimerJobInstances(ksessionId);
                    }
                }
            }
        }
    } catch (Exception e) {
        releaseAndCleanLock(runtime);
        removeLocalRuntime(runtime);
        throw new RuntimeException(e);
    }
}
Also used : Disposable(org.kie.internal.runtime.manager.Disposable) InMemoryMapper(org.jbpm.runtime.manager.impl.mapper.InMemoryMapper) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService) TimerService(org.drools.core.time.TimerService) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService)

Example 7 with TimerService

use of org.drools.core.time.TimerService in project jbpm by kiegroup.

the class PerProcessInstanceRuntimeManager method disposeRuntimeEngine.

@Override
public void disposeRuntimeEngine(RuntimeEngine runtime) {
    if (isClosed()) {
        throw new IllegalStateException("Runtime manager " + identifier + " is already closed");
    }
    try {
        if (canDispose(runtime)) {
            removeLocalRuntime(runtime);
            Long ksessionId = ((RuntimeEngineImpl) runtime).getKieSessionId();
            if (runtime instanceof Disposable) {
                // special handling for in memory to not allow to dispose if there is any context in the mapper
                if (mapper instanceof InMemoryMapper && ((InMemoryMapper) mapper).hasContext(ksessionId)) {
                    return;
                }
                ((Disposable) runtime).dispose();
            }
            if (ksessionId != null) {
                TimerService timerService = TimerServiceRegistry.getInstance().get(getIdentifier() + TimerServiceRegistry.TIMER_SERVICE_SUFFIX);
                if (timerService != null) {
                    if (timerService instanceof GlobalTimerService) {
                        ((GlobalTimerService) timerService).clearTimerJobInstances(ksessionId);
                    }
                }
            }
            releaseAndCleanLock(runtime);
        }
    } catch (Exception e) {
        releaseAndCleanLock(runtime);
        removeLocalRuntime(runtime);
        throw new RuntimeException(e);
    }
}
Also used : Disposable(org.kie.internal.runtime.manager.Disposable) InMemoryMapper(org.jbpm.runtime.manager.impl.mapper.InMemoryMapper) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService) TimerService(org.drools.core.time.TimerService) SessionNotFoundException(org.kie.internal.runtime.manager.SessionNotFoundException) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService)

Example 8 with TimerService

use of org.drools.core.time.TimerService in project jbpm by kiegroup.

the class PerRequestRuntimeManager method disposeRuntimeEngine.

@Override
public void disposeRuntimeEngine(RuntimeEngine runtime) {
    if (isClosed()) {
        throw new IllegalStateException("Runtime manager " + identifier + " is already closed");
    }
    try {
        if (canDispose(runtime)) {
            local.get().remove(identifier);
            try {
                Long ksessionId = ((RuntimeEngineImpl) runtime).getKieSessionId();
                factory.onDispose(ksessionId);
                if (canDestroy(runtime)) {
                    runtime.getKieSession().destroy();
                } else {
                    if (runtime instanceof Disposable) {
                        ((Disposable) runtime).dispose();
                    }
                }
                if (ksessionId != null) {
                    TimerService timerService = TimerServiceRegistry.getInstance().get(getIdentifier() + TimerServiceRegistry.TIMER_SERVICE_SUFFIX);
                    if (timerService != null) {
                        if (timerService instanceof GlobalTimerService) {
                            ((GlobalTimerService) timerService).clearTimerJobInstances(ksessionId);
                        }
                    }
                }
            } catch (Exception e) {
                // do nothing
                if (runtime instanceof Disposable) {
                    ((Disposable) runtime).dispose();
                }
            }
        }
    } catch (Exception e) {
        local.get().remove(identifier);
        throw new RuntimeException(e);
    }
}
Also used : Disposable(org.kie.internal.runtime.manager.Disposable) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService) TimerService(org.drools.core.time.TimerService) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService)

Example 9 with TimerService

use of org.drools.core.time.TimerService in project jbpm by kiegroup.

the class TaskDeadlinesServiceImpl method unschedule.

public void unschedule(long taskId, Deadline deadline, DeadlineType type) {
    Task task = persistenceContext.findTask(taskId);
    String deploymentId = task.getTaskData().getDeploymentId();
    Deadlines deadlines = ((InternalTask) task).getDeadlines();
    TimerService timerService = TimerServiceRegistry.getInstance().get(deploymentId + TimerServiceRegistry.TIMER_SERVICE_SUFFIX);
    if (timerService != null && timerService instanceof GlobalTimerService) {
        TaskDeadlineJob deadlineJob = new TaskDeadlineJob(taskId, deadline.getId(), type, deploymentId, task.getTaskData().getProcessInstanceId());
        logger.debug("unscheduling timer job for deadline {} {} and task {}  using timer service {}", deadlineJob.getId(), deadline.getId(), taskId, timerService);
        JobHandle jobHandle = jobHandles.remove(deadlineJob.getId());
        if (jobHandle == null) {
            jobHandle = ((GlobalTimerService) timerService).buildJobHandleForContext(new TaskDeadlineJobContext(deadlineJob.getId(), task.getTaskData().getProcessInstanceId(), deploymentId));
        }
        timerService.removeJob(jobHandle);
        // mark the deadlines so they won't be rescheduled again
        deadline.setEscalated(true);
    }
}
Also used : JobHandle(org.drools.core.time.JobHandle) Task(org.kie.api.task.model.Task) InternalTask(org.kie.internal.task.api.model.InternalTask) Deadlines(org.kie.internal.task.api.model.Deadlines) InternalTask(org.kie.internal.task.api.model.InternalTask) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService) TimerService(org.drools.core.time.TimerService) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService)

Example 10 with TimerService

use of org.drools.core.time.TimerService in project jbpm by kiegroup.

the class TaskDeadlinesServiceImpl method schedule.

public void schedule(long taskId, long deadlineId, long delay, DeadlineType type) {
    Task task = persistenceContext.findTask(taskId);
    String deploymentId = task.getTaskData().getDeploymentId();
    TimerService timerService = TimerServiceRegistry.getInstance().get(deploymentId + TimerServiceRegistry.TIMER_SERVICE_SUFFIX);
    if (timerService != null && timerService instanceof GlobalTimerService) {
        TaskDeadlineJob deadlineJob = new TaskDeadlineJob(taskId, deadlineId, type, deploymentId, task.getTaskData().getProcessInstanceId());
        Trigger trigger = new IntervalTrigger(timerService.getCurrentTime(), null, null, -1, delay, 0, null, null);
        JobHandle handle = timerService.scheduleJob(deadlineJob, new TaskDeadlineJobContext(deadlineJob.getId(), task.getTaskData().getProcessInstanceId(), deploymentId), trigger);
        logger.debug("scheduling timer job for deadline {} and task {}  using timer service {}", deadlineJob.getId(), taskId, timerService);
        jobHandles.put(deadlineJob.getId(), handle);
    } else {
        ScheduledFuture<ScheduledTaskDeadline> scheduled = scheduler.schedule(new ScheduledTaskDeadline(taskId, deadlineId, type, deploymentId, task.getTaskData().getProcessInstanceId()), delay, TimeUnit.MILLISECONDS);
        List<ScheduledFuture<ScheduledTaskDeadline>> knownFutures = null;
        if (type == DeadlineType.START) {
            knownFutures = startScheduledTaskDeadlines.get(taskId);
        } else if (type == DeadlineType.END) {
            knownFutures = endScheduledTaskDeadlines.get(taskId);
        }
        if (knownFutures == null) {
            knownFutures = new CopyOnWriteArrayList<ScheduledFuture<ScheduledTaskDeadline>>();
        }
        knownFutures.add(scheduled);
        if (type == DeadlineType.START) {
            startScheduledTaskDeadlines.put(taskId, knownFutures);
        } else if (type == DeadlineType.END) {
            endScheduledTaskDeadlines.put(taskId, knownFutures);
        }
    }
}
Also used : Task(org.kie.api.task.model.Task) InternalTask(org.kie.internal.task.api.model.InternalTask) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService) TimerService(org.drools.core.time.TimerService) IntervalTrigger(org.drools.core.time.impl.IntervalTrigger) ScheduledFuture(java.util.concurrent.ScheduledFuture) JobHandle(org.drools.core.time.JobHandle) IntervalTrigger(org.drools.core.time.impl.IntervalTrigger) Trigger(org.drools.core.time.Trigger) GlobalTimerService(org.jbpm.process.core.timer.impl.GlobalTimerService)

Aggregations

TimerService (org.drools.core.time.TimerService)23 GlobalTimerService (org.jbpm.process.core.timer.impl.GlobalTimerService)11 Test (org.junit.Test)9 JobHandle (org.drools.core.time.JobHandle)5 RuntimeEngine (org.kie.api.runtime.manager.RuntimeEngine)5 ArrayList (java.util.ArrayList)4 Trigger (org.drools.core.time.Trigger)4 TimerJobInstance (org.drools.core.time.impl.TimerJobInstance)4 KieSession (org.kie.api.runtime.KieSession)4 ProcessInstance (org.kie.api.runtime.process.ProcessInstance)4 UserTransaction (javax.transaction.UserTransaction)3 SessionConfiguration (org.drools.core.SessionConfiguration)3 LeftTuple (org.drools.core.reteoo.LeftTuple)3 WorkflowProcessInstance (org.jbpm.workflow.instance.WorkflowProcessInstance)3 Task (org.kie.api.task.model.Task)3 Disposable (org.kie.internal.runtime.manager.Disposable)3 SessionNotFoundException (org.kie.internal.runtime.manager.SessionNotFoundException)3 HashMap (java.util.HashMap)2 List (java.util.List)2 Properties (java.util.Properties)2