TSK-1724: Change JobType from Enum to String

This commit is contained in:
Joerg Heffner 2021-08-30 09:24:42 +02:00 committed by gitgoodjhe
parent 38fbc66f7f
commit 5d08893a6b
18 changed files with 56 additions and 84 deletions

View File

@ -16,7 +16,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.api.TimeInterval;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
@ -144,8 +143,8 @@ public class HistoryCleanupJob extends AbstractTaskanaJob {
}
@Override
protected Type getType() {
return Type.HISTORY_CLEANUP_JOB;
protected String getType() {
return HistoryCleanupJob.class.getName();
}
private List<String> filterSameParentBusinessHistoryEventsQualifiedToClean(

View File

@ -17,14 +17,15 @@ import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.classification.internal.jobs.ClassificationChangedJob;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.internal.util.Pair;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.simplehistory.impl.jobs.HistoryCleanupJob;
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
import pro.taskana.task.internal.jobs.TaskRefreshJob;
@ExtendWith(JaasExtension.class)
class HistoryCleanupJobAccTest extends AbstractAccTest {
@ -378,11 +379,11 @@ class HistoryCleanupJobAccTest extends AbstractAccTest {
for (int i = 0; i < 10; i++) {
ScheduledJob job = new ScheduledJob();
job.setType(ScheduledJob.Type.HISTORY_CLEANUP_JOB);
job.setType(HistoryCleanupJob.class.getName());
taskanaEngine.getJobService().createJob(job);
job.setType(Type.TASK_REFRESH_JOB);
job.setType(TaskRefreshJob.class.getName());
taskanaEngine.getJobService().createJob(job);
job.setType(Type.CLASSIFICATION_CHANGED_JOB);
job.setType(ClassificationChangedJob.class.getName());
taskanaEngine.getJobService().createJob(job);
}
@ -392,7 +393,8 @@ class HistoryCleanupJobAccTest extends AbstractAccTest {
List<ScheduledJob> historyCleanupJobs =
jobsToRun.stream()
.filter(scheduledJob -> scheduledJob.getType().equals(Type.HISTORY_CLEANUP_JOB))
.filter(
scheduledJob -> scheduledJob.getType().equals(HistoryCleanupJob.class.getName()))
.collect(Collectors.toList());
HistoryCleanupJob.initializeSchedule(taskanaEngine);

View File

@ -589,7 +589,7 @@ public class ClassificationServiceImpl implements ClassificationService {
args.put(ClassificationChangedJob.SERVICE_LEVEL_CHANGED, String.valueOf(serviceLevelChanged));
ScheduledJob job = new ScheduledJob();
job.setArguments(args);
job.setType(ScheduledJob.Type.CLASSIFICATION_CHANGED_JOB);
job.setType(ClassificationChangedJob.class.getName());
taskanaEngine.getEngine().getJobService().createJob(job);
}
}

View File

@ -8,7 +8,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.api.exceptions.TaskanaException;
@ -16,10 +15,11 @@ import pro.taskana.common.internal.jobs.AbstractTaskanaJob;
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
import pro.taskana.common.internal.util.CollectionUtil;
import pro.taskana.task.internal.TaskServiceImpl;
import pro.taskana.task.internal.jobs.TaskRefreshJob;
/**
* This class executes a job of type {@linkplain
* pro.taskana.common.api.ScheduledJob.Type#CLASSIFICATION_CHANGED_JOB}.
* pro.taskana.classification.internal.jobs.ClassificationChangedJob}.
*/
public class ClassificationChangedJob extends AbstractTaskanaJob {
@ -58,8 +58,8 @@ public class ClassificationChangedJob extends AbstractTaskanaJob {
}
@Override
protected Type getType() {
return Type.CLASSIFICATION_CHANGED_JOB;
protected String getType() {
return ClassificationChangedJob.class.getName();
}
private void scheduleTaskRefreshJobs(List<String> affectedTaskIds) {
@ -82,7 +82,7 @@ public class ClassificationChangedJob extends AbstractTaskanaJob {
args.put(PRIORITY_CHANGED, Boolean.toString(priorityChanged));
args.put(SERVICE_LEVEL_CHANGED, Boolean.toString(serviceLevelChanged));
ScheduledJob job = new ScheduledJob();
job.setType(ScheduledJob.Type.TASK_REFRESH_JOB);
job.setType(TaskRefreshJob.class.getName());
job.setArguments(args);
taskanaEngineImpl.getJobService().createJob(job);
}

View File

@ -5,12 +5,6 @@ import java.time.temporal.ChronoUnit;
import java.util.Map;
import java.util.Objects;
import pro.taskana.classification.internal.jobs.ClassificationChangedJob;
import pro.taskana.task.internal.jobs.TaskCleanupJob;
import pro.taskana.task.internal.jobs.TaskRefreshJob;
import pro.taskana.task.internal.jobs.TaskUpdatePriorityJob;
import pro.taskana.workbasket.internal.jobs.WorkbasketCleanupJob;
/** This class holds all data that go into the Job table. */
public class ScheduledJob {
@ -22,7 +16,7 @@ public class ScheduledJob {
private State state;
private String lockedBy;
private Instant lockExpires;
private Type type;
private String type;
private int retryCount;
public ScheduledJob() {
@ -95,11 +89,11 @@ public class ScheduledJob {
this.arguments = arguments;
}
public Type getType() {
public String getType() {
return type;
}
public void setType(Type type) {
public void setType(String type) {
this.type = type;
}
@ -133,9 +127,9 @@ public class ScheduledJob {
&& Objects.equals(lockExpires, other.lockExpires)
&& Objects.equals(lockedBy, other.lockedBy)
&& Objects.equals(priority, other.priority)
&& Objects.equals(type, other.type)
&& retryCount == other.retryCount
&& state == other.state
&& type == other.type;
&& state == other.state;
}
@Override
@ -168,24 +162,4 @@ public class ScheduledJob {
READY,
FAILED
}
/** This enum controls the type of jobs. */
public enum Type {
CLASSIFICATION_CHANGED_JOB(ClassificationChangedJob.class.getName()),
TASK_REFRESH_JOB(TaskRefreshJob.class.getName()),
TASK_CLEANUP_JOB(TaskCleanupJob.class.getName()),
TASK_UPDATE_PRIORITY_JOB(TaskUpdatePriorityJob.class.getName()),
WORKBASKET_CLEANUP_JOB(WorkbasketCleanupJob.class.getName()),
HISTORY_CLEANUP_JOB("pro.taskana.simplehistory.impl.jobs.HistoryCleanupJob");
private final String clazz;
Type(String clazz) {
this.clazz = clazz;
}
public String getClazz() {
return clazz;
}
}
}

View File

@ -11,7 +11,6 @@ import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.internal.persistence.MapTypeHandler;
/** This class is the mybatis mapping of the JOB table. */
@ -71,5 +70,5 @@ public interface JobMapper {
void delete(ScheduledJob job);
@Delete(value = "DELETE FROM SCHEDULED_JOB WHERE TYPE = #{jobType}")
void deleteMultiple(Type jobType);
void deleteMultiple(String jobType);
}

View File

@ -8,7 +8,6 @@ import org.slf4j.LoggerFactory;
import pro.taskana.common.api.JobService;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
/** Controls all job activities. */
public class JobServiceImpl implements JobService {
@ -36,7 +35,7 @@ public class JobServiceImpl implements JobService {
return job;
}
public void deleteJobs(Type jobType) {
public void deleteJobs(String jobType) {
taskanaEngineImpl.executeInDatabaseConnection(() -> jobMapper.deleteMultiple(jobType));
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Deleted jobs of type: {}", jobType);

View File

@ -41,7 +41,7 @@ public abstract class AbstractTaskanaJob implements TaskanaJob {
return (TaskanaJob)
Thread.currentThread()
.getContextClassLoader()
.loadClass(job.getType().getClazz())
.loadClass(job.getType())
.getConstructors()[0]
.newInstance(engine, txProvider, job);
}
@ -54,7 +54,7 @@ public abstract class AbstractTaskanaJob implements TaskanaJob {
}
}
protected abstract ScheduledJob.Type getType();
protected abstract String getType();
protected abstract void execute() throws TaskanaException;

View File

@ -12,7 +12,6 @@ import org.slf4j.LoggerFactory;
import pro.taskana.common.api.BaseQuery.SortDirection;
import pro.taskana.common.api.BulkOperationResults;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.api.TimeInterval;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
@ -73,13 +72,13 @@ public class TaskCleanupJob extends AbstractTaskanaJob {
public static void initializeSchedule(TaskanaEngine taskanaEngine) {
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();
TaskCleanupJob job = new TaskCleanupJob(taskanaEngine, null, null);
jobService.deleteJobs(Type.TASK_CLEANUP_JOB);
jobService.deleteJobs(TaskCleanupJob.class.getName());
job.scheduleNextJob();
}
@Override
protected Type getType() {
return Type.TASK_CLEANUP_JOB;
protected String getType() {
return TaskCleanupJob.class.getName();
}
private List<TaskSummary> getTasksCompletedBefore(Instant untilDate) {

View File

@ -7,7 +7,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.api.exceptions.TaskanaException;
@ -15,7 +14,7 @@ import pro.taskana.common.internal.jobs.AbstractTaskanaJob;
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
import pro.taskana.task.internal.TaskServiceImpl;
/** This class executes a job of type {@linkplain ScheduledJob.Type#TASK_REFRESH_JOB}. */
/** This class executes a job of type {@linkplain pro.taskana.task.internal.jobs.TaskRefreshJob}. */
public class TaskRefreshJob extends AbstractTaskanaJob {
public static final String TASK_IDS = "taskIds";
@ -50,8 +49,8 @@ public class TaskRefreshJob extends AbstractTaskanaJob {
}
@Override
protected Type getType() {
return Type.TASK_REFRESH_JOB;
protected String getType() {
return TaskRefreshJob.class.getName();
}
@Override

View File

@ -6,7 +6,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.internal.JobServiceImpl;
@ -71,13 +70,13 @@ public class TaskUpdatePriorityJob extends AbstractTaskanaJob {
public static void initializeSchedule(TaskanaEngine taskanaEngine) {
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();
TaskUpdatePriorityJob job = new TaskUpdatePriorityJob(taskanaEngine);
jobService.deleteJobs(job.getType());
jobService.deleteJobs(TaskUpdatePriorityJob.class.getName());
job.scheduleNextJob();
}
@Override
protected Type getType() {
return Type.TASK_UPDATE_PRIORITY_JOB;
protected String getType() {
return TaskUpdatePriorityJob.class.getName();
}
@Override

View File

@ -7,7 +7,6 @@ import org.slf4j.LoggerFactory;
import pro.taskana.common.api.BaseQuery;
import pro.taskana.common.api.BulkOperationResults;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.api.exceptions.InvalidArgumentException;
import pro.taskana.common.api.exceptions.NotAuthorizedException;
@ -60,13 +59,13 @@ public class WorkbasketCleanupJob extends AbstractTaskanaJob {
public static void initializeSchedule(TaskanaEngine taskanaEngine) {
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();
WorkbasketCleanupJob job = new WorkbasketCleanupJob(taskanaEngine, null, null);
jobService.deleteJobs(job.getType());
jobService.deleteJobs(WorkbasketCleanupJob.class.getName());
job.scheduleNextJob();
}
@Override
protected Type getType() {
return Type.WORKBASKET_CLEANUP_JOB;
protected String getType() {
return WorkbasketCleanupJob.class.getName();
}
private List<String> getWorkbasketsMarkedForDeletion() {

View File

@ -21,6 +21,7 @@ import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.internal.JobServiceImpl;
import pro.taskana.common.internal.jobs.JobRunner;
import pro.taskana.common.internal.jobs.PlainJavaTransactionProvider;
import pro.taskana.task.internal.jobs.TaskCleanupJob;
class JobRunnerAccTest extends AbstractAccTest {
@ -79,7 +80,7 @@ class JobRunnerAccTest extends AbstractAccTest {
private ScheduledJob createJob(Instant firstDue) {
ScheduledJob job = new ScheduledJob();
job.setType(ScheduledJob.Type.TASK_CLEANUP_JOB);
job.setType(TaskCleanupJob.class.getName());
job.setDue(firstDue);
jobService.createJob(job);
return job;

View File

@ -19,8 +19,8 @@ import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.function.ThrowingConsumer;
import pro.taskana.classification.internal.jobs.ClassificationChangedJob;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.internal.JobMapper;
import pro.taskana.common.internal.JobServiceImpl;
import pro.taskana.common.internal.jobs.JobRunner;
@ -30,6 +30,7 @@ import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Task;
import pro.taskana.task.api.models.TaskSummary;
import pro.taskana.task.internal.jobs.TaskCleanupJob;
import pro.taskana.task.internal.jobs.TaskRefreshJob;
/** Acceptance test for all "jobs tasks runner" scenarios. */
@ExtendWith(JaasExtension.class)
@ -110,11 +111,11 @@ class TaskCleanupJobAccTest extends AbstractAccTest {
for (int i = 0; i < 10; i++) {
ScheduledJob job = new ScheduledJob();
job.setType(ScheduledJob.Type.TASK_CLEANUP_JOB);
job.setType(TaskCleanupJob.class.getName());
taskanaEngine.getJobService().createJob(job);
job.setType(Type.TASK_REFRESH_JOB);
job.setType(TaskRefreshJob.class.getName());
taskanaEngine.getJobService().createJob(job);
job.setType(Type.CLASSIFICATION_CHANGED_JOB);
job.setType(ClassificationChangedJob.class.getName());
taskanaEngine.getJobService().createJob(job);
}
@ -124,7 +125,7 @@ class TaskCleanupJobAccTest extends AbstractAccTest {
List<ScheduledJob> taskCleanupJobs =
jobsToRun.stream()
.filter(scheduledJob -> scheduledJob.getType().equals(Type.TASK_CLEANUP_JOB))
.filter(scheduledJob -> scheduledJob.getType().equals(TaskCleanupJob.class.getName()))
.collect(Collectors.toList());
TaskCleanupJob.initializeSchedule(taskanaEngine);
@ -172,7 +173,7 @@ class TaskCleanupJobAccTest extends AbstractAccTest {
Instant firstDue = Instant.now().truncatedTo(ChronoUnit.MILLIS);
ScheduledJob scheduledJob = new ScheduledJob();
scheduledJob.setType(ScheduledJob.Type.TASK_CLEANUP_JOB);
scheduledJob.setType(TaskCleanupJob.class.getName());
scheduledJob.setDue(firstDue);
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();

View File

@ -15,7 +15,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import pro.taskana.common.api.BaseQuery.SortDirection;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.exceptions.SystemException;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
@ -97,7 +96,7 @@ class TaskUpdatePriorityJobAccTest extends AbstractAccTest {
assertThat(getJobMapper().findJobsToRun(someTimeInTheFuture))
.hasSizeGreaterThanOrEqualTo(1)
.extracting(ScheduledJob::getType)
.contains(Type.TASK_UPDATE_PRIORITY_JOB);
.contains(TaskUpdatePriorityJob.class.getName());
}
@Test

View File

@ -10,14 +10,15 @@ import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import pro.taskana.classification.internal.jobs.ClassificationChangedJob;
import pro.taskana.common.api.BaseQuery;
import pro.taskana.common.api.ScheduledJob;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.test.security.JaasExtension;
import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.TaskState;
import pro.taskana.task.internal.jobs.TaskCleanupJob;
import pro.taskana.task.internal.jobs.TaskRefreshJob;
import pro.taskana.workbasket.api.WorkbasketService;
import pro.taskana.workbasket.api.models.WorkbasketSummary;
import pro.taskana.workbasket.internal.jobs.WorkbasketCleanupJob;
@ -95,11 +96,11 @@ class WorkbasketCleanupJobAccTest extends AbstractAccTest {
for (int i = 0; i < 10; i++) {
ScheduledJob job = new ScheduledJob();
job.setType(ScheduledJob.Type.WORKBASKET_CLEANUP_JOB);
job.setType(WorkbasketCleanupJob.class.getName());
taskanaEngine.getJobService().createJob(job);
job.setType(Type.TASK_REFRESH_JOB);
job.setType(TaskRefreshJob.class.getName());
taskanaEngine.getJobService().createJob(job);
job.setType(Type.CLASSIFICATION_CHANGED_JOB);
job.setType(ClassificationChangedJob.class.getName());
taskanaEngine.getJobService().createJob(job);
}
@ -109,7 +110,8 @@ class WorkbasketCleanupJobAccTest extends AbstractAccTest {
List<ScheduledJob> workbasketCleanupJobs =
jobsToRun.stream()
.filter(scheduledJob -> scheduledJob.getType().equals(Type.WORKBASKET_CLEANUP_JOB))
.filter(
scheduledJob -> scheduledJob.getType().equals(WorkbasketCleanupJob.class.getName()))
.collect(Collectors.toList());
WorkbasketCleanupJob.initializeSchedule(taskanaEngine);

View File

@ -21,6 +21,7 @@ import pro.taskana.common.test.security.WithAccessId;
import pro.taskana.task.api.TaskCustomField;
import pro.taskana.task.api.TaskService;
import pro.taskana.task.api.models.Task;
import pro.taskana.task.internal.jobs.TaskCleanupJob;
import pro.taskana.task.internal.models.TaskImpl;
import pro.taskana.workbasket.api.WorkbasketCustomField;
import pro.taskana.workbasket.api.WorkbasketPermission;
@ -181,7 +182,7 @@ class UpdateObjectsUseUtcTimeStampsAccTest extends AbstractAccTest {
resetDb(true);
ScheduledJob job = new ScheduledJob();
job.setArguments(Map.of("keyBla", "valueBla"));
job.setType(ScheduledJob.Type.TASK_CLEANUP_JOB);
job.setType(TaskCleanupJob.class.getName());
job.setDue(Instant.now().minus(Duration.ofHours(5)));
job.setLockExpires(Instant.now().minus(Duration.ofHours(5)));
JobService jobService = taskanaEngine.getJobService();

View File

@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import pro.taskana.common.api.ScheduledJob.Type;
import pro.taskana.common.api.TaskanaEngine;
import pro.taskana.common.internal.jobs.JobRunner;
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
@ -40,7 +39,7 @@ public class JobScheduler {
if (taskanaEngine.isHistoryEnabled()) {
Thread.currentThread()
.getContextClassLoader()
.loadClass(Type.HISTORY_CLEANUP_JOB.getClazz())
.loadClass("pro.taskana.simplehistory.impl.jobs.HistoryCleanupJob")
.getDeclaredMethod("initializeSchedule", TaskanaEngine.class)
.invoke(null, taskanaEngine);
}