Skip to content

Commit 80ceac5

Browse files
committed
made the interfaces simpler
1 parent 39cdf0e commit 80ceac5

File tree

19 files changed

+121
-203
lines changed

19 files changed

+121
-203
lines changed

core/src/main/java/org/sterl/spring/persistent_tasks/api/event/TriggerTaskCommand.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ public static <T extends Serializable> TriggerTaskCommand<T> of(String name, T s
2424
.state(state)
2525
.build()));
2626
}
27+
28+
public static <T extends Serializable> TriggerTaskCommand<T> of(String name, T state, String correlationId) {
29+
return new TriggerTaskCommand<>(Collections.singleton(TriggerBuilder
30+
.<T>newTrigger(name)
31+
.state(state)
32+
.correlationId(correlationId)
33+
.build()));
34+
}
2735

2836
public static <T extends Serializable> TriggerTaskCommand<T> of(Collection<AddTriggerRequest<T>> triggers) {
2937
return new TriggerTaskCommand<>(triggers);

core/src/main/java/org/sterl/spring/persistent_tasks/api/task/ComplexPersistentTask.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

core/src/main/java/org/sterl/spring/persistent_tasks/api/task/ComplexTransactionalTask.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

core/src/main/java/org/sterl/spring/persistent_tasks/api/task/PersistentTask.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.Serializable;
44

55
import org.springframework.lang.Nullable;
6+
import org.sterl.spring.persistent_tasks.api.RetryStrategy;
67
import org.sterl.spring.persistent_tasks.api.Trigger;
78

89
/**
@@ -14,6 +15,40 @@
1415
* @param <T> the type of the state, which must be {@link Serializable}
1516
*/
1617
@FunctionalInterface
17-
public interface PersistentTask<T extends Serializable> extends PersistentTaskBase<T> {
18+
public interface PersistentTask<T extends Serializable> {
19+
20+
/**
21+
* Called during the task execution with the stored state.
22+
* <ul>
23+
* <li>
24+
* {@link RunningTriggerContextHolder} can be used to access the full state.
25+
* </li>
26+
* <li>
27+
* Fire {@link org.sterl.spring.persistent_tasks.api.event.TriggerTaskCommand} events to schedule new tasks.
28+
* </li>
29+
* <li>
30+
* Consider to use a {@link TransactionalTask} in case the triggers or the state should be written together in one transaction.
31+
* </li>
32+
* </ul>
33+
* @param state the state of this trigger, can be <code>null</code>
34+
*/
1835
void accept(@Nullable T state);
36+
37+
default RetryStrategy retryStrategy() {
38+
return RetryStrategy.THREE_RETRIES;
39+
}
40+
41+
/**
42+
* Whether the persistentTask is transaction or not. If <code>true</code> the execution
43+
* is wrapped into the default transaction template together with the state update
44+
* and the following events:
45+
* <ol>
46+
* <li>org.sterl.spring.persistent_tasks.trigger.event.TriggerRunningEvent</li>
47+
* <li>org.sterl.spring.persistent_tasks.trigger.event.TriggerSuccessEvent</li>
48+
* </ol>
49+
* @return {@code true} if the persistentTask is transactional; {@code false} otherwise.
50+
*/
51+
default boolean isTransactional() {
52+
return false;
53+
}
1954
}

core/src/main/java/org/sterl/spring/persistent_tasks/api/task/PersistentTaskBase.java

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
package org.sterl.spring.persistent_tasks.trigger;
1+
package org.sterl.spring.persistent_tasks.api.task;
22

33
import java.io.Serializable;
44
import java.util.Objects;
55
import java.util.UUID;
66

7-
import org.sterl.spring.persistent_tasks.api.task.RunningTrigger;
8-
97
/**
108
* The {@link RunningTrigger} state will be provided by this context holder to any thread.
119
* Furthermore the correlationId of this context is preferred if a context is found.

core/src/main/java/org/sterl/spring/persistent_tasks/scheduler/SchedulerService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ public <T extends Serializable> TriggerKey runOrQueue(AddTriggerRequest<T> trigg
143143
trigger = triggerService.markTriggersAsRunning(trigger, name);
144144
pingRegistry().addRunning(1);
145145
shouldRun.put(trigger.getId(), trigger);
146+
log.debug("{} added for immediate execution, waitng for commit on={}", trigger.getKey(), name);
146147
} else {
147148
log.debug("Currently not enough free thread available {} of {} in use. PersistentTask {} queued.",
148149
taskExecutor.getFreeThreads(), taskExecutor.getMaxThreads(), trigger.getKey());
@@ -156,8 +157,8 @@ public <T extends Serializable> TriggerKey runOrQueue(AddTriggerRequest<T> trigg
156157
void checkIfTrigerIsRunning(TriggerAddedEvent addedTrigger) {
157158
final var toRun = shouldRun.remove(addedTrigger.id());
158159
if (toRun != null) {
159-
log.debug("New triger added for imidiate execution {}", addedTrigger.key());
160160
taskExecutor.submit(toRun);
161+
log.debug("{} immediately started on={}.", addedTrigger.key(), name);
161162
}
162163
// TODO implement a cleanup for old pending triggers which may never been triggered!
163164
}

core/src/main/java/org/sterl/spring/persistent_tasks/task/TaskService.java

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
import java.util.function.Consumer;
77

88
import org.springframework.lang.NonNull;
9+
import org.springframework.lang.Nullable;
910
import org.springframework.stereotype.Service;
1011
import org.springframework.transaction.support.TransactionTemplate;
1112
import org.sterl.spring.persistent_tasks.api.TaskId;
12-
import org.sterl.spring.persistent_tasks.api.task.ComplexPersistentTask;
1313
import org.sterl.spring.persistent_tasks.api.task.PersistentTask;
14-
import org.sterl.spring.persistent_tasks.api.task.PersistentTaskBase;
1514
import org.sterl.spring.persistent_tasks.task.component.TaskTransactionComponent;
1615
import org.sterl.spring.persistent_tasks.task.repository.TaskRepository;
1716

@@ -28,78 +27,67 @@ public Set<TaskId<? extends Serializable>> findAllTaskIds() {
2827
return this.taskRepository.all();
2928
}
3029

31-
public <T extends Serializable> Optional<PersistentTaskBase<T>> get(TaskId<T> id) {
30+
public <T extends Serializable> Optional<PersistentTask<T>> get(TaskId<T> id) {
3231
return taskRepository.get(id);
3332
}
3433

3534
public <T extends Serializable> Optional<TransactionTemplate> getTransactionTemplate(
36-
PersistentTaskBase<T> task) {
35+
PersistentTask<T> task) {
3736
return taskTransactionComponent.getTransactionTemplate(task);
3837
}
3938

4039
/**
41-
* Check if the {@link PersistentTaskBase} is known or not.
40+
* Check if the {@link PersistentTask} is known or not.
4241
*
4342
* @param <T> the state type
44-
* @param id the {@link TaskId} of the {@link PersistentTaskBase}
43+
* @param id the {@link TaskId} of the {@link PersistentTask}
4544
* @throws IllegalStateException if the id is unknown
46-
* @return the {@link PersistentTaskBase} registered to the given id
45+
* @return the {@link PersistentTask} registered to the given id
4746
*/
4847
@NonNull
49-
public <T extends Serializable> PersistentTaskBase<T> assertIsKnown(@NonNull TaskId<T> id) {
48+
public <T extends Serializable> PersistentTask<T> assertIsKnown(@NonNull TaskId<T> id) {
5049
final var task = taskRepository.get(id);
5150
if (task.isEmpty()) {
52-
throw new IllegalStateException("PersistentTaskBase with ID " + id
51+
throw new IllegalStateException("PersistentTask with ID " + id
5352
+ " is unknown. Known tasks: " + taskRepository.all());
5453
}
5554
return task.get();
5655
}
5756

5857
/**
59-
* A way to manually register a PersistentTaskBase, usually better to use {@link PersistentTaskBase}.
58+
* A way to manually register a PersistentTask, usually better to use {@link PersistentTask}.
6059
*/
6160
public TaskId<Serializable> register(String name, Consumer<Serializable> task) {
6261
return register(name, new PersistentTask<Serializable>() {
62+
private static final long serialVersionUID = 1L;
6363
@Override
64-
public void accept(Serializable state) {
64+
public void accept(@Nullable Serializable state) {
6565
task.accept(state);
6666
}
6767
});
6868
}
6969
/**
70-
* A way to manually register a PersistentTaskBase, usually not needed as spring beans will be added automatically.
70+
* A way to manually register a PersistentTask, usually not needed as spring beans will be added automatically.
7171
*/
7272
@SuppressWarnings("unchecked")
73-
public <T extends Serializable> TaskId<T> register(String name, PersistentTaskBase<T> task) {
73+
public <T extends Serializable> TaskId<T> register(String name, PersistentTask<T> task) {
7474
var id = (TaskId<T>)TaskId.of(name);
7575
return register(id, task);
7676
}
7777
/**
78-
* A way to manually register a PersistentTaskBase, usually not needed as spring beans will be added automatically.
78+
* A way to manually register a PersistentTask, usually not needed as spring beans will be added automatically.
7979
*/
80-
public <T extends Serializable> TaskId<T> register(TaskId<T> id, PersistentTaskBase<T> task) {
81-
// init any transaction as needed
80+
public <T extends Serializable> TaskId<T> register(TaskId<T> id, PersistentTask<T> task) {
8281
taskTransactionComponent.getTransactionTemplate(task);
8382
return taskRepository.addTask(id, task);
8483
}
8584
/**
86-
* A way to manually register a PersistentTaskBase, usually not needed as spring beans will be added automatically.
85+
* A way to manually register a PersistentTask, usually not needed as spring beans will be added automatically.
8786
*/
8887
@SuppressWarnings("unchecked")
8988
public <T extends Serializable> TaskId<T> replace(String name, PersistentTask<T> task) {
9089
var id = (TaskId<T>)TaskId.of(name);
9190
taskRepository.remove(id);
9291
return register(id, task);
9392
}
94-
95-
/**
96-
* A way to manually register a PersistentTaskBase, usually not needed as spring beans will be added automatically.
97-
*/
98-
@SuppressWarnings("unchecked")
99-
public <T extends Serializable, R extends Serializable> TaskId<T> replaceComplex(String name,
100-
ComplexPersistentTask<T, R> task) {
101-
var id = (TaskId<T>)TaskId.of(name);
102-
taskRepository.remove(id);
103-
return register(id, task);
104-
}
10593
}

core/src/main/java/org/sterl/spring/persistent_tasks/task/component/TaskTransactionComponent.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.springframework.transaction.annotation.Transactional;
1414
import org.springframework.transaction.support.DefaultTransactionDefinition;
1515
import org.springframework.transaction.support.TransactionTemplate;
16-
import org.sterl.spring.persistent_tasks.api.task.PersistentTaskBase;
16+
import org.sterl.spring.persistent_tasks.api.task.PersistentTask;
1717
import org.sterl.spring.persistent_tasks.task.util.ReflectionUtil;
1818

1919
import lombok.RequiredArgsConstructor;
@@ -28,9 +28,9 @@ public class TaskTransactionComponent {
2828
private final TransactionTemplate template;
2929
private final Set<Propagation> joinTransaction = EnumSet.of(
3030
Propagation.MANDATORY, Propagation.REQUIRED, Propagation.SUPPORTS);
31-
private final Map<PersistentTaskBase<? extends Serializable>, Optional<TransactionTemplate>> cache = new ConcurrentHashMap<>();
31+
private final Map<PersistentTask<? extends Serializable>, Optional<TransactionTemplate>> cache = new ConcurrentHashMap<>();
3232

33-
public Optional<TransactionTemplate> getTransactionTemplate(PersistentTaskBase<? extends Serializable> task) {
33+
public Optional<TransactionTemplate> getTransactionTemplate(PersistentTask<? extends Serializable> task) {
3434
if (cache.containsKey(task)) return cache.get(task);
3535

3636
Optional<TransactionTemplate> result;
@@ -47,7 +47,7 @@ public Optional<TransactionTemplate> getTransactionTemplate(PersistentTaskBase<?
4747
return result;
4848
}
4949

50-
private TransactionTemplate builTransactionTemplate(PersistentTaskBase<? extends Serializable> task, Transactional annotation) {
50+
private TransactionTemplate builTransactionTemplate(PersistentTask<? extends Serializable> task, Transactional annotation) {
5151
TransactionTemplate result;
5252
if (joinTransaction.contains(annotation.propagation())) {
5353
// No direct mapping for 'rollbackFor' or 'noRollbackFor'

core/src/main/java/org/sterl/spring/persistent_tasks/task/config/TaskConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.springframework.context.annotation.Configuration;
88
import org.springframework.context.support.GenericApplicationContext;
99
import org.sterl.spring.persistent_tasks.api.TaskId;
10-
import org.sterl.spring.persistent_tasks.api.task.PersistentTaskBase;
10+
import org.sterl.spring.persistent_tasks.api.task.PersistentTask;
1111
import org.sterl.spring.persistent_tasks.task.TaskService;
1212

1313
import lombok.extern.slf4j.Slf4j;
@@ -19,8 +19,8 @@ public class TaskConfig {
1919
@Autowired
2020
void configureSimpleTasks(GenericApplicationContext context,
2121
TaskService taskService) {
22-
final var simpleTasks = context.getBeansOfType(PersistentTaskBase.class);
23-
for(Entry<String, PersistentTaskBase> t : simpleTasks.entrySet()) {
22+
final var simpleTasks = context.getBeansOfType(PersistentTask.class);
23+
for(Entry<String, PersistentTask> t : simpleTasks.entrySet()) {
2424
var id = taskService.register(t.getKey(), t.getValue());
2525

2626
addTaskIdIfMissing(context, id);

0 commit comments

Comments
 (0)