From 251b9d0a1c2ac97bf0e609fa956c95e26e477ef7 Mon Sep 17 00:00:00 2001 From: zero88 Date: Thu, 14 Dec 2023 23:00:45 +0700 Subject: [PATCH] feat(#92): Rename Task to Job --- README.adoc | 24 +++++----- .../zero88/schedulerx/ExecutionContext.java | 6 +-- .../zero88/schedulerx/ExecutionResult.java | 18 ++++---- .../java/io/github/zero88/schedulerx/Job.java | 46 +++++++++++++++++++ .../io/github/zero88/schedulerx/JobData.java | 8 ++-- .../{TaskExecutor.java => JobExecutor.java} | 9 ++-- ...erties.java => JobExecutorProperties.java} | 20 ++++---- .../github/zero88/schedulerx/Scheduler.java | 14 +++--- .../zero88/schedulerx/SchedulerBuilder.java | 6 +-- .../zero88/schedulerx/SchedulerState.java | 2 +- .../schedulerx/SchedulingLogMonitor.java | 4 +- .../zero88/schedulerx/SchedulingMonitor.java | 6 +-- .../io/github/zero88/schedulerx/Task.java | 45 ------------------ .../schedulerx/impl/AbstractScheduler.java | 28 +++++------ .../impl/AbstractSchedulerBuilder.java | 10 ++-- .../schedulerx/impl/ExecutionContextImpl.java | 2 +- .../impl/ExecutionContextInternal.java | 2 +- .../impl/SchedulerStateInternal.java | 6 +-- .../schedulerx/trigger/CronScheduler.java | 2 +- .../trigger/CronSchedulerBuilder.java | 8 ++-- .../schedulerx/trigger/CronSchedulerImpl.java | 8 ++-- .../schedulerx/trigger/EventScheduler.java | 4 +- .../trigger/EventSchedulerBuilder.java | 8 ++-- .../trigger/EventSchedulerImpl.java | 8 ++-- .../schedulerx/trigger/IntervalScheduler.java | 2 +- .../trigger/IntervalSchedulerBuilder.java | 4 +- .../trigger/IntervalSchedulerImpl.java | 8 ++-- .../zero88/schedulerx/trigger/Trigger.java | 6 +-- .../schedulerx/trigger/TriggerCondition.java | 8 ++-- .../zero88/schedulerx/SchedulerTest.java | 26 +++++------ ...HttpClientTask.java => HttpClientJob.java} | 4 +- ...ntTaskTest.java => HttpClientJobTest.java} | 6 +-- .../schedulerx/trigger/CronSchedulerTest.java | 12 ++--- .../trigger/EventSchedulerTest.java | 14 +++--- .../trigger/IntervalSchedulerTest.java | 28 +++++------ .../trigger/rule/TriggerRuleTest.java | 1 - .../io/github/zero88/schedulerx/NoopJob.java | 21 +++++++++ .../io/github/zero88/schedulerx/NoopTask.java | 21 --------- .../schedulerx/SchedulingAsserterBuilder.java | 18 ++++---- .../JsonSchemaMessageFilterTest.java | 4 +- 40 files changed, 239 insertions(+), 238 deletions(-) create mode 100644 core/src/main/java/io/github/zero88/schedulerx/Job.java rename core/src/main/java/io/github/zero88/schedulerx/{TaskExecutor.java => JobExecutor.java} (65%) rename core/src/main/java/io/github/zero88/schedulerx/{TaskExecutorProperties.java => JobExecutorProperties.java} (74%) delete mode 100644 core/src/main/java/io/github/zero88/schedulerx/Task.java rename core/src/test/java/io/github/zero88/schedulerx/custom/{HttpClientTask.java => HttpClientJob.java} (92%) rename core/src/test/java/io/github/zero88/schedulerx/custom/{HttpClientTaskTest.java => HttpClientJobTest.java} (93%) create mode 100644 core/src/testFixtures/java/io/github/zero88/schedulerx/NoopJob.java delete mode 100644 core/src/testFixtures/java/io/github/zero88/schedulerx/NoopTask.java diff --git a/README.adoc b/README.adoc index 5512442..1260043 100644 --- a/README.adoc +++ b/README.adoc @@ -16,7 +16,7 @@ image:https://sonarcloud.io/api/project_badges/measure?project={sonarKey}&metric image:https://sonarcloud.io/api/project_badges/measure?project={sonarKey}&metric=security_rating[Security Rating,link=https://sonarcloud.io/dashboard?id={sonarKey}] image:https://sonarcloud.io/api/project_badges/measure?project={sonarKey}&metric=alert_status[Quality Gate Status,link=https://sonarcloud.io/dashboard?id={sonarKey}] -A `lightweight plugable scheduler` based on plain https://vertx.io/[Vert.x] core without any external libs for scheduling with _cron-style_ and _interval_ timers with a detail _monitor_ on both sync and async task. +A `lightweight plugable scheduler` based on plain https://vertx.io/[Vert.x] core without any external libs for scheduling with _cron-style_ and _interval_ timers with a detail _monitor_ on both sync and async job. * `Scheduling` with: * `cron-style` based on http://www.quartz-scheduler.org/[Quartz] - `Unix` cron expression and `timezone` available @@ -24,11 +24,11 @@ on `JVM` * `interval` with given `time interval`, given `initial delay time` and `repeating` a given number of times or repeating infinitely * able to `cancel` schedule event -* Support `synchronize` task and `async` task +* Support `synchronize` job and `async` job * Run on `vertx-worker-thread` or dedicated `vertx thread-pool` -* Monitor `executor event` includes `fire counting`, `fired round`, `event time`, `task result data`, `task error` on +* Monitor `executor event` includes `fire counting`, `fired round`, `event time`, `job result data`, `job error` on your need such as `on schedule`, `on misfire`, `on each round`, `on completed`, etc… -* Easy customize your `task` such as `HTTP client job`, `EventBus job`, `MQTT client job`, `database job`, etc… +* Easy customize your `job` such as `HTTP client job`, `EventBus job`, `MQTT client job`, `database job`, etc… == Usage @@ -62,7 +62,7 @@ api("io.github.zero88:schedulerx:1.0.0") IntervalTaskExecutor.builder() .vertx(vertx) .trigger(IntervalTrigger.builder().interval(1).repeat(10).build()) - .task((jobData, ctx) -> { + .job((jobData, ctx) -> { if(ctx.round()==5) { ctx.forceStopExecution(); } @@ -77,7 +77,7 @@ IntervalTaskExecutor.builder() CronTaskExecutor.builder() .vertx(vertx) .trigger(CronTrigger.builder().expression("0/5 * * ? * * *").build()) - .task((jobData, ctx) -> {}) + .job((jobData, ctx) -> {}) .build() .start(vertx.createSharedWorkerExecutor("TEST_CRON",3)); ---- @@ -97,7 +97,7 @@ public interface TaskExecutorLogMonitor extends TaskExecutorMonitor { @Override default void onUnableSchedule(@NotNull TaskResult result) { - LOGGER.error("Unable schedule task at [{}] due to error", result.unscheduledAt(), result.error()); + LOGGER.error("Unable schedule job at [{}] due to error", result.unscheduledAt(), result.error()); } @Override @@ -122,19 +122,19 @@ public interface TaskExecutorLogMonitor extends TaskExecutorMonitor { @Override default void onCompleted(@NotNull TaskResult result) { - LOGGER.debug("Completed task in round [{}] at [{}]", result.round(), result.completedAt()); + LOGGER.debug("Completed job in round [{}] at [{}]", result.round(), result.completedAt()); } } ---- -=== Custom task +=== Custom job Please check https://github.com/zero88/scheduler.x/blob/62d8feb265f45afad2626886c24f2899346f46b1/src/test/java/io/github/zero88/vertx/scheduler/custom/HttpClientTask.java[HttpClientTask] and its https://github.com/zero88/scheduler.x/blob/62d8feb265f45afad2626886c24f2899346f46b1/src/test/java/io/github/zero88/vertx/scheduler/custom/HttpClientTaskTest.java[test] -for `async` task +for `async` job [source,java] ---- @@ -178,13 +178,13 @@ public class HttpClientTask implements Task { == TODO -* [ ] Cron task with repeating until a given time / date +* [ ] Cron job with repeating until a given time / date * [ ] Async query job data in execution * [ ] Optimize `CronExpression` == Disclaim and Disclosure -This is lightweight module then I will not support for adding any rich function like `manage group of task/trigger` +This is lightweight module then I will not support for adding any rich function like `manage group of job/trigger` , `publish monitor event` by integrate with a fantastic client such as `Vertx EventBus`, etc… I'm planning to do it in `vertx-planner` project later. Stay a tune!!! diff --git a/core/src/main/java/io/github/zero88/schedulerx/ExecutionContext.java b/core/src/main/java/io/github/zero88/schedulerx/ExecutionContext.java index 0df408b..2ba0678 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/ExecutionContext.java +++ b/core/src/main/java/io/github/zero88/schedulerx/ExecutionContext.java @@ -11,7 +11,7 @@ /** * Represents for a runtime context per each execution round. * - * @param Type of task result data + * @param Type of job result data * @apiNote This interface is renamed from {@code TaskExecutionContext} since {@code 2.0.0} * @since 1.0.0 */ @@ -69,7 +69,7 @@ public interface ExecutionContext { * Notify finish an execution per each round with its result data * * @param data object data - * @apiNote if task is {@code async} then it should be invoked in handling async result stage + * @apiNote if job is {@code async} then it should be invoked in handling async result stage */ void complete(@Nullable OUT data); @@ -77,7 +77,7 @@ public interface ExecutionContext { * Notify finish an execution per each round with its error data * * @param throwable execution error - * @apiNote if task is {@code async} then it should be invoked in handling async result stage + * @apiNote if job is {@code async} then it should be invoked in handling async result stage */ void fail(@Nullable Throwable throwable); diff --git a/core/src/main/java/io/github/zero88/schedulerx/ExecutionResult.java b/core/src/main/java/io/github/zero88/schedulerx/ExecutionResult.java index e1c8d0c..82439d7 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/ExecutionResult.java +++ b/core/src/main/java/io/github/zero88/schedulerx/ExecutionResult.java @@ -78,7 +78,7 @@ public interface ExecutionResult { Instant triggeredAt(); /** - * Identify the trigger task that is started to execute at a clock time. + * Identify the trigger job that is started to execute at a clock time. * * @return executed at time * @see SchedulingMonitor#onEach(ExecutionResult) @@ -86,7 +86,7 @@ public interface ExecutionResult { Instant executedAt(); /** - * Identify the trigger tick time is already processed at a clock time, regardless its status is misfire or its task + * Identify the trigger tick time is already processed at a clock time, regardless its status is misfire or its job * is executed. * * @return finished at time @@ -113,7 +113,7 @@ public interface ExecutionResult { long tick(); /** - * The current number of times that the trigger's task is executed. + * The current number of times that the trigger's job is executed. * * @return the round * @apiNote The time at which the number of rounds is changed is {@link #triggeredAt()} @@ -121,28 +121,28 @@ public interface ExecutionResult { long round(); /** - * Task result data per each round or latest result data if trigger is completed. + * Job result data per each round or latest result data if trigger is completed. * - * @return task result data, might be null + * @return job result data, might be null */ @Nullable OUTPUT data(); /** - * Task result error per each round or latest result error if trigger is completed. + * Job result error per each round or latest result error if trigger is completed. * - * @return task result error, might be null + * @return job result error, might be null */ @Nullable Throwable error(); /** - * Identify task execution is error or not + * Identify Job execution is error or not * * @return {@code true} if error */ default boolean isError() { return Objects.nonNull(error()); } /** - * Identify task execution is timed out + * Identify Job execution is timed out * * @return {@code true} if timeout error */ diff --git a/core/src/main/java/io/github/zero88/schedulerx/Job.java b/core/src/main/java/io/github/zero88/schedulerx/Job.java new file mode 100644 index 0000000..991e3fc --- /dev/null +++ b/core/src/main/java/io/github/zero88/schedulerx/Job.java @@ -0,0 +1,46 @@ +package io.github.zero88.schedulerx; + +import org.jetbrains.annotations.NotNull; + +/** + * Represents for Job to run on each trigger time. + *

+ * It is ideal if your concrete class is a class that has a constructor without argument, which makes it easier to init + * a new job object in runtime via the configuration from an external system. + * + * @param Type of job input data + * @param Type of job result data + * @apiNote This interface is renamed from {@code Task} since {@code 2.0.0} + * @since 1.0.0 + */ +public interface Job { + + /** + * Identify job is async or not + *

+ * If async job, then in execution time, job must use {@link ExecutionContext#complete(Object)}} or {@link + * ExecutionContext#fail(Throwable)} when handling an async result + * + * @return true if it is async job + */ + default boolean isAsync() { + return false; + } + + /** + * Execute job. + *

+ * After executed job, please remember to: + *

    + *
  • set value in case of job is success via {@link ExecutionContext#complete(Object)}
  • + *
  • set error in case of job is failed via {@link ExecutionContext#fail(Throwable)}
  • + *
+ * + * @param jobData job data + * @param executionContext job execution context + * @see JobData + * @see ExecutionContext + */ + void execute(@NotNull JobData jobData, @NotNull ExecutionContext executionContext); + +} diff --git a/core/src/main/java/io/github/zero88/schedulerx/JobData.java b/core/src/main/java/io/github/zero88/schedulerx/JobData.java index 10e7137..17d962e 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/JobData.java +++ b/core/src/main/java/io/github/zero88/schedulerx/JobData.java @@ -6,7 +6,7 @@ import io.github.zero88.schedulerx.impl.Utils; /** - * Represents for a provider that supplies input data before the execution is started, and that will be sent to the task + * Represents for a provider that supplies input data before the execution is started, and that will be sent to the job * in runtime execution. * * @param Type of data @@ -19,16 +19,16 @@ public interface JobData { * Get an input data. *

* It might be a static input value or a preloaded value from an external system - * or a configuration to instruct how to get actual input data of the task in runtime execution. + * or a configuration to instruct how to get actual input data of the job in runtime execution. * * @return input data */ @Nullable T get(); /** - * Declares a unique id in an external system that will be propagated to the task result. + * Declares a unique id in an external system that will be propagated to the job result. *

- * That makes the integration between the task monitoring and the external system seamless and easier. + * That makes the integration between the job monitoring and the external system seamless and easier. * * @return an external id * @see ExecutionResult#externalId() diff --git a/core/src/main/java/io/github/zero88/schedulerx/TaskExecutor.java b/core/src/main/java/io/github/zero88/schedulerx/JobExecutor.java similarity index 65% rename from core/src/main/java/io/github/zero88/schedulerx/TaskExecutor.java rename to core/src/main/java/io/github/zero88/schedulerx/JobExecutor.java index c85e0eb..5ff5f12 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/TaskExecutor.java +++ b/core/src/main/java/io/github/zero88/schedulerx/JobExecutor.java @@ -4,14 +4,15 @@ import io.vertx.core.WorkerExecutor; /** - * Represents for an executor run a {@code task} in conditional loop. + * Represents for an executor run a {@code job} in conditional loop. * - * @param Type of task input data - * @param Type of task result data + * @param Type of job input data + * @param Type of job result data + * @apiNote This interface is renamed from {@code TaskExecutor} since {@code 2.0.0} * @since 1.0.0 */ @VertxGen(concrete = false) -public interface TaskExecutor extends TaskExecutorProperties { +public interface JobExecutor extends JobExecutorProperties { /** * Start and run in {@code Vertx worker thread pool} diff --git a/core/src/main/java/io/github/zero88/schedulerx/TaskExecutorProperties.java b/core/src/main/java/io/github/zero88/schedulerx/JobExecutorProperties.java similarity index 74% rename from core/src/main/java/io/github/zero88/schedulerx/TaskExecutorProperties.java rename to core/src/main/java/io/github/zero88/schedulerx/JobExecutorProperties.java index 2c0e284..1b607f2 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/TaskExecutorProperties.java +++ b/core/src/main/java/io/github/zero88/schedulerx/JobExecutorProperties.java @@ -8,17 +8,17 @@ import io.vertx.core.Vertx; /** - * Shared immutable fields between TaskExecutor and its builder. + * Shared immutable fields between JobExecutor and its builder. *

* This class is designed to internal usage, don't refer it in your code. * - * @param Type of task input data - * @param Type of task result data + * @param Type of job input data + * @param Type of job result data * @since 2.0.0 */ @Internal @VertxGen(concrete = false) -public interface TaskExecutorProperties { +public interface JobExecutorProperties { /** * Vertx @@ -28,22 +28,22 @@ public interface TaskExecutorProperties { @NotNull Vertx vertx(); /** - * Defines a task executor monitor + * Defines a job executor monitor * - * @return task executor monitor + * @return job executor monitor * @see SchedulingMonitor */ @GenIgnore(GenIgnore.PERMITTED_TYPE) @NotNull SchedulingMonitor monitor(); /** - * Task to execute per round + * Job to execute per round * - * @return task - * @see Task + * @return job + * @see Job */ @GenIgnore(GenIgnore.PERMITTED_TYPE) - @NotNull Task task(); + @NotNull Job job(); /** * Declares the job input data diff --git a/core/src/main/java/io/github/zero88/schedulerx/Scheduler.java b/core/src/main/java/io/github/zero88/schedulerx/Scheduler.java index 8ec63d0..7cb7a53 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/Scheduler.java +++ b/core/src/main/java/io/github/zero88/schedulerx/Scheduler.java @@ -6,17 +6,17 @@ import io.vertx.codegen.annotations.GenIgnore; /** - * A scheduler schedules a task to run based on a particular trigger. + * A scheduler schedules a job to run based on a particular trigger. * - * @param Type of Input Job data - * @param Type of task result data + * @param Type of Job input data + * @param Type of Job result data * @param Type of Trigger * @apiNote This interface is renamed from {@code TriggerTaskExecutor} since {@code 2.0.0} - * @see TaskExecutor + * @see JobExecutor * @see Trigger * @since 2.0.0 */ -public interface Scheduler extends TaskExecutor { +public interface Scheduler extends JobExecutor { /** * Trigger type @@ -26,11 +26,11 @@ public interface Scheduler extends TaskExecuto @NotNull TRIGGER trigger(); /** - * Execute task + * Execute job * * @param executionContext execution context */ @GenIgnore(GenIgnore.PERMITTED_TYPE) - void executeTask(ExecutionContext executionContext); + void executeJob(ExecutionContext executionContext); } diff --git a/core/src/main/java/io/github/zero88/schedulerx/SchedulerBuilder.java b/core/src/main/java/io/github/zero88/schedulerx/SchedulerBuilder.java index dd8e25e..4ef198e 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/SchedulerBuilder.java +++ b/core/src/main/java/io/github/zero88/schedulerx/SchedulerBuilder.java @@ -9,7 +9,7 @@ * Represents for the high level of a builder that construct {@code Scheduler} * * @param Type of job input data - * @param Type of task result data + * @param Type of job result data * @param Type of Trigger * @param Type of Scheduler * @param Type of Scheduler Builder @@ -19,13 +19,13 @@ */ public interface SchedulerBuilder, SELF extends SchedulerBuilder> - extends TaskExecutorProperties { + extends JobExecutorProperties { @NotNull TRIGGER trigger(); @NotNull SELF setVertx(@NotNull Vertx vertx); - @NotNull SELF setTask(@NotNull Task task); + @NotNull SELF setJob(@NotNull Job job); @NotNull SELF setTrigger(@NotNull TRIGGER trigger); diff --git a/core/src/main/java/io/github/zero88/schedulerx/SchedulerState.java b/core/src/main/java/io/github/zero88/schedulerx/SchedulerState.java index f2f5979..b0385f7 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/SchedulerState.java +++ b/core/src/main/java/io/github/zero88/schedulerx/SchedulerState.java @@ -8,7 +8,7 @@ /** * Represents for a management state of the execution lifecycle. * - * @param Type of task result data + * @param Type of job result data * @apiNote This interface is renamed from {@code TaskExecutorState} since {@code 2.0.0} * @since 2.0.0 */ diff --git a/core/src/main/java/io/github/zero88/schedulerx/SchedulingLogMonitor.java b/core/src/main/java/io/github/zero88/schedulerx/SchedulingLogMonitor.java index 9a687fb..41ef930 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/SchedulingLogMonitor.java +++ b/core/src/main/java/io/github/zero88/schedulerx/SchedulingLogMonitor.java @@ -10,9 +10,9 @@ import io.vertx.core.impl.logging.LoggerFactory; /** - * Represents for a log monitor that observes and do log on each lifecycle event of the task executor. + * Represents for a log monitor that observes and do log on each lifecycle event of the job executor. * - * @param Type of task result data + * @param Type of job result data * @apiNote This interface is renamed from {@code TaskExecutorLogMonitor} since {@code 2.0.0} * @since 2.0.0 */ diff --git a/core/src/main/java/io/github/zero88/schedulerx/SchedulingMonitor.java b/core/src/main/java/io/github/zero88/schedulerx/SchedulingMonitor.java index 02a9503..e58acda 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/SchedulingMonitor.java +++ b/core/src/main/java/io/github/zero88/schedulerx/SchedulingMonitor.java @@ -5,11 +5,11 @@ import io.github.zero88.schedulerx.trigger.Trigger; /** - * Represents for a monitor that watches lifecycle event in the task executor. + * Represents for a monitor that watches lifecycle event in the job executor. *

* It can be used to distribute and persist the execution result per each round to an external system. * - * @param Type of task result data + * @param Type of job result data * @apiNote This interface is renamed from {@code TaskExecutorMonitor} since {@code 2.0.0} * @see ExecutionResult * @since 2.0.0 @@ -35,7 +35,7 @@ public interface SchedulingMonitor { /** * This method is invoked when the executor misfires the execution. *

- * one reason is due to task is still running when trigger a new round execution + * one reason is due to job is still running when trigger a new round execution * * @param result the execution result */ diff --git a/core/src/main/java/io/github/zero88/schedulerx/Task.java b/core/src/main/java/io/github/zero88/schedulerx/Task.java deleted file mode 100644 index 2f224a1..0000000 --- a/core/src/main/java/io/github/zero88/schedulerx/Task.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.github.zero88.schedulerx; - -import org.jetbrains.annotations.NotNull; - -/** - * Represents for Task to run on each trigger time. - *

- * It is ideal if your concrete class is a class that has a constructor without argument, which makes it easier to init - * a new task object in runtime via the configuration from an external system. - * - * @param Type of task input data - * @param Type of task result data - * @since 1.0.0 - */ -public interface Task { - - /** - * Identify task is async or not - *

- * If async task, then in execution time, task must use {@link ExecutionContext#complete(Object)}} or {@link - * ExecutionContext#fail(Throwable)} when handling an async result - * - * @return true if it is async task - */ - default boolean isAsync() { - return false; - } - - /** - * Execute task. - *

- * After executed task, please remember to: - *

    - *
  • set value in case of task is success via {@link ExecutionContext#complete(Object)}
  • - *
  • set error in case of task is failed via {@link ExecutionContext#fail(Throwable)}
  • - *
- * - * @param jobData job data - * @param executionContext task execution context - * @see JobData - * @see ExecutionContext - */ - void execute(@NotNull JobData jobData, @NotNull ExecutionContext executionContext); - -} diff --git a/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractScheduler.java b/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractScheduler.java index 4acf4f5..0818835 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractScheduler.java +++ b/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractScheduler.java @@ -18,10 +18,10 @@ import io.github.zero88.schedulerx.ExecutionContext; import io.github.zero88.schedulerx.ExecutionResult; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.Scheduler; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutBlock; import io.github.zero88.schedulerx.TimeoutPolicy; import io.github.zero88.schedulerx.WorkerExecutorFactory; @@ -39,7 +39,7 @@ /** * The base scheduler * - * @param Type of task input data + * @param Type of job input data * @param Type of output data * @param Type of trigger */ @@ -53,7 +53,7 @@ public abstract class AbstractScheduler implements S private final @NotNull SchedulerStateInternal state; private final @NotNull SchedulingMonitor monitor; private final @NotNull JobData jobData; - private final @NotNull Task task; + private final @NotNull Job job; private final @NotNull T trigger; private final @NotNull TimeoutPolicy timeoutPolicy; private final Lock lock = new ReentrantLock(); @@ -62,13 +62,13 @@ public abstract class AbstractScheduler implements S private IllegalArgumentException invalidTrigger; protected AbstractScheduler(@NotNull Vertx vertx, @NotNull SchedulingMonitor monitor, - @NotNull JobData jobData, @NotNull Task task, @NotNull T trigger, + @NotNull JobData jobData, @NotNull Job job, @NotNull T trigger, @NotNull TimeoutPolicy timeoutPolicy) { this.vertx = vertx; this.monitor = monitor; - this.jobData = jobData; - this.task = task; - this.trigger = trigger; + this.jobData = jobData; + this.job = job; + this.trigger = trigger; this.timeoutPolicy = timeoutPolicy; this.state = new SchedulerStateImpl<>(); } @@ -83,7 +83,7 @@ protected AbstractScheduler(@NotNull Vertx vertx, @NotNull SchedulingMonitor jobData() { return this.jobData; } @Override - public final @NotNull Task task() { return this.task; } + public final @NotNull Job job() { return this.job; } @Override public @NotNull TimeoutPolicy timeoutPolicy() { return this.timeoutPolicy; } @@ -130,11 +130,11 @@ public final void start(WorkerExecutor workerExecutor) { } @Override - public final void executeTask(@NotNull ExecutionContext executionContext) { + public final void executeJob(@NotNull ExecutionContext executionContext) { try { log(executionContext.executedAt(), "On execute"); - task.execute(jobData(), executionContext); - if (!task.isAsync()) { + job.execute(jobData(), executionContext); + if (!job.isAsync()) { ((ExecutionContextInternal) executionContext).internalComplete(); } } catch (Exception ex) { @@ -181,7 +181,7 @@ protected final TriggerTransitionContext shouldRun(@NotNull TriggerTransitionCon return TriggerContextFactory.skip(kickOffContext, ReasonCode.ALREADY_STOPPED); } if (state.executing()) { - return TriggerContextFactory.skip(kickOffContext, ReasonCode.TASK_IS_RUNNING); + return TriggerContextFactory.skip(kickOffContext, ReasonCode.JOB_IS_RUNNING); } return evaluateTriggerRule(kickOffContext); } @@ -192,7 +192,7 @@ protected final TriggerTransitionContext shouldRun(@NotNull TriggerTransitionCon protected final TriggerTransitionContext shouldStop(@NotNull TriggerTransitionContext triggerContext, boolean isForceStop, long round) { if (isForceStop) { - return TriggerContextFactory.stop(triggerContext, ReasonCode.STOP_BY_TASK); + return TriggerContextFactory.stop(triggerContext, ReasonCode.STOP_BY_JOB); } return trigger().shouldStop(round) ? TriggerContextFactory.stop(triggerContext, ReasonCode.STOP_BY_CONFIG) @@ -248,7 +248,7 @@ protected final void onTrigger(WorkerExecutor workerExecutor, TriggerTransitionC final ExecutionContextInternal executionContext = new ExecutionContextImpl<>(vertx, triggerContext, state.increaseRound()); log(executionContext.triggeredAt(), "On trigger", triggerContext.tick(), executionContext.round()); - this.executeBlocking(workerExecutor, p -> executeTask( + this.executeBlocking(workerExecutor, p -> executeJob( executionContext.setup(wrapTimeout(timeoutPolicy().executionTimeout(), p)))) .onComplete(ar -> onResult(executionContext, ar.cause())); } diff --git a/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractSchedulerBuilder.java b/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractSchedulerBuilder.java index 7b18f0a..c7fb0a0 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractSchedulerBuilder.java +++ b/core/src/main/java/io/github/zero88/schedulerx/impl/AbstractSchedulerBuilder.java @@ -6,12 +6,12 @@ import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.Scheduler; import io.github.zero88.schedulerx.SchedulerBuilder; import io.github.zero88.schedulerx.SchedulingLogMonitor; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.github.zero88.schedulerx.trigger.Trigger; import io.vertx.core.Vertx; @@ -28,7 +28,7 @@ public abstract class AbstractSchedulerBuilder monitor; private JobData jobData; - private Task task; + private Job job; private T trigger; private TimeoutPolicy timeoutPolicy; @@ -46,7 +46,7 @@ public abstract class AbstractSchedulerBuilder task() { return Objects.requireNonNull(task, "Task is required"); } + public @NotNull Job job() { return Objects.requireNonNull(job, "Job is required"); } @Override public @NotNull JobData jobData() { return Optional.ofNullable(jobData).orElseGet(JobData::empty); } @@ -61,8 +61,8 @@ public abstract class AbstractSchedulerBuilder task) { - this.task = task; + public @NotNull B setJob(@NotNull Job job) { + this.job = job; return (B) this; } diff --git a/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextImpl.java b/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextImpl.java index f06e880..4d68fbf 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextImpl.java +++ b/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextImpl.java @@ -30,7 +30,7 @@ final class ExecutionContextImpl implements ExecutionContextInternal setup(@NotNull Promise promise) { if (Objects.nonNull(this.promise)) { - throw new IllegalStateException("TaskExecutionContext is already setup"); + throw new IllegalStateException("ExecutionContext is already setup"); } this.promise = promise; this.executedAt = Instant.now(); diff --git a/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextInternal.java b/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextInternal.java index f3a17e7..ca77d31 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextInternal.java +++ b/core/src/main/java/io/github/zero88/schedulerx/impl/ExecutionContextInternal.java @@ -11,7 +11,7 @@ interface ExecutionContextInternal extends ExecutionContext { @NotNull TriggerTransitionContext triggerContext(); /** - * Prepare to execute task + * Prepare to execute job * * @param promise promise * @return a reference to this for fluent API diff --git a/core/src/main/java/io/github/zero88/schedulerx/impl/SchedulerStateInternal.java b/core/src/main/java/io/github/zero88/schedulerx/impl/SchedulerStateInternal.java index 520e2ce..aee14e7 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/impl/SchedulerStateInternal.java +++ b/core/src/main/java/io/github/zero88/schedulerx/impl/SchedulerStateInternal.java @@ -55,7 +55,7 @@ interface SchedulerStateInternal extends SchedulerState { long increaseRound(); /** - * Add the task result data per round + * Add the job result data per round * * @param round round * @param data data @@ -64,10 +64,10 @@ interface SchedulerStateInternal extends SchedulerState { @Nullable OUTPUT addData(long round, @Nullable OUTPUT data); /** - * Add the task result error per round + * Add the job result error per round * * @param round round - * @param error error when executing task + * @param error error when executing job * @return current error, might be {@code null} */ @Nullable Throwable addError(long round, @Nullable Throwable error); diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/CronScheduler.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/CronScheduler.java index 0c383f8..d4932f5 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/CronScheduler.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/CronScheduler.java @@ -11,7 +11,7 @@ * A timebase scheduler supports the cron-like scheduling. * * @param Type of job input data - * @param Type of task result data + * @param Type of job result data * @see CronTrigger * @since 2.0.0 */ diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerBuilder.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerBuilder.java index bb71532..7001c4d 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerBuilder.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerBuilder.java @@ -2,10 +2,10 @@ import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.SchedulerBuilder; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.vertx.codegen.annotations.Fluent; import io.vertx.codegen.annotations.GenIgnore; @@ -15,8 +15,8 @@ /** * Represents a builder that constructs {@link CronScheduler} * - * @param Type of task input data - * @param Type of task result data + * @param Type of job input data + * @param Type of job result data * @since 2.0.0 */ @VertxGen @@ -31,7 +31,7 @@ public interface CronSchedulerBuilder @Fluent @GenIgnore(GenIgnore.PERMITTED_TYPE) - @NotNull CronSchedulerBuilder setTask(@NotNull Task task); + @NotNull CronSchedulerBuilder setJob(@NotNull Job job); @Fluent @GenIgnore(GenIgnore.PERMITTED_TYPE) diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerImpl.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerImpl.java index 8ec7668..e8e2b25 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerImpl.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/CronSchedulerImpl.java @@ -7,9 +7,9 @@ import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.github.zero88.schedulerx.impl.AbstractScheduler; import io.github.zero88.schedulerx.impl.AbstractSchedulerBuilder; @@ -24,8 +24,8 @@ final class CronSchedulerImpl extends AbstractScheduler monitor, @NotNull JobData jobData, - @NotNull Task task, @NotNull CronTrigger trigger, @NotNull TimeoutPolicy timeoutPolicy) { - super(vertx, monitor, jobData, task, trigger, timeoutPolicy); + @NotNull Job job, @NotNull CronTrigger trigger, @NotNull TimeoutPolicy timeoutPolicy) { + super(vertx, monitor, jobData, job, trigger, timeoutPolicy); } @Override @@ -56,7 +56,7 @@ static final class CronSchedulerBuilderImpl implements CronSchedulerBuilder { public @NotNull CronScheduler build() { - return new CronSchedulerImpl<>(vertx(), monitor(), jobData(), task(), trigger(), timeoutPolicy()); + return new CronSchedulerImpl<>(vertx(), monitor(), jobData(), job(), trigger(), timeoutPolicy()); } } diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/EventScheduler.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/EventScheduler.java index 0c51ca3..4895fee 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/EventScheduler.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/EventScheduler.java @@ -9,10 +9,10 @@ import io.vertx.core.eventbus.EventBus; /** - * An event-base scheduler that triggers to run a task when receive an event from specific {@code event-bus} address. + * An event-base scheduler that triggers to run a job when receive an event from specific {@code event-bus} address. * * @param Type of job input data - * @param Type of task result data + * @param Type of job result data * @param Type of event message * @see EventTrigger * @see EventBus diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerBuilder.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerBuilder.java index f9e01aa..c0eccfd 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerBuilder.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerBuilder.java @@ -2,10 +2,10 @@ import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.SchedulerBuilder; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.vertx.codegen.annotations.Fluent; import io.vertx.codegen.annotations.GenIgnore; @@ -15,8 +15,8 @@ /** * Represents a builder that constructs {@link EventScheduler} * - * @param Type of task input data - * @param Type of task result data + * @param Type of job input data + * @param Type of job result data * @param Type of event message * @since 2.0.0 */ @@ -32,7 +32,7 @@ public interface EventSchedulerBuilder @Fluent @GenIgnore(GenIgnore.PERMITTED_TYPE) - @NotNull EventSchedulerBuilder setTask(@NotNull Task task); + @NotNull EventSchedulerBuilder setJob(@NotNull Job job); @Fluent @GenIgnore(GenIgnore.PERMITTED_TYPE) diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerImpl.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerImpl.java index b8a1ff3..bbc7db9 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerImpl.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/EventSchedulerImpl.java @@ -7,9 +7,9 @@ import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.github.zero88.schedulerx.impl.AbstractScheduler; import io.github.zero88.schedulerx.impl.AbstractSchedulerBuilder; @@ -30,9 +30,9 @@ final class EventSchedulerImpl extends AbstractScheduler consumer; EventSchedulerImpl(@NotNull Vertx vertx, @NotNull SchedulingMonitor monitor, @NotNull JobData jobData, - @NotNull Task task, @NotNull EventTrigger trigger, + @NotNull Job job, @NotNull EventTrigger trigger, @NotNull TimeoutPolicy timeoutPolicy) { - super(vertx, monitor, jobData, task, trigger, timeoutPolicy); + super(vertx, monitor, jobData, job, trigger, timeoutPolicy); } @Override @@ -104,7 +104,7 @@ static final class EventSchedulerBuilderImpl // @formatter:on public @NotNull EventScheduler build() { - return new EventSchedulerImpl<>(vertx(), monitor(), jobData(), task(), trigger(), timeoutPolicy()); + return new EventSchedulerImpl<>(vertx(), monitor(), jobData(), job(), trigger(), timeoutPolicy()); } } diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalScheduler.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalScheduler.java index 8ee26ef..5e3695f 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalScheduler.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalScheduler.java @@ -11,7 +11,7 @@ * A timebase scheduler supports the interval schedules. * * @param Type of job input data - * @param Type of task result data + * @param Type of job result data * @see IntervalTrigger * @since 2.0.0 */ diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerBuilder.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerBuilder.java index fa70f7d..3d92aad 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerBuilder.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerBuilder.java @@ -2,10 +2,10 @@ import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.SchedulerBuilder; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.vertx.codegen.annotations.Fluent; import io.vertx.codegen.annotations.GenIgnore; @@ -30,7 +30,7 @@ public interface IntervalSchedulerBuilder @Fluent @GenIgnore(GenIgnore.PERMITTED_TYPE) - @NotNull IntervalSchedulerBuilder setTask(@NotNull Task task); + @NotNull IntervalSchedulerBuilder setJob(@NotNull Job job); @Fluent @GenIgnore(GenIgnore.PERMITTED_TYPE) diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerImpl.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerImpl.java index 9aa3370..b03d094 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerImpl.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerImpl.java @@ -6,9 +6,9 @@ import org.jetbrains.annotations.NotNull; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TimeoutPolicy; import io.github.zero88.schedulerx.impl.AbstractScheduler; import io.github.zero88.schedulerx.impl.AbstractSchedulerBuilder; @@ -22,9 +22,9 @@ final class IntervalSchedulerImpl extends AbstractScheduler { IntervalSchedulerImpl(@NotNull Vertx vertx, @NotNull SchedulingMonitor monitor, @NotNull JobData jobData, - @NotNull Task task, @NotNull IntervalTrigger trigger, + @NotNull Job job, @NotNull IntervalTrigger trigger, @NotNull TimeoutPolicy timeoutPolicy) { - super(vertx, monitor, jobData, task, trigger, timeoutPolicy); + super(vertx, monitor, jobData, job, trigger, timeoutPolicy); } protected @NotNull Future registerTimer(WorkerExecutor workerExecutor) { @@ -62,7 +62,7 @@ static final class IntervalSchedulerBuilderImpl // @formatter:on public @NotNull IntervalScheduler build() { - return new IntervalSchedulerImpl<>(vertx(), monitor(), jobData(), task(), trigger(), timeoutPolicy()); + return new IntervalSchedulerImpl<>(vertx(), monitor(), jobData(), job(), trigger(), timeoutPolicy()); } } diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/Trigger.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/Trigger.java index b628d67..efe8e7f 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/Trigger.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/Trigger.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import io.github.zero88.schedulerx.Task; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.trigger.repr.TriggerRepresentation; import io.github.zero88.schedulerx.trigger.repr.TriggerRepresentationServiceLoader; import io.github.zero88.schedulerx.trigger.rule.TriggerRule; @@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonValue; /** - * Represents for inspecting settings specific to a Trigger, which is used to fire a {@link Task} at given + * Represents for inspecting settings specific to a Trigger, which is used to fire a {@link Job} at given * moments in time. * * @since 1.0.0 @@ -46,7 +46,7 @@ public interface Trigger extends HasTriggerType, TriggerRepresentation { @NotNull Trigger validate(); /** - * Verify if the trigger time still appropriate to execute the task. + * Verify if the trigger time still appropriate to execute the job. *

* This method will be invoked right away before each execution round is started. * diff --git a/core/src/main/java/io/github/zero88/schedulerx/trigger/TriggerCondition.java b/core/src/main/java/io/github/zero88/schedulerx/trigger/TriggerCondition.java index de93a66..4098434 100644 --- a/core/src/main/java/io/github/zero88/schedulerx/trigger/TriggerCondition.java +++ b/core/src/main/java/io/github/zero88/schedulerx/trigger/TriggerCondition.java @@ -42,7 +42,7 @@ enum TriggerStatus { */ KICKOFF, /** - * Identify the trigger is satisfied every predicate then ready to execute the task + * Identify the trigger is satisfied every predicate then ready to execute the job */ READY, /** @@ -50,7 +50,7 @@ enum TriggerStatus { */ EXECUTED, /** - * Identify the trigger is skipped to execute the task + * Identify the trigger is skipped to execute the job */ SKIPPED, /** @@ -68,10 +68,10 @@ class ReasonCode { public static final String ALREADY_STOPPED = "TriggerIsAlreadyStopped"; public static final String CONDITION_IS_NOT_MATCHED = "ConditionIsNotMatched"; public static final String EVALUATION_TIMEOUT = "TriggerEvaluationTimeout"; - public static final String STOP_BY_TASK = "ForceStop"; + public static final String STOP_BY_JOB = "ForceStop"; public static final String STOP_BY_CONFIG = "StopByTriggerConfig"; public static final String STOP_BY_MANUAL = "ManualStop"; - public static final String TASK_IS_RUNNING = "TaskIsRunning"; + public static final String JOB_IS_RUNNING = "JobIsRunning"; public static final String UNEXPECTED_ERROR = "UnexpectedError"; private ReasonCode() { } diff --git a/core/src/test/java/io/github/zero88/schedulerx/SchedulerTest.java b/core/src/test/java/io/github/zero88/schedulerx/SchedulerTest.java index 58f91bc..b8d08fa 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/SchedulerTest.java +++ b/core/src/test/java/io/github/zero88/schedulerx/SchedulerTest.java @@ -48,7 +48,7 @@ void test_scheduler_should_start_only_once_time(Vertx vertx, VertxTestContext te final CronScheduler scheduler = CronScheduler.builder() .setVertx(vertx) .setTrigger(trigger) - .setTask(NoopTask.create(2)) + .setJob(NoopJob.create(2)) .setMonitor(asserter) .build(); @@ -65,18 +65,18 @@ void test_scheduler_should_start_only_once_time(Vertx vertx, VertxTestContext te } @Test - void test_scheduler_should_run_task_in_dedicated_thread(Vertx vertx, VertxTestContext testContext) { + void test_scheduler_should_run_job_in_dedicated_thread(Vertx vertx, VertxTestContext testContext) { final String threadName = "HELLO"; final WorkerExecutor worker = vertx.createSharedWorkerExecutor(threadName, 1); final SchedulingAsserter asserter = SchedulingAsserter.builder().setTestContext(testContext).build(); - final Task task = (d, ec) -> Assertions.assertEquals(threadName + "-0", - Thread.currentThread().getName()); + final Job job = (d, ec) -> Assertions.assertEquals(threadName + "-0", + Thread.currentThread().getName()); final IntervalTrigger trigger = IntervalTrigger.builder().interval(2).repeat(1).build(); IntervalScheduler.builder() .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(task) + .setJob(job) .build() .start(worker); } @@ -103,7 +103,7 @@ void test_scheduler_should_evaluate_trigger_in_dedicated_thread(Vertx vertx, Ver .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create(1)) + .setJob(NoopJob.create(1)) .build() .start(worker); vertx.eventBus().publish("dedicated.thread", "test"); @@ -111,7 +111,7 @@ void test_scheduler_should_evaluate_trigger_in_dedicated_thread(Vertx vertx, Ver @ParameterizedTest @MethodSource("provide_external_ids") - void test_scheduler_should_maintain_external_id_from_jobData_to_task_result(Object declaredId, Class typeOfId, + void test_scheduler_should_maintain_external_id_from_jobData_to_job_result(Object declaredId, Class typeOfId, Vertx vertx, VertxTestContext ctx) { final Consumer> ensureExternalIdIsSet = result -> { Assertions.assertNotNull(result.externalId()); @@ -132,7 +132,7 @@ void test_scheduler_should_maintain_external_id_from_jobData_to_task_result(Obje .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create()) + .setJob(NoopJob.create()) .setJobData(jobdata) .build() .start(); @@ -151,7 +151,7 @@ void test_scheduler_should_timeout_in_execution(Vertx vertx, VertxTestContext te .setTestContext(testContext) .setEach(timeoutAsserter) .build(); - final Task task = (jobData, executionContext) -> { + final Job job = (jobData, executionContext) -> { TestUtils.block(runningTime, testContext); Assertions.assertTrue(Thread.currentThread().getName().startsWith("scheduler.x-worker-thread")); }; @@ -159,7 +159,7 @@ void test_scheduler_should_timeout_in_execution(Vertx vertx, VertxTestContext te .setVertx(vertx) .setMonitor(asserter) .setTrigger(IntervalTrigger.builder().interval(5).repeat(1).build()) - .setTask(task) + .setJob(job) .setTimeoutPolicy(TimeoutPolicy.create(timeout)) .build() .start(); @@ -171,7 +171,7 @@ void test_scheduler_should_able_to_force_stop(Vertx vertx, VertxTestContext test Assertions.assertEquals(3, result.round()); Assertions.assertEquals(3, result.tick()); Assertions.assertTrue(result.triggerContext().isStopped()); - Assertions.assertEquals(ReasonCode.STOP_BY_TASK, result.triggerContext().condition().reasonCode()); + Assertions.assertEquals(ReasonCode.STOP_BY_JOB, result.triggerContext().condition().reasonCode()); }; final SchedulingAsserter asserter = SchedulingAsserter.builder() .setTestContext(testContext) @@ -182,7 +182,7 @@ void test_scheduler_should_able_to_force_stop(Vertx vertx, VertxTestContext test .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create(3)) + .setJob(NoopJob.create(3)) .build() .start(); } @@ -202,7 +202,7 @@ void test_scheduler_should_able_to_cancel_manually(Vertx vertx, VertxTestContext .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create()) + .setJob(NoopJob.create()) .build(); scheduler.start(); TestUtils.block(Duration.ofSeconds(3), testContext); diff --git a/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientTask.java b/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientJob.java similarity index 92% rename from core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientTask.java rename to core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientJob.java index 39f516b..87b41f0 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientTask.java +++ b/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientJob.java @@ -3,15 +3,15 @@ import org.jetbrains.annotations.NotNull; import io.github.zero88.schedulerx.ExecutionContext; +import io.github.zero88.schedulerx.Job; import io.github.zero88.schedulerx.JobData; -import io.github.zero88.schedulerx.Task; import io.vertx.core.Future; import io.vertx.core.Vertx; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpMethod; import io.vertx.core.json.JsonObject; -public class HttpClientTask implements Task { +public class HttpClientJob implements Job { @Override public boolean isAsync() { return true; } diff --git a/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientTaskTest.java b/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientJobTest.java similarity index 93% rename from core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientTaskTest.java rename to core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientJobTest.java index 5e750d1..9e5955c 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientTaskTest.java +++ b/core/src/test/java/io/github/zero88/schedulerx/custom/HttpClientJobTest.java @@ -17,10 +17,10 @@ import io.vertx.junit5.VertxTestContext; @ExtendWith(VertxExtension.class) -class HttpClientTaskTest { +class HttpClientJobTest { @Test - void test_http_task(Vertx vertx, VertxTestContext testContext) { + void test_http_job(Vertx vertx, VertxTestContext testContext) { final String host = "postman-echo.com"; final String path = "/get?foo1=bar1&foo2=bar2"; final Consumer> verification = result -> { @@ -38,7 +38,7 @@ void test_http_task(Vertx vertx, VertxTestContext testContext) { IntervalScheduler.builder() .setVertx(vertx) .setTrigger(trigger) - .setTask(new HttpClientTask()) + .setJob(new HttpClientJob()) .setMonitor(asserter) .setJobData(jobData) .build() diff --git a/core/src/test/java/io/github/zero88/schedulerx/trigger/CronSchedulerTest.java b/core/src/test/java/io/github/zero88/schedulerx/trigger/CronSchedulerTest.java index b765b6d..59d1b42 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/trigger/CronSchedulerTest.java +++ b/core/src/test/java/io/github/zero88/schedulerx/trigger/CronSchedulerTest.java @@ -7,9 +7,9 @@ import org.junit.jupiter.api.extension.ExtendWith; import io.github.zero88.schedulerx.ExecutionResult; -import io.github.zero88.schedulerx.NoopTask; +import io.github.zero88.schedulerx.Job; +import io.github.zero88.schedulerx.NoopJob; import io.github.zero88.schedulerx.SchedulingAsserter; -import io.github.zero88.schedulerx.Task; import io.vertx.core.Vertx; import io.vertx.junit5.VertxExtension; import io.vertx.junit5.VertxTestContext; @@ -24,14 +24,14 @@ void test_unable_schedule_due_to_wrong_expression(Vertx vertx, VertxTestContext CronScheduler.builder() .setVertx(vertx) .setTrigger(trigger) - .setTask(NoopTask.create()) + .setJob(NoopJob.create()) .setMonitor(SchedulingAsserter.unableScheduleAsserter(testContext)) .build() .start(); } @Test - void test_run_task_by_cron(Vertx vertx, VertxTestContext testContext) { + void test_run_job_by_cron(Vertx vertx, VertxTestContext testContext) { final Consumer> onSchedule = result -> { if (!result.isReschedule()) { Assertions.assertEquals(0, result.tick()); @@ -65,7 +65,7 @@ void test_run_task_by_cron(Vertx vertx, VertxTestContext testContext) { .setCompleted(onCompleted) .build(); final CronTrigger trigger = CronTrigger.builder().expression("0/2 * * ? * * *").build(); - final Task task = (jobData, ctx) -> { + final Job job = (jobData, ctx) -> { final long round = ctx.round(); if (round == 1) { throw new RuntimeException("throw in execution"); @@ -87,7 +87,7 @@ void test_run_task_by_cron(Vertx vertx, VertxTestContext testContext) { .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(task) + .setJob(job) .build() .start(); } diff --git a/core/src/test/java/io/github/zero88/schedulerx/trigger/EventSchedulerTest.java b/core/src/test/java/io/github/zero88/schedulerx/trigger/EventSchedulerTest.java index d7d1db3..437eb6a 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/trigger/EventSchedulerTest.java +++ b/core/src/test/java/io/github/zero88/schedulerx/trigger/EventSchedulerTest.java @@ -19,10 +19,10 @@ import org.junit.jupiter.params.provider.MethodSource; import io.github.zero88.schedulerx.ExecutionResult; -import io.github.zero88.schedulerx.NoopTask; +import io.github.zero88.schedulerx.Job; +import io.github.zero88.schedulerx.NoopJob; import io.github.zero88.schedulerx.SchedulingAsserter; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TestUtils; import io.github.zero88.schedulerx.trigger.TriggerCondition.ReasonCode; import io.github.zero88.schedulerx.trigger.predicate.EventTriggerPredicate; @@ -113,7 +113,7 @@ void test_event_trigger_misfire(EventTriggerPredicate predicate, List { @@ -123,7 +123,7 @@ void test_event_trigger_misfire(EventTriggerPredicate predicate, List> each = result -> { @@ -148,7 +148,7 @@ void test_run_task_when_receive_event(Vertx vertx, VertxTestContext testContext) .address(address) .predicate(EventTriggerPredicate.any()) .build(); - final Task task = (jobData, ctx) -> { + final Job job = (jobData, ctx) -> { final Object info = ctx.triggerContext().info(); final long round = ctx.round(); if (round == 1) { @@ -168,7 +168,7 @@ void test_run_task_when_receive_event(Vertx vertx, VertxTestContext testContext) .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(task) + .setJob(job) .build() .start(); for (int i = 0; i < totalRound; i++) { @@ -198,7 +198,7 @@ void test_event_trigger_can_handle_msg_with_various_datatype(Vertx vertx, VertxT .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create(totalEvent)) + .setJob(NoopJob.create(totalEvent)) .build() .start(); data.forEach(d -> { diff --git a/core/src/test/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerTest.java b/core/src/test/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerTest.java index aa787b8..ad92aae 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerTest.java +++ b/core/src/test/java/io/github/zero88/schedulerx/trigger/IntervalSchedulerTest.java @@ -15,10 +15,10 @@ import org.junit.jupiter.params.provider.MethodSource; import io.github.zero88.schedulerx.ExecutionResult; -import io.github.zero88.schedulerx.NoopTask; +import io.github.zero88.schedulerx.Job; +import io.github.zero88.schedulerx.NoopJob; import io.github.zero88.schedulerx.SchedulingAsserter; import io.github.zero88.schedulerx.SchedulingMonitor; -import io.github.zero88.schedulerx.Task; import io.github.zero88.schedulerx.TestUtils; import io.github.zero88.schedulerx.trigger.TriggerCondition.ReasonCode; import io.vertx.core.Vertx; @@ -43,20 +43,20 @@ private static Stream provide_invalid_interval() { @ParameterizedTest @MethodSource("provide_invalid_interval") @SuppressWarnings("java:S2699") - void test_run_task_unable_schedule_due_to_interval(IntervalTrigger trigger, String errorMsg, Vertx vertx, - VertxTestContext testContext) { + void test_unable_schedule_job_due_to_invalid_config(IntervalTrigger trigger, String errorMsg, Vertx vertx, + VertxTestContext testContext) { SchedulingMonitor asserter = SchedulingAsserter.unableScheduleAsserter(testContext, errorMsg); IntervalScheduler.builder() .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create()) + .setJob(NoopJob.create()) .build() .start(); } @Test - void test_run_task_after_delay(Vertx vertx, VertxTestContext ctx) { + void test_run_job_after_delay(Vertx vertx, VertxTestContext ctx) { final Consumer> onSchedule = result -> { Assertions.assertEquals(0, result.tick()); Assertions.assertEquals(0, result.round()); @@ -75,13 +75,13 @@ void test_run_task_after_delay(Vertx vertx, VertxTestContext ctx) { .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create()) + .setJob(NoopJob.create()) .build() .start(); } @Test - void test_run_blocking_task_in_the_end(Vertx vertx, VertxTestContext testContext) { + void test_run_blocking_job_till_the_end(Vertx vertx, VertxTestContext testContext) { final AtomicLong lastTickOnEach = new AtomicLong(); final Consumer> onEach = result -> { lastTickOnEach.set(result.tick()); @@ -94,7 +94,7 @@ void test_run_blocking_task_in_the_end(Vertx vertx, VertxTestContext testContext final Consumer> onMisfire = result -> { Assertions.assertTrue(result.tick() > result.round()); Assertions.assertTrue(result.tick() > lastTickOnEach.get()); - Assertions.assertEquals("TaskIsRunning", result.triggerContext().condition().reasonCode()); + Assertions.assertEquals("JobIsRunning", result.triggerContext().condition().reasonCode()); }; final Consumer> onComplete = result -> { Assertions.assertEquals(3, result.round()); @@ -113,13 +113,13 @@ void test_run_blocking_task_in_the_end(Vertx vertx, VertxTestContext testContext .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask((jobData, ctx) -> TestUtils.block(Duration.ofSeconds(3), testContext)) + .setJob((jobData, ctx) -> TestUtils.block(Duration.ofSeconds(3), testContext)) .build() .start(worker); } @Test - void test_task_should_be_executed_in_interval_trigger(Vertx vertx, VertxTestContext context) { + void test_job_should_be_executed_in_interval_trigger(Vertx vertx, VertxTestContext context) { final Consumer> onEach = result -> { if (result.round() < 3) { Assertions.assertTrue(result.isError()); @@ -138,7 +138,7 @@ void test_task_should_be_executed_in_interval_trigger(Vertx vertx, VertxTestCont .setTestContext(context) .setEach(onEach) .build(); - final Task task = (jobData, ctx) -> { + final Job job = (jobData, ctx) -> { final long round = ctx.round(); if (round == 1) { throw new IllegalArgumentException("throw in execution"); @@ -155,7 +155,7 @@ void test_task_should_be_executed_in_interval_trigger(Vertx vertx, VertxTestCont .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(task) + .setJob(job) .build() .start(); } @@ -175,7 +175,7 @@ void test_scheduler_should_be_stopped_when_reach_to_target_round(Vertx vertx, Ve .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create()) + .setJob(NoopJob.create()) .build() .start(); } diff --git a/core/src/test/java/io/github/zero88/schedulerx/trigger/rule/TriggerRuleTest.java b/core/src/test/java/io/github/zero88/schedulerx/trigger/rule/TriggerRuleTest.java index cdd4aab..cbd1ceb 100644 --- a/core/src/test/java/io/github/zero88/schedulerx/trigger/rule/TriggerRuleTest.java +++ b/core/src/test/java/io/github/zero88/schedulerx/trigger/rule/TriggerRuleTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.junitpioneer.jupiter.SetSystemProperty; import org.junitpioneer.jupiter.cartesian.ArgumentSets; import org.junitpioneer.jupiter.cartesian.CartesianTest; diff --git a/core/src/testFixtures/java/io/github/zero88/schedulerx/NoopJob.java b/core/src/testFixtures/java/io/github/zero88/schedulerx/NoopJob.java new file mode 100644 index 0000000..0cd648e --- /dev/null +++ b/core/src/testFixtures/java/io/github/zero88/schedulerx/NoopJob.java @@ -0,0 +1,21 @@ +package io.github.zero88.schedulerx; + +/** + * Represents for dummy job that do nothing + * + * @param Type of job input data + * @param Type of job result data + */ +public interface NoopJob extends Job { + + static Job create() { return (jobData, executionContext) -> { }; } + + static Job create(int stopAtRound) { + return (jobData, executionContext) -> { + if (executionContext.round() == stopAtRound) { + executionContext.forceStopExecution(); + } + }; + } + +} diff --git a/core/src/testFixtures/java/io/github/zero88/schedulerx/NoopTask.java b/core/src/testFixtures/java/io/github/zero88/schedulerx/NoopTask.java deleted file mode 100644 index 72625de..0000000 --- a/core/src/testFixtures/java/io/github/zero88/schedulerx/NoopTask.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.github.zero88.schedulerx; - -/** - * Represents for dummy task that do nothing - * - * @param Type of task input data - * @param Type of task result data - */ -public interface NoopTask extends Task { - - static Task create() { return (jobData, executionContext) -> { }; } - - static Task create(int stopAtRound) { - return (jobData, executionContext) -> { - if (executionContext.round() == stopAtRound) { - executionContext.forceStopExecution(); - } - }; - } - -} diff --git a/core/src/testFixtures/java/io/github/zero88/schedulerx/SchedulingAsserterBuilder.java b/core/src/testFixtures/java/io/github/zero88/schedulerx/SchedulingAsserterBuilder.java index 7195618..afb0f31 100644 --- a/core/src/testFixtures/java/io/github/zero88/schedulerx/SchedulingAsserterBuilder.java +++ b/core/src/testFixtures/java/io/github/zero88/schedulerx/SchedulingAsserterBuilder.java @@ -42,9 +42,9 @@ public SchedulingAsserterBuilder setLogMonitor(SchedulingMonitor } /** - * Set a task result verification when unable to schedule task + * Set a job result verification when unable to schedule job * - * @param unableSchedule a verification when unable to schedule task + * @param unableSchedule a verification when unable to schedule job * @return this for fluent API * @see ExecutionResult * @see SchedulingMonitor#onUnableSchedule(ExecutionResult)) @@ -55,9 +55,9 @@ public SchedulingAsserterBuilder setUnableSchedule(Consumer setSchedule(Consumer setMisfire(Consumer setEach(Consumer setCompleted(Consumer build() { return new SchedulingAsserter<>(testContext, logMonitor, unableSchedule, schedule, misfire, each, completed); diff --git a/ext/src/test/java/io/github/zero88/schedulerx/ext/trigger/predicate/JsonSchemaMessageFilterTest.java b/ext/src/test/java/io/github/zero88/schedulerx/ext/trigger/predicate/JsonSchemaMessageFilterTest.java index 6fffef8..f322a28 100644 --- a/ext/src/test/java/io/github/zero88/schedulerx/ext/trigger/predicate/JsonSchemaMessageFilterTest.java +++ b/ext/src/test/java/io/github/zero88/schedulerx/ext/trigger/predicate/JsonSchemaMessageFilterTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import io.github.zero88.schedulerx.ExecutionResult; -import io.github.zero88.schedulerx.NoopTask; +import io.github.zero88.schedulerx.NoopJob; import io.github.zero88.schedulerx.SchedulingAsserter; import io.github.zero88.schedulerx.SchedulingMonitor; import io.github.zero88.schedulerx.trigger.EventScheduler; @@ -74,7 +74,7 @@ void test_event_trigger_can_handle_msg_with_various_datatype(Vertx vertx, VertxT .setVertx(vertx) .setMonitor(asserter) .setTrigger(trigger) - .setTask(NoopTask.create(totalEvent)) + .setJob(NoopJob.create(totalEvent)) .build() .start(); data.forEach(d -> vertx.eventBus().publish(address, d));