From f4e97f6e4c6b6cfac9ddb734e17e8f38c445ff8c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jan 2024 15:34:39 +0100 Subject: [PATCH] [JBPM-10176] Detect creation of timers for notifications (#2283) (#2380) Co-authored-by: Alberto Fanjul Co-authored-by: Alberto Fanjul --- .../process/instance/timer/TimerManager.java | 17 ++++++++-------- .../task/impl/TaskDeadlinesServiceImpl.java | 20 ++++++++++++++++++- .../impl/util/DeadlineSchedulerHelper.java | 2 +- .../ejb/timer/EjbSchedulerService.java | 8 +------- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/jbpm-flow/src/main/java/org/jbpm/process/instance/timer/TimerManager.java b/jbpm-flow/src/main/java/org/jbpm/process/instance/timer/TimerManager.java index 0b4f07adb8..ebd61b9555 100644 --- a/jbpm-flow/src/main/java/org/jbpm/process/instance/timer/TimerManager.java +++ b/jbpm-flow/src/main/java/org/jbpm/process/instance/timer/TimerManager.java @@ -399,7 +399,7 @@ public static class ProcessJobContext implements JobContext { private JobHandle jobHandle; private Long sessionId; - private boolean newTimer; + private boolean isNew; public ProcessJobContext(final TimerInstance timer, final Trigger trigger, final Long processInstanceId, final InternalKnowledgeRuntime kruntime) { @@ -408,17 +408,17 @@ public ProcessJobContext(final TimerInstance timer, final Trigger trigger, final this.processInstanceId = processInstanceId; this.kruntime = kruntime; this.sessionId = timer.getSessionId(); - this.newTimer = true; + this.isNew = true; } public ProcessJobContext(final TimerInstance timer, final Trigger trigger, final Long processInstanceId, - final InternalKnowledgeRuntime kruntime, boolean newTimer) { + final InternalKnowledgeRuntime kruntime, boolean isNew) { this.timer = timer; this.trigger = trigger; this.processInstanceId = processInstanceId; this.kruntime = kruntime; this.sessionId = timer.getSessionId(); - this.newTimer = newTimer; + this.isNew = isNew; } public Long getProcessInstanceId() { @@ -457,9 +457,10 @@ public void setKnowledgeRuntime(InternalKnowledgeRuntime kruntime) { public InternalWorkingMemory getWorkingMemory() { return kruntime instanceof InternalWorkingMemory ? (InternalWorkingMemory)kruntime : null; } - - public boolean isNewTimer() { - return newTimer; + + @Override + public boolean isNew() { + return isNew; } } @@ -493,7 +494,7 @@ public void setParamaeters(Map paramaeters) { } @Override - public boolean isNewTimer() { + public boolean isNew() { return false; } diff --git a/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskDeadlinesServiceImpl.java b/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskDeadlinesServiceImpl.java index 163737a007..3562afb59e 100644 --- a/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskDeadlinesServiceImpl.java +++ b/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/TaskDeadlinesServiceImpl.java @@ -82,8 +82,15 @@ public void setPersistenceContext(TaskPersistenceContext persistenceContext) { this.persistenceContext = persistenceContext; } + public void scheduleNew(long taskId, long deadlineId, long delay, DeadlineType type) { + schedule(taskId, deadlineId, delay, type, true); + } public void schedule(long taskId, long deadlineId, long delay, DeadlineType type) { + schedule(taskId, deadlineId, delay, type, false); + } + + public void schedule(long taskId, long deadlineId, long delay, DeadlineType type, boolean isNew) { Task task = persistenceContext.findTask(taskId); String deploymentId = task.getTaskData().getDeploymentId(); @@ -99,7 +106,7 @@ public void schedule(long taskId, long deadlineId, long delay, DeadlineType type 0, null, null ) ; - JobHandle handle = timerService.scheduleJob(deadlineJob, new TaskDeadlineJobContext(deadlineJob.getId(), task.getTaskData().getProcessInstanceId(), deploymentId), trigger); + JobHandle handle = timerService.scheduleJob(deadlineJob, new TaskDeadlineJobContext(deadlineJob.getId(), task.getTaskData().getProcessInstanceId(), deploymentId, isNew), trigger); jobHandles.put(deadlineJob.getId(), handle); } else { @@ -363,13 +370,24 @@ private static class TaskDeadlineJobContext implements NamedJobContext { private String jobName; private Long processInstanceId; private String deploymentId; + private boolean isNew; public TaskDeadlineJobContext(String jobName, Long processInstanceId, String deploymentId) { + this(jobName, processInstanceId, deploymentId, false); + } + + public TaskDeadlineJobContext(String jobName, Long processInstanceId, String deploymentId, boolean isNew) { this.jobName = jobName; this.processInstanceId = processInstanceId; this.deploymentId = deploymentId; + this.isNew = isNew; } + @Override + public boolean isNew() { + return isNew; + } + @Override public void setJobHandle(JobHandle jobHandle) { this.jobHandle = jobHandle; diff --git a/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/util/DeadlineSchedulerHelper.java b/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/util/DeadlineSchedulerHelper.java index 276d3d20c4..95122592ab 100644 --- a/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/util/DeadlineSchedulerHelper.java +++ b/jbpm-human-task/jbpm-human-task-core/src/main/java/org/jbpm/services/task/impl/util/DeadlineSchedulerHelper.java @@ -138,7 +138,7 @@ public static void scheduleDeadlines(final List deadlines, f for (Deadline deadline : deadlines) { if (Boolean.FALSE.equals(deadline.isEscalated())) { Date date = deadline.getDate(); - deadlineService.schedule(taskId, deadline.getId(), date.getTime() - now, type); + deadlineService.scheduleNew(taskId, deadline.getId(), date.getTime() - now, type); } } } diff --git a/jbpm-services/jbpm-services-ejb/jbpm-services-ejb-timer/src/main/java/org/jbpm/services/ejb/timer/EjbSchedulerService.java b/jbpm-services/jbpm-services-ejb/jbpm-services-ejb-timer/src/main/java/org/jbpm/services/ejb/timer/EjbSchedulerService.java index ebcf8183a4..0b0a7be72b 100644 --- a/jbpm-services/jbpm-services-ejb/jbpm-services-ejb-timer/src/main/java/org/jbpm/services/ejb/timer/EjbSchedulerService.java +++ b/jbpm-services/jbpm-services-ejb/jbpm-services-ejb-timer/src/main/java/org/jbpm/services/ejb/timer/EjbSchedulerService.java @@ -47,7 +47,6 @@ import org.jbpm.process.core.timer.impl.DelegateSchedulerServiceInterceptor; import org.jbpm.process.core.timer.impl.GlobalTimerService; import org.jbpm.process.core.timer.impl.GlobalTimerService.GlobalJobHandle; -import org.jbpm.process.instance.timer.TimerManager.ProcessJobContext; import org.jbpm.runtime.manager.impl.jpa.EntityManagerFactoryManager; import org.jbpm.runtime.manager.impl.jpa.TimerMappingInfo; import org.kie.internal.runtime.manager.InternalRuntimeManager; @@ -76,7 +75,7 @@ public JobHandle scheduleJob(Job job, JobContext ctx, Trigger trigger) { TimerJobInstance jobInstance = null; // check if given timer job is marked as new timer meaning it was never scheduled before, // if so skip the check by timer name as it has no way to exist - if (!isNewTimer(ctx)) { + if (!ctx.isNew()) { jobInstance = getTimerJobInstance(jobName); if (jobInstance == null) { jobInstance = scheduler.getTimerByName(jobName); @@ -245,9 +244,4 @@ public boolean isValid(GlobalJobHandle jobHandle) { protected String getJobName(JobContext ctx, long id) { return JobNameHelper.getJobName(ctx, id); } - - private boolean isNewTimer(JobContext ctx) { - return ctx instanceof ProcessJobContext && ((ProcessJobContext) ctx).isNewTimer(); - } - }