From fa8f480121c5746777c55090fcaf52353f194bae Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Fri, 23 May 2025 09:54:19 -0400 Subject: [PATCH] added multi-configurer support --- .../ext/MultiProcessEngineConfigurer.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/java/com/inteligr8/activiti/ext/MultiProcessEngineConfigurer.java diff --git a/src/main/java/com/inteligr8/activiti/ext/MultiProcessEngineConfigurer.java b/src/main/java/com/inteligr8/activiti/ext/MultiProcessEngineConfigurer.java new file mode 100644 index 0000000..2f528b5 --- /dev/null +++ b/src/main/java/com/inteligr8/activiti/ext/MultiProcessEngineConfigurer.java @@ -0,0 +1,57 @@ +package com.inteligr8.activiti.ext; + +import java.util.Map; +import java.util.Map.Entry; + +import org.activiti.engine.cfg.ProcessEngineConfigurator; +import org.activiti.spring.SpringProcessEngineConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import com.activiti.api.engine.ProcessEngineConfigurationConfigurer; + +@Component(MultiProcessEngineConfigurer.BEAN_NAME) +@Primary +public class MultiProcessEngineConfigurer implements ProcessEngineConfigurationConfigurer { + + public static final String BEAN_NAME = "inteligr8.multiext.processEngineConfigurer"; + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private ApplicationContext applicationContext; + + @Override + public void processEngineConfigurationInitialized(SpringProcessEngineConfiguration springProcessEngineConfiguration) { + this.logger.info("Multi-Ext enabled for ProcessEngineConfigurationConfigurer"); + + this.wrapSpringProcessEngineConfigurationConfigurers(springProcessEngineConfiguration); + this.wrapProcessEngineConfigurators(springProcessEngineConfiguration); + } + + private void wrapSpringProcessEngineConfigurationConfigurers(SpringProcessEngineConfiguration springProcessEngineConfiguration) { + Map beans = this.applicationContext.getBeansOfType(ProcessEngineConfigurationConfigurer.class); + beans.remove(BEAN_NAME); + + this.logger.debug("Executing {} spring process engine configurers", beans.size()); + for (Entry configurer : beans.entrySet()) { + this.logger.trace("Executing spring process engine configurer: {}: {}", configurer.getKey(), configurer.getValue().getClass()); + configurer.getValue().processEngineConfigurationInitialized(springProcessEngineConfiguration); + } + } + + private void wrapProcessEngineConfigurators(SpringProcessEngineConfiguration springProcessEngineConfiguration) { + Map beans = this.applicationContext.getBeansOfType(ProcessEngineConfigurator.class); + + this.logger.debug("Executing {} process engine configurators", beans.size()); + for (Entry configurator : beans.entrySet()) { + this.logger.trace("Executing process engine configurator: {}: {}", configurator.getKey(), configurator.getValue().getClass()); + springProcessEngineConfiguration.addConfigurator(configurator.getValue()); + } + } + +}