diff --git a/.gitignore b/.gitignore
index 26d44a9eb46..7e5ab738d2f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,5 +20,6 @@ faces-config.NavData
*.lock.db
**/overlays
**/node_modules
+camunda-h2-dbs
*.DS_Store
diff --git a/engine/src/main/java/org/camunda/bpm/container/impl/metadata/PropertyHelper.java b/engine/src/main/java/org/camunda/bpm/container/impl/metadata/PropertyHelper.java
index 32dd91a490f..5bed8761662 100644
--- a/engine/src/main/java/org/camunda/bpm/container/impl/metadata/PropertyHelper.java
+++ b/engine/src/main/java/org/camunda/bpm/container/impl/metadata/PropertyHelper.java
@@ -34,7 +34,11 @@
*/
public class PropertyHelper {
- private final static ContainerIntegrationLogger LOG = ProcessEngineLogger.CONTAINER_INTEGRATION_LOGGER;
+ protected final static ContainerIntegrationLogger LOG = ProcessEngineLogger.CONTAINER_INTEGRATION_LOGGER;
+
+ public static final String KEBAB_CASE = "-";
+ public static final String SNAKE_CASE = "_";
+ public static final String CAMEL_CASE = "";
/**
* Regex for Ant-style property placeholders
@@ -99,18 +103,38 @@ public static void applyProperty(Object configuration, String key, String string
/**
* Sets an objects fields via reflection from String values.
* Depending on the field's type the respective values are converted to int or boolean.
+ * This method allows to specify a property naming strategy, i.e., if a property is written in
+ * camelCase
, kebab-case
, or snake_case
.
*
* @param configuration
* @param properties
+ * @param namingStrategy can be either {@link PropertyHelper#KEBAB_CASE}, {@link PropertyHelper#SNAKE_CASE}, or {@link PropertyHelper#CAMEL_CASE}.
* @throws ProcessEngineException if a property is supplied that matches no field or
* if the field's type is not String, nor int, nor boolean.
*/
- public static void applyProperties(Object configuration, Map properties) {
+ public static void applyProperties(Object configuration, Map properties, String namingStrategy) {
for (Map.Entry property : properties.entrySet()) {
- applyProperty(configuration, property.getKey(), property.getValue());
+ String key = property.getKey();
+ if (!CAMEL_CASE.equals(namingStrategy)) {
+ key = convertToCamelCase(key, namingStrategy);
+ }
+ applyProperty(configuration, key, property.getValue());
}
}
+ /**
+ * Sets an objects fields via reflection from String values.
+ * Depending on the field's type the respective values are converted to int or boolean.
+ *
+ * @param configuration
+ * @param properties
+ * @throws ProcessEngineException if a property is supplied that matches no field or
+ * if the field's type is not String, nor int, nor boolean.
+ */
+ public static void applyProperties(Object configuration, Map properties) {
+ applyProperties(configuration, properties, CAMEL_CASE);
+ }
+
/**
* Replaces Ant-style property references if the corresponding keys exist in the provided {@link Properties}.
@@ -133,4 +157,13 @@ public static String resolveProperty(Properties props, String original) {
return found ? buffer.toString() : original;
}
+ protected static String convertToCamelCase(String value, String token) {
+ while(value.contains(token)) {
+ value = value
+ .replaceFirst(token + "[a-z]",
+ String.valueOf(Character.toUpperCase(value.charAt(value.indexOf(token) + 1))));
+ }
+ return value;
+ }
+
}
diff --git a/engine/src/test/java/org/camunda/bpm/container/impl/metadata/PropertyHelperTest.java b/engine/src/test/java/org/camunda/bpm/container/impl/metadata/PropertyHelperTest.java
index 097a1ab9292..a591101d96f 100644
--- a/engine/src/test/java/org/camunda/bpm/container/impl/metadata/PropertyHelperTest.java
+++ b/engine/src/test/java/org/camunda/bpm/container/impl/metadata/PropertyHelperTest.java
@@ -20,7 +20,6 @@
import java.util.Map;
import java.util.Properties;
-import junit.framework.TestCase;
import org.camunda.bpm.engine.ProcessEngineConfiguration;
import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration;
@@ -48,6 +47,18 @@ public class PropertyHelperTest {
protected static final String WAIT_INCREASE_FACTOR = "waitIncreaseFactor";
protected static final String BACKOFF_TIME_IN_MILLIS = "backoffTimeInMillis";
+ // kebab case properties
+ protected static final String KC_JDBC_URL_PROP = "jdbc-url";
+ protected static final String KC_DB_IDENTITY_USED_PROP = "db-identity-used";
+ protected static final String KC_WAIT_INCREASE_FACTOR = "wait-increase-factor";
+ protected static final String KC_BACKOFF_TIME_IN_MILLIS = "backoff-time-in-millis";
+
+ // snake case properties
+ protected static final String SC_JDBC_URL_PROP = "jdbc_url";
+ protected static final String SC_DB_IDENTITY_USED_PROP = "db_identity_used";
+ protected static final String SC_WAIT_INCREASE_FACTOR = "wait_increase_factor";
+ protected static final String SC_BACKOFF_TIME_IN_MILLIS = "backoff_time_in_millis";
+
/**
* Assert that String, int and boolean properties can be set.
@@ -166,4 +177,54 @@ public void testResolvePropertyNoTemplate() {
String result = PropertyHelper.resolveProperty(source, "camunda.test.someKey");
Assert.assertEquals("camunda.test.someKey", result);
}
+
+ @Test
+ public void shouldResolveKebabCaseProperties() {
+ // given
+ ProcessEngineConfigurationImpl engineConfiguration = new StandaloneProcessEngineConfiguration();
+ JobExecutor jobExecutor = new DefaultJobExecutor();
+
+ Map configProperties = new HashMap<>();
+ configProperties.put(KC_JDBC_URL_PROP, "someUrl");
+ configProperties.put(KC_DB_IDENTITY_USED_PROP, "true");
+
+ Map executorProperties = new HashMap<>();
+ executorProperties.put(KC_BACKOFF_TIME_IN_MILLIS, Integer.toString(Integer.MAX_VALUE));
+ executorProperties.put(KC_WAIT_INCREASE_FACTOR, Float.toString(Float.MAX_VALUE));
+
+ // when
+ PropertyHelper.applyProperties(engineConfiguration, configProperties, PropertyHelper.KEBAB_CASE);
+ PropertyHelper.applyProperties(jobExecutor, executorProperties, PropertyHelper.KEBAB_CASE);
+
+ // then
+ Assert.assertEquals(Integer.MAX_VALUE, jobExecutor.getBackoffTimeInMillis());
+ Assert.assertEquals(Float.MAX_VALUE, jobExecutor.getWaitIncreaseFactor(), 0.0001d);
+ Assert.assertEquals(true, engineConfiguration.isDbIdentityUsed());
+ Assert.assertEquals("someUrl", engineConfiguration.getJdbcUrl());
+ }
+
+ @Test
+ public void shouldResolveSnakeCaseProperties() {
+ // given
+ ProcessEngineConfigurationImpl engineConfiguration = new StandaloneProcessEngineConfiguration();
+ JobExecutor jobExecutor = new DefaultJobExecutor();
+
+ Map configProperties = new HashMap<>();
+ configProperties.put(SC_JDBC_URL_PROP, "someUrl");
+ configProperties.put(SC_DB_IDENTITY_USED_PROP, "true");
+
+ Map executorProperties = new HashMap<>();
+ executorProperties.put(SC_BACKOFF_TIME_IN_MILLIS, Integer.toString(Integer.MAX_VALUE));
+ executorProperties.put(SC_WAIT_INCREASE_FACTOR, Float.toString(Float.MAX_VALUE));
+
+ // when
+ PropertyHelper.applyProperties(engineConfiguration, configProperties, PropertyHelper.SNAKE_CASE);
+ PropertyHelper.applyProperties(jobExecutor, executorProperties, PropertyHelper.SNAKE_CASE);
+
+ // then
+ Assert.assertEquals(Integer.MAX_VALUE, jobExecutor.getBackoffTimeInMillis());
+ Assert.assertEquals(Float.MAX_VALUE, jobExecutor.getWaitIncreaseFactor(), 0.0001d);
+ Assert.assertEquals(true, engineConfiguration.isDbIdentityUsed());
+ Assert.assertEquals("someUrl", engineConfiguration.getJdbcUrl());
+ }
}
diff --git a/quarkus-extension/engine/deployment/src/main/java/org/camunda/bpm/quarkus/engine/extension/deployment/impl/CamundaEngineProcessor.java b/quarkus-extension/engine/deployment/src/main/java/org/camunda/bpm/quarkus/engine/extension/deployment/impl/CamundaEngineProcessor.java
index 76909bc413e..465c592067f 100644
--- a/quarkus-extension/engine/deployment/src/main/java/org/camunda/bpm/quarkus/engine/extension/deployment/impl/CamundaEngineProcessor.java
+++ b/quarkus-extension/engine/deployment/src/main/java/org/camunda/bpm/quarkus/engine/extension/deployment/impl/CamundaEngineProcessor.java
@@ -39,10 +39,10 @@
import org.camunda.bpm.engine.cdi.impl.context.RequestScopedAssociation;
import org.camunda.bpm.engine.cdi.jsf.TaskForm;
import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
-import org.camunda.bpm.quarkus.engine.extension.impl.CamundaEngineConfig;
+import org.camunda.bpm.quarkus.engine.extension.CamundaEngineConfig;
import org.camunda.bpm.quarkus.engine.extension.impl.CamundaEngineRecorder;
import org.camunda.bpm.quarkus.engine.extension.impl.InjectableBusinessProcessContext;
-import org.camunda.bpm.quarkus.engine.extension.impl.QuarkusProcessEngineConfiguration;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.jboss.jandex.DotName;
import javax.enterprise.context.Dependent;
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/CamundaEngineConfigTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/CamundaEngineConfigTest.java
index f7044a1961c..46fed85b71a 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/CamundaEngineConfigTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/CamundaEngineConfigTest.java
@@ -21,7 +21,7 @@
import javax.inject.Inject;
import io.quarkus.test.QuarkusUnitTest;
-import org.camunda.bpm.quarkus.engine.extension.impl.CamundaEngineConfig;
+import org.camunda.bpm.quarkus.engine.extension.CamundaEngineConfig;
import org.camunda.bpm.quarkus.engine.test.helper.ProcessEngineAwareExtension;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
@@ -52,13 +52,13 @@ public void shouldLoadJobAcquisitionProperties() {
// given a custom application.properties file
// then
- assertThat(config.jobExecutor.maxJobsPerAcquisition).isEqualTo(5);
- assertThat(config.jobExecutor.lockTimeInMillis).isEqualTo(500000);
- assertThat(config.jobExecutor.waitTimeInMillis).isEqualTo(7000);
- assertThat(config.jobExecutor.maxWait).isEqualTo(65000);
- assertThat(config.jobExecutor.backoffTimeInMillis).isEqualTo(5);
- assertThat(config.jobExecutor.maxBackoff).isEqualTo(5);
- assertThat(config.jobExecutor.backoffDecreaseThreshold).isEqualTo(120);
- assertThat(config.jobExecutor.waitIncreaseFactor).isEqualTo(3);
+ assertThat(config.jobExecutor.genericConfig.get("max-jobs-per-acquisition")).isEqualTo("5");
+ assertThat(config.jobExecutor.genericConfig.get("lock-time-in-millis")).isEqualTo("500000");
+ assertThat(config.jobExecutor.genericConfig.get("wait-time-in-millis")).isEqualTo("7000");
+ assertThat(config.jobExecutor.genericConfig.get("max-wait")).isEqualTo("65000");
+ assertThat(config.jobExecutor.genericConfig.get("backoff-time-in-millis")).isEqualTo("5");
+ assertThat(config.jobExecutor.genericConfig.get("max-backoff")).isEqualTo("5");
+ assertThat(config.jobExecutor.genericConfig.get("backoff-decrease-threshold")).isEqualTo("120");
+ assertThat(config.jobExecutor.genericConfig.get("wait-increase-factor")).isEqualTo("3");
}
}
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ConfigurableProcessEngineTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ConfigurableProcessEngineTest.java
index 86804c70fb6..273a8b95cb6 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ConfigurableProcessEngineTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ConfigurableProcessEngineTest.java
@@ -18,7 +18,7 @@
import io.quarkus.test.QuarkusUnitTest;
import org.camunda.bpm.engine.ProcessEngine;
-import org.camunda.bpm.quarkus.engine.extension.impl.QuarkusProcessEngineConfiguration;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ManagedJobExecutorTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ManagedJobExecutorTest.java
index c20f3280941..b43b36f818f 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ManagedJobExecutorTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/ManagedJobExecutorTest.java
@@ -25,8 +25,8 @@
import org.camunda.bpm.engine.impl.test.TestHelper;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.camunda.bpm.engine.test.Deployment;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.camunda.bpm.quarkus.engine.extension.impl.ManagedJobExecutor;
-import org.camunda.bpm.quarkus.engine.extension.impl.QuarkusProcessEngineConfiguration;
import org.camunda.bpm.quarkus.engine.test.helper.ProcessEngineAwareExtension;
import org.eclipse.microprofile.context.ManagedExecutor;
import org.jboss.shrinkwrap.api.ShrinkWrap;
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/helper/ProcessEngineAwareExtension.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/helper/ProcessEngineAwareExtension.java
index bcff37a871b..5a47a6f2932 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/helper/ProcessEngineAwareExtension.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/helper/ProcessEngineAwareExtension.java
@@ -21,7 +21,7 @@
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.impl.test.TestHelper;
import org.camunda.bpm.engine.test.Deployment;
-import org.camunda.bpm.quarkus.engine.extension.impl.QuarkusProcessEngineConfiguration;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtensionContext;
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/id/ConfigureDbIdGeneratorTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/id/ConfigureDbIdGeneratorTest.java
index 1ef1d5baa9b..fb8543b5fdc 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/id/ConfigureDbIdGeneratorTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/id/ConfigureDbIdGeneratorTest.java
@@ -22,7 +22,7 @@
import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.camunda.bpm.engine.impl.db.DbIdGenerator;
import org.camunda.bpm.engine.task.Task;
-import org.camunda.bpm.quarkus.engine.extension.impl.QuarkusProcessEngineConfiguration;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.camunda.bpm.quarkus.engine.test.helper.ProcessEngineAwareExtension;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDatasourceConfigurationTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDatasourceConfigurationTest.java
index ae44540c366..4fd05e5f23b 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDatasourceConfigurationTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDatasourceConfigurationTest.java
@@ -36,7 +36,7 @@ public class ChooseDatasourceConfigurationTest {
@RegisterExtension
static QuarkusUnitTest unitTest = new ProcessEngineAwareExtension()
.withConfigurationResource("persistence/multiple-datasources-application.properties")
- .overrideConfigKey("quarkus.camunda.bpm.datasource", "secondary")
+ .overrideConfigKey("quarkus.camunda.datasource", "secondary")
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
@Inject
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDefaultDatasourceConfigurationTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDefaultDatasourceConfigurationTest.java
index 541f5223168..b55cdefe20d 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDefaultDatasourceConfigurationTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseDefaultDatasourceConfigurationTest.java
@@ -35,7 +35,7 @@ public class ChooseDefaultDatasourceConfigurationTest {
@RegisterExtension
static QuarkusUnitTest unitTest = new ProcessEngineAwareExtension()
.withConfigurationResource("persistence/multiple-datasources-application.properties")
- .overrideConfigKey("quarkus.camunda.bpm.datasource", "")
+ .overrideConfigKey("quarkus.camunda.datasource", "")
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
@Inject
diff --git a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseNotExistingDatasourceConfigurationTest.java b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseNotExistingDatasourceConfigurationTest.java
index 7d576bea354..3f55f353388 100644
--- a/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseNotExistingDatasourceConfigurationTest.java
+++ b/quarkus-extension/engine/deployment/src/test/java/org/camunda/bpm/quarkus/engine/test/persistence/conf/ChooseNotExistingDatasourceConfigurationTest.java
@@ -30,7 +30,7 @@ public class ChooseNotExistingDatasourceConfigurationTest {
@RegisterExtension
static QuarkusUnitTest unitTest = new ProcessEngineAwareExtension()
.withConfigurationResource("persistence/multiple-datasources-application.properties")
- .overrideConfigKey("quarkus.camunda.bpm.datasource", "quaternary")
+ .overrideConfigKey("quarkus.camunda.datasource", "quaternary")
.assertException(throwable -> assertThat(throwable)
.hasMessage("No datasource named 'quaternary' exists")
.isInstanceOf(IllegalArgumentException.class))
diff --git a/quarkus-extension/engine/deployment/src/test/resources/job-executor-application.properties b/quarkus-extension/engine/deployment/src/test/resources/job-executor-application.properties
index 5d36ebd8b9d..c20f0919a37 100644
--- a/quarkus-extension/engine/deployment/src/test/resources/job-executor-application.properties
+++ b/quarkus-extension/engine/deployment/src/test/resources/job-executor-application.properties
@@ -1,13 +1,13 @@
-quarkus.camunda.bpm.job-executor.thread-pool.max-pool-size=12
-quarkus.camunda.bpm.job-executor.thread-pool.queue-size=5
+quarkus.camunda.job-executor.thread-pool.max-pool-size=12
+quarkus.camunda.job-executor.thread-pool.queue-size=5
-quarkus.camunda.bpm.job-executor.max-jobs-per-acquisition=5
-quarkus.camunda.bpm.job-executor.lock-time-in-millis=500000
-quarkus.camunda.bpm.job-executor.wait-time-in-millis=7000
-quarkus.camunda.bpm.job-executor.max-wait=65000
-quarkus.camunda.bpm.job-executor.backoff-time-in-millis=5
-quarkus.camunda.bpm.job-executor.max-backoff=5
-quarkus.camunda.bpm.job-executor.backoff-decrease-threshold=120
-quarkus.camunda.bpm.job-executor.wait-increase-factor=3
+quarkus.camunda.job-executor.max-jobs-per-acquisition=5
+quarkus.camunda.job-executor.lock-time-in-millis=500000
+quarkus.camunda.job-executor.wait-time-in-millis=7000
+quarkus.camunda.job-executor.max-wait=65000
+quarkus.camunda.job-executor.backoff-time-in-millis=5
+quarkus.camunda.job-executor.max-backoff=5
+quarkus.camunda.job-executor.backoff-decrease-threshold=120
+quarkus.camunda.job-executor.wait-increase-factor=3
quarkus.datasource.jdbc.url=jdbc:h2:mem:camunda;MVCC=TRUE;TRACE_LEVEL_FILE=0;DB_CLOSE_ON_EXIT=FALSE
\ No newline at end of file
diff --git a/quarkus-extension/engine/qa/src/test/java/org/camunda/bpm/engine/cdi/test/CdiProcessEngineTestCase.java b/quarkus-extension/engine/qa/src/test/java/org/camunda/bpm/engine/cdi/test/CdiProcessEngineTestCase.java
index f1cbfa0fe0f..0dda7a31b97 100644
--- a/quarkus-extension/engine/qa/src/test/java/org/camunda/bpm/engine/cdi/test/CdiProcessEngineTestCase.java
+++ b/quarkus-extension/engine/qa/src/test/java/org/camunda/bpm/engine/cdi/test/CdiProcessEngineTestCase.java
@@ -35,7 +35,7 @@
import org.camunda.bpm.engine.TaskService;
import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.camunda.bpm.engine.impl.test.TestHelper;
-import org.camunda.bpm.quarkus.engine.extension.impl.QuarkusProcessEngineConfiguration;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.junit.After;
import org.junit.Before;
diff --git a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineConfig.java b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/CamundaEngineConfig.java
similarity index 92%
rename from quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineConfig.java
rename to quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/CamundaEngineConfig.java
index 70703fec151..933c7820150 100644
--- a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineConfig.java
+++ b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/CamundaEngineConfig.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.camunda.bpm.quarkus.engine.extension.impl;
+package org.camunda.bpm.quarkus.engine.extension;
import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
@@ -22,7 +22,7 @@
import java.util.Optional;
-@ConfigRoot(phase = ConfigPhase.RUN_TIME, name = "camunda.bpm")
+@ConfigRoot(phase = ConfigPhase.RUN_TIME, name = "camunda")
public class CamundaEngineConfig {
/**
diff --git a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/CamundaJobExecutorConfig.java b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/CamundaJobExecutorConfig.java
new file mode 100644
index 00000000000..13bf8ac0789
--- /dev/null
+++ b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/CamundaJobExecutorConfig.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
+ * ownership. Camunda licenses this file to you under the Apache License,
+ * Version 2.0; you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.camunda.bpm.quarkus.engine.extension;
+
+import java.util.Map;
+
+import io.quarkus.runtime.annotations.ConfigGroup;
+import io.quarkus.runtime.annotations.ConfigItem;
+
+@ConfigGroup
+public class CamundaJobExecutorConfig {
+
+ /**
+ * The Camunda JobExecutor configuration properties. For more details, see
+ * {@link https://docs.camunda.org/manual/latest/reference/deployment-descriptors/tags/job-executor/#job-acquisition-configuration-properties}
+ */
+ @ConfigItem(name = ConfigItem.PARENT)
+ public Map genericConfig;
+
+ /**
+ * The Camunda JobExecutor thread pool config. This thread pool is responsible for running
+ * Camunda jobs.
+ */
+ @ConfigItem
+ public ThreadPoolConfig threadPool;
+
+ @ConfigGroup
+ public static class ThreadPoolConfig {
+ /**
+ * Sets the maximum number of threads that can be present in the Quarkus-managed
+ * thread pool for the Camunda JobExecutor. The default value is 10.
+ */
+ @ConfigItem(defaultValue = "10")
+ public int maxPoolSize;
+
+ /**
+ * Sets the size of the Quarkus-managed JobExecutor queue. The default value is 3.
+ */
+ @ConfigItem(defaultValue = "3")
+ public int queueSize;
+
+ }
+}
\ No newline at end of file
diff --git a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/QuarkusProcessEngineConfiguration.java b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/QuarkusProcessEngineConfiguration.java
similarity index 98%
rename from quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/QuarkusProcessEngineConfiguration.java
rename to quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/QuarkusProcessEngineConfiguration.java
index 3867fb4dc96..adc858d83d6 100644
--- a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/QuarkusProcessEngineConfiguration.java
+++ b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/QuarkusProcessEngineConfiguration.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.camunda.bpm.quarkus.engine.extension.impl;
+package org.camunda.bpm.quarkus.engine.extension;
import org.camunda.bpm.engine.cdi.CdiJtaProcessEngineConfiguration;
import org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor;
diff --git a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineRecorder.java b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineRecorder.java
index f377a61786a..1894c315997 100644
--- a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineRecorder.java
+++ b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaEngineRecorder.java
@@ -21,13 +21,17 @@
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.ShutdownContext;
import io.quarkus.runtime.annotations.Recorder;
+import io.smallrye.context.SmallRyeManagedExecutor;
import org.camunda.bpm.container.RuntimeContainerDelegate;
+import org.camunda.bpm.container.impl.metadata.PropertyHelper;
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.cdi.impl.event.CdiEventSupportBpmnParseListener;
import org.camunda.bpm.engine.cdi.impl.util.BeanManagerLookup;
import org.camunda.bpm.engine.impl.bpmn.parser.BpmnParseListener;
import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.camunda.bpm.engine.impl.jobexecutor.JobExecutor;
+import org.camunda.bpm.quarkus.engine.extension.CamundaEngineConfig;
+import org.camunda.bpm.quarkus.engine.extension.QuarkusProcessEngineConfiguration;
import org.eclipse.microprofile.context.ManagedExecutor;
import javax.enterprise.inject.spi.BeanManager;
@@ -63,19 +67,7 @@ public RuntimeValue createProcessEngineConfigura
// configure job executor,
// if not already configured by a custom configuration
if (configuration.getJobExecutor() == null) {
-
- int maxPoolSize = config.jobExecutor.threadPool.maxPoolSize;
- int queueSize = config.jobExecutor.threadPool.queueSize;
-
- // create a non-bean ManagedExecutor instance. This instance
- // delegates tasks to the Quarkus core Executor/thread pool.
- ManagedExecutor managedExecutor = ManagedExecutor.builder()
- .maxQueued(queueSize)
- .maxAsync(maxPoolSize)
- .build();
-
- ManagedJobExecutor quarkusJobExecutor = new ManagedJobExecutor(managedExecutor, config);
- configuration.setJobExecutor(quarkusJobExecutor);
+ configureJobExecutor(configuration, config);
}
configureCdiEventBridge(configuration);
@@ -130,4 +122,25 @@ public void registerShutdownTask(ShutdownContext shutdownContext,
});
}
+ protected void configureJobExecutor(ProcessEngineConfigurationImpl configuration,
+ CamundaEngineConfig config) {
+
+ int maxPoolSize = config.jobExecutor.threadPool.maxPoolSize;
+ int queueSize = config.jobExecutor.threadPool.queueSize;
+
+ // create a non-bean ManagedExecutor instance. This instance
+ // uses it's own Executor/thread pool.
+ ManagedExecutor managedExecutor = SmallRyeManagedExecutor.builder()
+ .maxQueued(queueSize)
+ .maxAsync(maxPoolSize)
+ .withNewExecutorService()
+ .build();
+ ManagedJobExecutor quarkusJobExecutor = new ManagedJobExecutor(managedExecutor);
+
+ // apply job executor configuration properties
+ PropertyHelper
+ .applyProperties(quarkusJobExecutor, config.jobExecutor.genericConfig, PropertyHelper.KEBAB_CASE);
+
+ configuration.setJobExecutor(quarkusJobExecutor);
+ }
}
diff --git a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaJobExecutorConfig.java b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaJobExecutorConfig.java
deleted file mode 100644
index 89ca815c01d..00000000000
--- a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/CamundaJobExecutorConfig.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
- * under one or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information regarding copyright
- * ownership. Camunda licenses this file to you under the Apache License,
- * Version 2.0; you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.camunda.bpm.quarkus.engine.extension.impl;
-
-import io.quarkus.runtime.annotations.ConfigGroup;
-import io.quarkus.runtime.annotations.ConfigItem;
-
-@ConfigGroup
-public class CamundaJobExecutorConfig {
-
- /**
- * Sets the maximal number of jobs to be acquired at once. The default value is 3.
- */
- @ConfigItem(defaultValue = "3")
- public int maxJobsPerAcquisition;
-
- /**
- * Specifies the time in milliseconds an acquired job is locked for execution. During that time,
- * no other job executor can acquire the job. The default value is 300000.
- */
- @ConfigItem(defaultValue = "300000")
- public int lockTimeInMillis;
-
- /**
- * Specifies the wait time of the job acquisition thread in milliseconds in case there are less
- * jobs available for execution than requested during acquisition. If this is repeatedly the
- * case, the wait time is increased exponentially by the factor waitIncreaseFactor
.
- * The wait time is capped by maxWait
. The default value is 5000.
- */
- @ConfigItem(defaultValue = "5000")
- public int waitTimeInMillis;
-
- /**
- * Specifies the maximum wait time of the job acquisition thread in milliseconds in case there
- * are less jobs available for execution than requested during acquisition. The default value
- * is 60000.
- */
- @ConfigItem(defaultValue = "60000")
- public long maxWait;
-
- /**
- * Specifies the wait time of the job acquisition thread in milliseconds in case jobs were
- * acquired but could not be locked. This condition indicates that there are other job
- * acquisition threads acquiring jobs in parallel. If this is repeatedly the case, the backoff
- * time is increased exponentially by the factor waitIncreaseFactor. The time is capped by
- * maxBackoff
. With every increase in backoff time, the number of jobs acquired
- * increases by waitIncreaseFactor
as well. The default value is 0.
- */
- @ConfigItem(defaultValue = "0")
- public int backoffTimeInMillis;
-
- /**
- * Specifies the maximum wait time of the job acquisition thread in milliseconds in case jobs
- * were acquired but could not be locked. The default value is 0.
- */
- @ConfigItem(defaultValue = "0")
- public long maxBackoff;
-
- /**
- * Specifies the number of successful job acquisition cycles without a job locking failure
- * before the backoff time is decreased again. In that case, the backoff time is reduced by
- * waitIncreaseFactor
. The default value is 100.
- */
- @ConfigItem(defaultValue = "100")
- public int backoffDecreaseThreshold;
-
- /**
- * Specifies the factor by which wait and backoff time are increased in case their activation
- * conditions are repeatedly met. The default value is 2.
- */
- @ConfigItem(defaultValue = "2")
- public float waitIncreaseFactor;
-
- /**
- * The Camunda JobExecutor thread pool config. This thread pool is responsible for running
- * Camunda jobs.
- */
- @ConfigItem
- public ThreadPoolConfig threadPool;
-
- @ConfigGroup
- public static class ThreadPoolConfig {
- /**
- * Sets the maximum number of threads that can be present in the Quarkus-managed
- * thread pool for the Camunda JobExecutor. The default value is 10.
- */
- @ConfigItem(defaultValue = "10")
- public int maxPoolSize;
-
- /**
- * Sets the size of the Quarkus-managed JobExecutor queue. The default value is 3.
- */
- @ConfigItem(defaultValue = "3")
- public int queueSize;
-
- }
-}
\ No newline at end of file
diff --git a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/ManagedJobExecutor.java b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/ManagedJobExecutor.java
index 7e75f710f44..af23d8a28fa 100644
--- a/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/ManagedJobExecutor.java
+++ b/quarkus-extension/engine/runtime/src/main/java/org/camunda/bpm/quarkus/engine/extension/impl/ManagedJobExecutor.java
@@ -25,30 +25,13 @@
import org.eclipse.microprofile.context.ManagedExecutor;
/**
- * A {@link JobExecutor} implementation that utilises the Quarkus
- * container-managed thread pool to acquire and execute jobs.
+ * A {@link JobExecutor} implementation that utilises a separate thread pool
+ * to acquire and execute jobs.
*/
public class ManagedJobExecutor extends JobExecutor {
protected ManagedExecutor taskExecutor;
- /**
- * Constructs a new QuarkusJobExecutor with the provided
- * {@link ManagedExecutor} instance and a {@link CamundaEngineConfig} instance.
- */
- public ManagedJobExecutor(ManagedExecutor taskExecutor, CamundaEngineConfig config) {
- this(taskExecutor);
- // set Job Acquisition properties
- this.maxJobsPerAcquisition = config.jobExecutor.maxJobsPerAcquisition;
- this.lockTimeInMillis = config.jobExecutor.lockTimeInMillis;
- this.waitTimeInMillis = config.jobExecutor.waitTimeInMillis;
- this.maxWait = config.jobExecutor.maxWait;
- this.backoffTimeInMillis = config.jobExecutor.backoffTimeInMillis;
- this.maxBackoff = config.jobExecutor.maxBackoff;
- this.backoffDecreaseThreshold = config.jobExecutor.backoffDecreaseThreshold;
- this.waitIncreaseFactor = config.jobExecutor.waitIncreaseFactor;
- }
-
/**
* Constructs a new QuarkusJobExecutor with the provided
* {@link ManagedExecutor} instance.