#2181: init PriorityServiceProviders during TaskanaEngine init
This commit is contained in:
parent
54bf3d8d69
commit
f6380c2d3c
|
@ -0,0 +1,66 @@
|
||||||
|
package acceptance;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.OptionalInt;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.TestInstance;
|
||||||
|
import org.junit.jupiter.api.TestInstance.Lifecycle;
|
||||||
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
|
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||||
|
import pro.taskana.spi.priority.api.PriorityServiceProvider;
|
||||||
|
import pro.taskana.spi.priority.internal.PriorityServiceManager;
|
||||||
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
|
import pro.taskana.testapi.TaskanaInject;
|
||||||
|
import pro.taskana.testapi.TaskanaIntegrationTest;
|
||||||
|
import pro.taskana.testapi.WithServiceProvider;
|
||||||
|
|
||||||
|
@TaskanaIntegrationTest
|
||||||
|
public class TaskanEngineInitalizationTest {
|
||||||
|
|
||||||
|
static class MyPriorityServiceProvider implements PriorityServiceProvider {
|
||||||
|
|
||||||
|
private TaskanaEngine taskanaEngine;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(TaskanaEngine taskanaEngine) {
|
||||||
|
this.taskanaEngine = taskanaEngine;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OptionalInt calculatePriority(TaskSummary taskSummary) {
|
||||||
|
return OptionalInt.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@TestInstance(Lifecycle.PER_CLASS)
|
||||||
|
@WithServiceProvider(
|
||||||
|
serviceProviderInterface = PriorityServiceProvider.class,
|
||||||
|
serviceProviders = MyPriorityServiceProvider.class)
|
||||||
|
class PriorityServiceManagerTest {
|
||||||
|
@TaskanaInject TaskanaEngineImpl taskanaEngine;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
void should_InitializePriorityServiceProviders() throws Exception {
|
||||||
|
PriorityServiceManager priorityServiceManager = taskanaEngine.getPriorityServiceManager();
|
||||||
|
Field priorityServiceProvidersField =
|
||||||
|
PriorityServiceManager.class.getDeclaredField("priorityServiceProviders");
|
||||||
|
priorityServiceProvidersField.setAccessible(true);
|
||||||
|
List<PriorityServiceProvider> serviceProviders =
|
||||||
|
(List<PriorityServiceProvider>) priorityServiceProvidersField.get(priorityServiceManager);
|
||||||
|
|
||||||
|
assertThat(priorityServiceManager.isEnabled()).isTrue();
|
||||||
|
assertThat(serviceProviders)
|
||||||
|
.asList()
|
||||||
|
.hasOnlyElementsOfType(MyPriorityServiceProvider.class)
|
||||||
|
.extracting(MyPriorityServiceProvider.class::cast)
|
||||||
|
.extracting(sp -> sp.taskanaEngine)
|
||||||
|
.containsOnly(taskanaEngine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -159,8 +159,8 @@ public class TaskanaEngineImpl implements TaskanaEngine {
|
||||||
|
|
||||||
// IMPORTANT: SPI has to be initialized last (and in this order) in order
|
// IMPORTANT: SPI has to be initialized last (and in this order) in order
|
||||||
// to provide a fully initialized TaskanaEngine instance during the SPI initialization!
|
// to provide a fully initialized TaskanaEngine instance during the SPI initialization!
|
||||||
priorityServiceManager = new PriorityServiceManager();
|
|
||||||
createTaskPreprocessorManager = new CreateTaskPreprocessorManager();
|
createTaskPreprocessorManager = new CreateTaskPreprocessorManager();
|
||||||
|
priorityServiceManager = new PriorityServiceManager(this);
|
||||||
historyEventManager = new HistoryEventManager(this);
|
historyEventManager = new HistoryEventManager(this);
|
||||||
taskRoutingManager = new TaskRoutingManager(this);
|
taskRoutingManager = new TaskRoutingManager(this);
|
||||||
reviewRequiredManager = new ReviewRequiredManager(this);
|
reviewRequiredManager = new ReviewRequiredManager(this);
|
||||||
|
|
|
@ -8,6 +8,7 @@ import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.internal.util.LogSanitizer;
|
import pro.taskana.common.internal.util.LogSanitizer;
|
||||||
import pro.taskana.common.internal.util.SpiLoader;
|
import pro.taskana.common.internal.util.SpiLoader;
|
||||||
import pro.taskana.spi.priority.api.PriorityServiceProvider;
|
import pro.taskana.spi.priority.api.PriorityServiceProvider;
|
||||||
|
@ -18,9 +19,10 @@ public class PriorityServiceManager {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(PriorityServiceManager.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(PriorityServiceManager.class);
|
||||||
private final List<PriorityServiceProvider> priorityServiceProviders;
|
private final List<PriorityServiceProvider> priorityServiceProviders;
|
||||||
|
|
||||||
public PriorityServiceManager() {
|
public PriorityServiceManager(TaskanaEngine taskanaEngine) {
|
||||||
priorityServiceProviders = SpiLoader.load(PriorityServiceProvider.class);
|
priorityServiceProviders = SpiLoader.load(PriorityServiceProvider.class);
|
||||||
for (PriorityServiceProvider priorityProvider : priorityServiceProviders) {
|
for (PriorityServiceProvider priorityProvider : priorityServiceProviders) {
|
||||||
|
priorityProvider.initialize(taskanaEngine);
|
||||||
LOGGER.info("Registered PriorityServiceProvider: {}", priorityProvider.getClass().getName());
|
LOGGER.info("Registered PriorityServiceProvider: {}", priorityProvider.getClass().getName());
|
||||||
}
|
}
|
||||||
if (priorityServiceProviders.isEmpty()) {
|
if (priorityServiceProviders.isEmpty()) {
|
||||||
|
|
Loading…
Reference in New Issue