#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
|
||||
// to provide a fully initialized TaskanaEngine instance during the SPI initialization!
|
||||
priorityServiceManager = new PriorityServiceManager();
|
||||
createTaskPreprocessorManager = new CreateTaskPreprocessorManager();
|
||||
priorityServiceManager = new PriorityServiceManager(this);
|
||||
historyEventManager = new HistoryEventManager(this);
|
||||
taskRoutingManager = new TaskRoutingManager(this);
|
||||
reviewRequiredManager = new ReviewRequiredManager(this);
|
||||
|
|
|
@ -8,6 +8,7 @@ import java.util.Set;
|
|||
import java.util.stream.Collectors;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.internal.util.LogSanitizer;
|
||||
import pro.taskana.common.internal.util.SpiLoader;
|
||||
import pro.taskana.spi.priority.api.PriorityServiceProvider;
|
||||
|
@ -18,9 +19,10 @@ public class PriorityServiceManager {
|
|||
private static final Logger LOGGER = LoggerFactory.getLogger(PriorityServiceManager.class);
|
||||
private final List<PriorityServiceProvider> priorityServiceProviders;
|
||||
|
||||
public PriorityServiceManager() {
|
||||
public PriorityServiceManager(TaskanaEngine taskanaEngine) {
|
||||
priorityServiceProviders = SpiLoader.load(PriorityServiceProvider.class);
|
||||
for (PriorityServiceProvider priorityProvider : priorityServiceProviders) {
|
||||
priorityProvider.initialize(taskanaEngine);
|
||||
LOGGER.info("Registered PriorityServiceProvider: {}", priorityProvider.getClass().getName());
|
||||
}
|
||||
if (priorityServiceProviders.isEmpty()) {
|
||||
|
|
Loading…
Reference in New Issue