diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiFactory.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiFactory.java new file mode 100644 index 000000000..b80e59c2f --- /dev/null +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiFactory.java @@ -0,0 +1,56 @@ +package dev.dsf.bpe.v2; + +import java.util.Objects; +import java.util.function.Supplier; + +import org.springframework.context.ApplicationContext; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import ca.uhn.fhir.context.FhirContext; +import dev.dsf.bpe.v2.config.ProxyConfig; +import dev.dsf.bpe.v2.service.CryptoService; +import dev.dsf.bpe.v2.service.DataLogger; +import dev.dsf.bpe.v2.service.DsfClientProvider; +import dev.dsf.bpe.v2.service.EndpointProvider; +import dev.dsf.bpe.v2.service.FhirClientConfigProvider; +import dev.dsf.bpe.v2.service.FhirClientProvider; +import dev.dsf.bpe.v2.service.MailService; +import dev.dsf.bpe.v2.service.MimeTypeService; +import dev.dsf.bpe.v2.service.OidcClientProvider; +import dev.dsf.bpe.v2.service.OrganizationProvider; +import dev.dsf.bpe.v2.service.QuestionnaireResponseHelper; +import dev.dsf.bpe.v2.service.ReadAccessHelper; +import dev.dsf.bpe.v2.service.TargetProvider; +import dev.dsf.bpe.v2.service.TaskHelper; +import dev.dsf.bpe.v2.service.process.ProcessAuthorizationHelper; + +public class ProcessPluginApiFactory implements Supplier +{ + private final ApplicationContext parentContext; + private final ProcessPluginDefinition processPluginDefinition; + + public ProcessPluginApiFactory(ProcessPluginDefinition processPluginDefinition, ApplicationContext parentContext) + { + this.processPluginDefinition = Objects.requireNonNull(processPluginDefinition, "processPluginDefinition"); + this.parentContext = Objects.requireNonNull(parentContext, "parentContext"); + } + + private T fromParent(Class t) + { + return parentContext.getBean(t); + } + + @Override + public ProcessPluginApi get() + { + return new ProcessPluginApiImpl(processPluginDefinition, fromParent(ProxyConfig.class), + fromParent(EndpointProvider.class), fromParent(FhirContext.class), fromParent(DsfClientProvider.class), + fromParent(FhirClientProvider.class), fromParent(FhirClientConfigProvider.class), + fromParent(OidcClientProvider.class), fromParent(MailService.class), fromParent(MimeTypeService.class), + fromParent(ObjectMapper.class), fromParent(OrganizationProvider.class), + fromParent(ProcessAuthorizationHelper.class), fromParent(QuestionnaireResponseHelper.class), + fromParent(ReadAccessHelper.class), fromParent(TaskHelper.class), fromParent(CryptoService.class), + fromParent(TargetProvider.class), fromParent(DataLogger.class)); + } +} \ No newline at end of file diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiImpl.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiImpl.java index adad45660..e9a88af38 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiImpl.java +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/ProcessPluginApiImpl.java @@ -26,6 +26,7 @@ public class ProcessPluginApiImpl implements ProcessPluginApi, InitializingBean { + private final ProcessPluginDefinition processPluginDefinition; private final ProxyConfig proxyConfig; private final EndpointProvider endpointProvider; private final FhirContext fhirContext; @@ -45,14 +46,16 @@ public class ProcessPluginApiImpl implements ProcessPluginApi, InitializingBean private final TargetProvider targetProvider; private final DataLogger dataLogger; - public ProcessPluginApiImpl(ProxyConfig proxyConfig, EndpointProvider endpointProvider, FhirContext fhirContext, - DsfClientProvider dsfClientProvider, FhirClientProvider fhirClientProvider, - FhirClientConfigProvider fhirClientConfigProvider, OidcClientProvider oidcClientProvider, - MailService mailService, MimeTypeService mimeTypeService, ObjectMapper objectMapper, - OrganizationProvider organizationProvider, ProcessAuthorizationHelper processAuthorizationHelper, + public ProcessPluginApiImpl(ProcessPluginDefinition processPluginDefinition, ProxyConfig proxyConfig, + EndpointProvider endpointProvider, FhirContext fhirContext, DsfClientProvider dsfClientProvider, + FhirClientProvider fhirClientProvider, FhirClientConfigProvider fhirClientConfigProvider, + OidcClientProvider oidcClientProvider, MailService mailService, MimeTypeService mimeTypeService, + ObjectMapper objectMapper, OrganizationProvider organizationProvider, + ProcessAuthorizationHelper processAuthorizationHelper, QuestionnaireResponseHelper questionnaireResponseHelper, ReadAccessHelper readAccessHelper, TaskHelper taskHelper, CryptoService cryptoService, TargetProvider targetProvider, DataLogger dataLogger) { + this.processPluginDefinition = processPluginDefinition; this.proxyConfig = proxyConfig; this.endpointProvider = endpointProvider; this.fhirContext = fhirContext; @@ -76,6 +79,7 @@ public ProcessPluginApiImpl(ProxyConfig proxyConfig, EndpointProvider endpointPr @Override public void afterPropertiesSet() throws Exception { + Objects.requireNonNull(processPluginDefinition, "processPluginDefinition"); Objects.requireNonNull(proxyConfig, "proxyConfig"); Objects.requireNonNull(endpointProvider, "endpointProvider"); Objects.requireNonNull(fhirContext, "fhirContext"); @@ -96,6 +100,12 @@ public void afterPropertiesSet() throws Exception Objects.requireNonNull(dataLogger, "dataLogger"); } + @Override + public ProcessPluginDefinition getProcessPluginDefinition() + { + return processPluginDefinition; + } + @Override public ProxyConfig getProxyConfig() { diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/plugin/ProcessPluginImpl.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/plugin/ProcessPluginImpl.java index 2d0b44c69..f5d77907a 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/plugin/ProcessPluginImpl.java +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/plugin/ProcessPluginImpl.java @@ -47,6 +47,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; import com.fasterxml.jackson.databind.ObjectMapper; @@ -61,6 +62,7 @@ import dev.dsf.bpe.api.plugin.ProcessPlugin; import dev.dsf.bpe.api.plugin.ProcessPluginFhirConfig; import dev.dsf.bpe.v2.ProcessPluginApi; +import dev.dsf.bpe.v2.ProcessPluginApiFactory; import dev.dsf.bpe.v2.ProcessPluginDefinition; import dev.dsf.bpe.v2.ProcessPluginDeploymentListener; import dev.dsf.bpe.v2.activity.Activity; @@ -92,11 +94,12 @@ public class ProcessPluginImpl extends AbstractProcessPlugin i private static final Logger logger = LoggerFactory.getLogger(ProcessPluginImpl.class); private final ProcessPluginDefinition processPluginDefinition; - private final ProcessPluginApi processPluginApi; private final Function variablesFactory; private final PluginMdc pluginMdc; + private final AtomicReference processPluginApi = new AtomicReference<>(); + private final AtomicReference fhirContext = new AtomicReference<>(); private final AtomicReference objectMapper = new AtomicReference<>(); public ProcessPluginImpl(ProcessPluginDefinition processPluginDefinition, int processPluginApiVersion, @@ -109,13 +112,61 @@ public ProcessPluginImpl(ProcessPluginDefinition processPluginDefinition, int pr MessageEndEvent.class, DefaultUserTaskListener.class); this.processPluginDefinition = processPluginDefinition; - processPluginApi = apiApplicationContext.getBean(ProcessPluginApi.class); variablesFactory = delegateExecution -> new VariablesImpl(delegateExecution, getObjectMapper()); pluginMdc = new PluginMdcImpl(processPluginApiVersion, processPluginDefinition.getName(), processPluginDefinition.getVersion(), jarFile.toString(), serverBaseUrl, variablesFactory); } + @Override + protected void customizeApplicationContext(AnnotationConfigApplicationContext context, + ApplicationContext parentContext) + { + context.registerBean("processPluginDefinition", ProcessPluginDefinition.class, () -> processPluginDefinition); + context.registerBean("api", ProcessPluginApi.class, + new ProcessPluginApiFactory(processPluginDefinition, parentContext)); + } + + private ProcessPluginApi getProcessPluginApi() + { + ProcessPluginApi entry = processPluginApi.get(); + if (entry == null) + { + ProcessPluginApi o = doGetProcessPluginApi(); + if (processPluginApi.compareAndSet(entry, o)) + return o; + else + return processPluginApi.get(); + } + else + return entry; + } + + private ProcessPluginApi doGetProcessPluginApi() + { + return getApplicationContext().getBean(ProcessPluginApi.class); + } + + private FhirContext getFhirContext() + { + FhirContext entry = fhirContext.get(); + if (entry == null) + { + FhirContext o = doGetFhirContext(); + if (fhirContext.compareAndSet(entry, o)) + return o; + else + return fhirContext.get(); + } + else + return entry; + } + + private FhirContext doGetFhirContext() + { + return getApplicationContext().getBean(FhirContext.class); + } + private ObjectMapper getObjectMapper() { ObjectMapper entry = objectMapper.get(); @@ -264,7 +315,7 @@ private IParser newJsonParser() private IParser newParser(Function parserFactor) { - IParser p = parserFactor.apply(processPluginApi.getFhirContext()); + IParser p = parserFactor.apply(getFhirContext()); p.setStripVersionsFromReferences(false); p.setOverrideResourceIdWithBundleEntryFullUrl(false); @@ -383,7 +434,7 @@ public JavaDelegate getMessageSendTask(String className, List SendTaskValues sendTaskValues = getSendTaskValues(fieldDeclarations, variableScope) .orElseThrow(noOrIncompleteFhirTaskFields("MessageSendTask", className)); - return new MessageSendTaskDelegate(processPluginApi, variablesFactory, target, sendTaskValues); + return new MessageSendTaskDelegate(getProcessPluginApi(), variablesFactory, target, sendTaskValues); } @Override @@ -393,7 +444,7 @@ public JavaDelegate getServiceTask(String className, List fiel ServiceTask target = get(ServiceTask.class, className); injectFields(target, fieldDeclarations, variableScope); - return new ServiceTaskDelegate(processPluginApi, variablesFactory, target); + return new ServiceTaskDelegate(getProcessPluginApi(), variablesFactory, target); } @Override @@ -406,7 +457,7 @@ public JavaDelegate getMessageEndEvent(String className, List SendTaskValues sendTaskValues = getSendTaskValues(fieldDeclarations, variableScope) .orElseThrow(noOrIncompleteFhirTaskFields("MessageEndEvent", className)); - return new MessageEndEventDelegate(processPluginApi, variablesFactory, target, sendTaskValues); + return new MessageEndEventDelegate(getProcessPluginApi(), variablesFactory, target, sendTaskValues); } @Override @@ -419,7 +470,8 @@ public JavaDelegate getMessageIntermediateThrowEvent(String className, List fie UserTaskListener target = get(UserTaskListener.class, className); ClassDelegateUtil.applyFieldDeclaration(fieldDeclarations, target); - return new UserTaskListenerDelegate(processPluginApi, variablesFactory, target); + return new UserTaskListenerDelegate(getProcessPluginApi(), variablesFactory, target); } private List filterFhirTaskValues(List fieldDeclarations) diff --git a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/spring/ApiServiceConfig.java b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/spring/ApiServiceConfig.java index cbfcb103b..eb82ba3a4 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/spring/ApiServiceConfig.java +++ b/dsf-bpe/dsf-bpe-process-api-v2-impl/src/main/java/dev/dsf/bpe/v2/spring/ApiServiceConfig.java @@ -22,8 +22,6 @@ import dev.dsf.bpe.api.service.BpeMailService; import dev.dsf.bpe.api.service.BpeOidcClientProvider; import dev.dsf.bpe.api.service.BuildInfoProvider; -import dev.dsf.bpe.v2.ProcessPluginApi; -import dev.dsf.bpe.v2.ProcessPluginApiImpl; import dev.dsf.bpe.v2.client.dsf.ReferenceCleaner; import dev.dsf.bpe.v2.client.dsf.ReferenceCleanerImpl; import dev.dsf.bpe.v2.client.dsf.ReferenceExtractor; @@ -99,16 +97,6 @@ public class ApiServiceConfig @Autowired private BpeOidcClientProvider bpeOidcClientProvider; - @Bean - public ProcessPluginApi processPluginApiV2() - { - return new ProcessPluginApiImpl(proxyConfigDelegate(), endpointProvider(), fhirContext(), dsfClientProvider(), - fhirClientProvider(), fhirClientConfigProvider(), oidcClientProvider(), mailService(), - mimeTypeService(), objectMapper(), organizationProvider(), processAuthorizationHelper(), - questionnaireResponseHelper(), readAccessHelper(), taskHelper(), cryptoService(), targetProvider(), - dataLogger()); - } - @Bean public ProxyConfig proxyConfigDelegate() { diff --git a/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/ProcessPluginApi.java b/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/ProcessPluginApi.java index bc6174b53..08e38ea26 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/ProcessPluginApi.java +++ b/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/ProcessPluginApi.java @@ -32,6 +32,8 @@ */ public interface ProcessPluginApi { + ProcessPluginDefinition getProcessPluginDefinition(); + ProxyConfig getProxyConfig(); EndpointProvider getEndpointProvider(); diff --git a/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/spring/ActivityPrototypeBeanCreator.java b/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/spring/ActivityPrototypeBeanCreator.java index 46c9b31e7..482459852 100644 --- a/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/spring/ActivityPrototypeBeanCreator.java +++ b/dsf-bpe/dsf-bpe-process-api-v2/src/main/java/dev/dsf/bpe/v2/spring/ActivityPrototypeBeanCreator.java @@ -17,7 +17,7 @@ /** * Helper class to register {@link Activity}s as prototype beans. Must be configured as a static - * {@link Bean} inside a {@link Configuration} class. + * {@link Bean} inside a {@link Configuration} class. Autowiring via constructor arguments is enabled. *

* Usage: *

@@ -73,6 +73,7 @@ private BeanDefinition createBeanDefinition(Class activity) GenericBeanDefinition definition = new GenericBeanDefinition(); definition.setBeanClass(activity); definition.setScope(BeanDefinition.SCOPE_PROTOTYPE); + definition.setAutowireMode(GenericBeanDefinition.AUTOWIRE_CONSTRUCTOR); return definition; } } diff --git a/dsf-bpe/dsf-bpe-process-api/src/main/java/dev/dsf/bpe/api/plugin/AbstractProcessPlugin.java b/dsf-bpe/dsf-bpe-process-api/src/main/java/dev/dsf/bpe/api/plugin/AbstractProcessPlugin.java index 47f0a95f0..01207aca9 100644 --- a/dsf-bpe/dsf-bpe-process-api/src/main/java/dev/dsf/bpe/api/plugin/AbstractProcessPlugin.java +++ b/dsf-bpe/dsf-bpe-process-api/src/main/java/dev/dsf/bpe/api/plugin/AbstractProcessPlugin.java @@ -552,6 +552,9 @@ private AnnotationConfigApplicationContext createApplicationContext() .concat(Stream.of(apiServicesSpringConfiguration), getDefinitionSpringConfigurations().stream()) .toArray(Class[]::new)); context.setEnvironment(environment); + + customizeApplicationContext(context, apiApplicationContext); + context.refresh(); return context; @@ -576,6 +579,11 @@ private AnnotationConfigApplicationContext createApplicationContext() } } + protected void customizeApplicationContext(AnnotationConfigApplicationContext context, + ApplicationContext parentContext) + { + } + private Stream loadBpmnModels(String localOrganizationIdentifierValue) { return getDefinitionProcessModels().stream().map(loadBpmnModelOrNull(localOrganizationIdentifierValue)) diff --git a/dsf-bpe/dsf-bpe-server/src/test/java/dev/dsf/bpe/integration/PluginV2IntegrationTest.java b/dsf-bpe/dsf-bpe-server/src/test/java/dev/dsf/bpe/integration/PluginV2IntegrationTest.java index 3e2f2ba43..16d841b9d 100644 --- a/dsf-bpe/dsf-bpe-server/src/test/java/dev/dsf/bpe/integration/PluginV2IntegrationTest.java +++ b/dsf-bpe/dsf-bpe-server/src/test/java/dev/dsf/bpe/integration/PluginV2IntegrationTest.java @@ -257,4 +257,10 @@ public void startSensitiveDataLoggerTest() throws Exception { executePluginTest(createTestTask("DataLoggerTest")); } + + @Test + public void startAutowireTest() throws Exception + { + executePluginTest(createTestTask("AutowireTest")); + } } \ No newline at end of file diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/TestProcessPluginDefinition.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/TestProcessPluginDefinition.java index 9d975a46d..44e50e351 100644 --- a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/TestProcessPluginDefinition.java +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/TestProcessPluginDefinition.java @@ -9,13 +9,14 @@ public class TestProcessPluginDefinition implements ProcessPluginDefinition { + public static final String NAME = "dsf-process-test"; public static final String VERSION = "2.0.0.0"; - public static final LocalDate RELEASE_DATE = LocalDate.of(2025, 3, 25); + public static final LocalDate RELEASE_DATE = LocalDate.of(2025, 9, 1); @Override public String getName() { - return "dsf-process-test"; + return NAME; } @Override diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/autowire/DemoService.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/autowire/DemoService.java new file mode 100644 index 000000000..af1b5b272 --- /dev/null +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/autowire/DemoService.java @@ -0,0 +1,6 @@ +package dev.dsf.bpe.test.autowire; + +public class DemoService +{ + // Intentionally empty +} diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/ApiTest.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/ApiTest.java index f96cdd7e9..3c7a26765 100644 --- a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/ApiTest.java +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/ApiTest.java @@ -1,9 +1,11 @@ package dev.dsf.bpe.test.service; import static dev.dsf.bpe.test.PluginTestExecutor.expectNotNull; +import static dev.dsf.bpe.test.PluginTestExecutor.expectSame; import dev.dsf.bpe.test.AbstractTest; import dev.dsf.bpe.test.PluginTest; +import dev.dsf.bpe.test.TestProcessPluginDefinition; import dev.dsf.bpe.v2.ProcessPluginApi; import dev.dsf.bpe.v2.activity.ServiceTask; import dev.dsf.bpe.v2.error.ErrorBoundaryEvent; @@ -23,6 +25,19 @@ public void apiNotNull(ProcessPluginApi api) throws Exception expectNotNull(api); } + @PluginTest + public void apiGetProcessPluginDefinition(ProcessPluginApi api) throws Exception + { + expectNotNull(api.getProcessPluginDefinition()); + + expectSame(TestProcessPluginDefinition.NAME, api.getProcessPluginDefinition().getName()); + expectSame(TestProcessPluginDefinition.RELEASE_DATE, api.getProcessPluginDefinition().getReleaseDate()); + expectSame(TestProcessPluginDefinition.RELEASE_DATE, api.getProcessPluginDefinition().getResourceReleaseDate()); + expectSame(TestProcessPluginDefinition.VERSION, api.getProcessPluginDefinition().getVersion()); + expectSame(TestProcessPluginDefinition.VERSION.substring(0, 3), + api.getProcessPluginDefinition().getResourceVersion()); + } + @PluginTest public void apiGetEndpointProviderNotNull(ProcessPluginApi api) throws Exception { diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/AutowireTest.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/AutowireTest.java new file mode 100644 index 000000000..e64ce7b18 --- /dev/null +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/service/AutowireTest.java @@ -0,0 +1,42 @@ +package dev.dsf.bpe.test.service; + +import static dev.dsf.bpe.test.PluginTestExecutor.expectNotNull; + +import dev.dsf.bpe.test.AbstractTest; +import dev.dsf.bpe.test.PluginTest; +import dev.dsf.bpe.test.TestProcessPluginDefinition; +import dev.dsf.bpe.test.autowire.DemoService; +import dev.dsf.bpe.v2.ProcessPluginApi; +import dev.dsf.bpe.v2.activity.ServiceTask; +import dev.dsf.bpe.v2.error.ErrorBoundaryEvent; +import dev.dsf.bpe.v2.variables.Variables; + +public class AutowireTest extends AbstractTest implements ServiceTask +{ + private final DemoService demoService; + private final TestProcessPluginDefinition pluginDefinition; + + public AutowireTest(DemoService demoService, TestProcessPluginDefinition pluginDefinition) + { + this.demoService = demoService; + this.pluginDefinition = pluginDefinition; + } + + @Override + public void execute(ProcessPluginApi api, Variables variables) throws ErrorBoundaryEvent, Exception + { + executeTests(api, variables); + } + + @PluginTest + public void demoServiceNotNull() throws Exception + { + expectNotNull(demoService); + } + + @PluginTest + public void testProcessPluginDefinitionNotNull() throws Exception + { + expectNotNull(pluginDefinition); + } +} diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/spring/config/Config.java b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/spring/config/Config.java index 05dc7b614..142e133db 100644 --- a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/spring/config/Config.java +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/java/dev/dsf/bpe/test/spring/config/Config.java @@ -9,6 +9,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; +import dev.dsf.bpe.test.autowire.DemoService; import dev.dsf.bpe.test.deployment.ProcessPluginDeploymentListenerTestImpl; import dev.dsf.bpe.test.fhir.FhirResourceModifierImpl; import dev.dsf.bpe.test.listener.StartFieldInjectionTestListener; @@ -16,6 +17,7 @@ import dev.dsf.bpe.test.message.ContinueSendTestSend; import dev.dsf.bpe.test.message.SendTaskTest; import dev.dsf.bpe.test.service.ApiTest; +import dev.dsf.bpe.test.service.AutowireTest; import dev.dsf.bpe.test.service.ContinueSendTest; import dev.dsf.bpe.test.service.ContinueSendTestEvaluate; import dev.dsf.bpe.test.service.CryptoServiceTest; @@ -74,7 +76,7 @@ public static ActivityPrototypeBeanCreator activityPrototypeBeanCreator() ContinueSendTestSend.class, ContinueSendTestEvaluate.class, JsonVariableTestSet.class, JsonVariableTestGet.class, CryptoServiceTest.class, MimeTypeServiceTest.class, FhirBinaryVariableTestSet.class, FhirBinaryVariableTestGet.class, DsfClientTest.class, - TargetProviderTest.class, DataLoggerTest.class); + TargetProviderTest.class, DataLoggerTest.class, AutowireTest.class); } @Bean @@ -95,4 +97,10 @@ public ProcessPluginDeploymentListener processPluginDeploymentListener() { return new ProcessPluginDeploymentListenerTestImpl(); } + + @Bean + public DemoService demoService() + { + return new DemoService(); + } } diff --git a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/resources/bpe/test.bpmn b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/resources/bpe/test.bpmn index 2b4cac66d..8443cc1d3 100644 --- a/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/resources/bpe/test.bpmn +++ b/dsf-bpe/dsf-bpe-test-plugin-v2/src/main/resources/bpe/test.bpmn @@ -40,6 +40,7 @@ Flow_1gipugc Flow_1wjdaz2 Flow_0jlkf4u + Flow_1x18y7y Flow_0312al1 @@ -69,6 +70,7 @@ Flow_04z1f6i Flow_0w963xd Flow_17to6o7 + Flow_0scl0xx Flow_0vj0i7z Flow_0a1kwg9 @@ -312,6 +314,14 @@ ${testActivity == 'DataLoggerTest'} + + Flow_1x18y7y + Flow_0scl0xx + + + ${testActivity == 'AutowireTest'} + + Flow_0312al1 Flow_0vj0i7z @@ -455,6 +465,10 @@ + + + + @@ -696,6 +710,16 @@ + + + + + + + + + + diff --git a/dsf-common/dsf-common-auth/src/main/java/dev/dsf/common/auth/logging/CurrentUserMdcLogger.java b/dsf-common/dsf-common-auth/src/main/java/dev/dsf/common/auth/logging/CurrentUserMdcLogger.java index 17e7274cd..c9f3cdf5d 100644 --- a/dsf-common/dsf-common-auth/src/main/java/dev/dsf/common/auth/logging/CurrentUserMdcLogger.java +++ b/dsf-common/dsf-common-auth/src/main/java/dev/dsf/common/auth/logging/CurrentUserMdcLogger.java @@ -41,8 +41,7 @@ protected void before(OrganizationIdentity organization) { before((Identity) organization); - organization.getCertificate().map(this::getThumbprint) - .ifPresent(t -> MDC.pushByKey(DSF_ORGANIZATION_THUMBPRINT, t)); + organization.getCertificate().map(this::getThumbprint).ifPresent(t -> MDC.put(DSF_ORGANIZATION_THUMBPRINT, t)); organization.getCertificate().map(X509Certificate::getSubjectX500Principal).map(X500Principal::getName) .ifPresent(d -> MDC.put(DSF_ORGANIZATION_DN, d)); @@ -55,8 +54,7 @@ protected void before(PractitionerIdentity practitioner) { before((Identity) practitioner); - practitioner.getCertificate().map(this::getThumbprint) - .ifPresent(t -> MDC.pushByKey(DSF_PRACTITIONER_THUMBPRINT, t)); + practitioner.getCertificate().map(this::getThumbprint).ifPresent(t -> MDC.put(DSF_PRACTITIONER_THUMBPRINT, t)); practitioner.getCertificate().map(X509Certificate::getSubjectX500Principal).map(X500Principal::getName) .ifPresent(d -> MDC.put(DSF_PRACTITIONER_DN, d)); practitioner.getCredentials().map(DsfOpenIdCredentials::getUserId)