diff --git a/.github/workflows/pr-kogito-runtimes.yml b/.github/workflows/pr-kogito-runtimes.yml index 8513220b2c1..7ef84970c95 100644 --- a/.github/workflows/pr-kogito-runtimes.yml +++ b/.github/workflows/pr-kogito-runtimes.yml @@ -65,7 +65,7 @@ jobs: github-token: "${{ secrets.GITHUB_TOKEN }}" definition-file: https://raw.githubusercontent.com/${GROUP:apache}/incubator-kie-kogito-pipelines/${BRANCH:main}/.ci/pull-request-config.yaml env: - BUILD_MVN_OPTS_CURRENT: '-T 1.5C' + BUILD_MVN_OPTS_CURRENT: '-T 1.5C -Dvalidate-formatting' - name: Junit Report uses: apache/incubator-kie-kogito-pipelines/.ci/actions/action-junit-report@main if: ${{ always() }} diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractVisitor.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractVisitor.java index 17dd3cd9d36..65932b1d760 100644 --- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractVisitor.java +++ b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractVisitor.java @@ -32,11 +32,11 @@ import org.kie.api.definition.process.NodeContainer; import org.kie.api.definition.process.WorkflowElementIdentifier; import org.kie.kogito.internal.process.runtime.KogitoNode; -import org.kie.kogito.internal.utils.KogitoTags; import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.expr.ClassExpr; import com.github.javaparser.ast.expr.Expression; +import com.github.javaparser.ast.expr.FieldAccessExpr; import com.github.javaparser.ast.expr.MethodCallExpr; import com.github.javaparser.ast.expr.NameExpr; import com.github.javaparser.ast.expr.NullLiteralExpr; @@ -102,13 +102,28 @@ protected void visitVariableScope(String field, VariableScope variableScope, Blo if (!visitedVariables.add(variable.getName())) { continue; } - String tags = (String) variable.getMetaData(KogitoTags.VARIABLE_TAGS); + + Map metaData = variable.getMetaData(); + NodeList parameters = new NodeList<>(); + for (Map.Entry entry : metaData.entrySet().stream().filter(e -> e.getValue() != null).toList()) { + parameters.add(new StringLiteralExpr(entry.getKey())); + parameters.add(new StringLiteralExpr(entry.getValue().toString())); + } + + Expression metadataExpression = new FieldAccessExpr(new NameExpr(Map.class.getPackage().getName()), Map.class.getSimpleName()); + metadataExpression = new MethodCallExpr(metadataExpression, "of", parameters); Object defaultValue = variable.getValue(); body.tryAddImportToParentCompilationUnit(variable.getType().getClass()); - body.addStatement(getFactoryMethod(field, METHOD_VARIABLE, new StringLiteralExpr(variable.getName()), - new MethodCallExpr(DataTypeResolver.class.getName() + ".fromClass", new ClassExpr(parseClassOrInterfaceType(variable.getType().getStringType()).removeTypeArguments())), - defaultValue != null ? new StringLiteralExpr(defaultValue.toString()) : new NullLiteralExpr(), new StringLiteralExpr(KogitoTags.VARIABLE_TAGS), - tags != null ? new StringLiteralExpr(tags) : new NullLiteralExpr())); + + NodeList variableFactoryParameters = new NodeList<>(); + variableFactoryParameters.add(new StringLiteralExpr(variable.getName())); + variableFactoryParameters + .add(new MethodCallExpr(DataTypeResolver.class.getName() + ".fromClass", new ClassExpr(parseClassOrInterfaceType(variable.getType().getStringType()).removeTypeArguments()))); + if (defaultValue != null) { + variableFactoryParameters.add(new StringLiteralExpr(defaultValue.toString())); + } + variableFactoryParameters.add(metadataExpression); + body.addStatement(getFactoryMethod(field, METHOD_VARIABLE, variableFactoryParameters.stream().toArray(Expression[]::new))); } } } diff --git a/jbpm/jbpm-flow-builder/src/test/java/org/jbpm/compiler/canonical/ProcessToExecModelGeneratorTest.java b/jbpm/jbpm-flow-builder/src/test/java/org/jbpm/compiler/canonical/ProcessToExecModelGeneratorTest.java index e454d26ee09..eec5facfafa 100644 --- a/jbpm/jbpm-flow-builder/src/test/java/org/jbpm/compiler/canonical/ProcessToExecModelGeneratorTest.java +++ b/jbpm/jbpm-flow-builder/src/test/java/org/jbpm/compiler/canonical/ProcessToExecModelGeneratorTest.java @@ -18,6 +18,8 @@ */ package org.jbpm.compiler.canonical; +import java.util.Collections; + import org.jbpm.process.core.datatype.impl.type.IntegerDataType; import org.jbpm.process.core.datatype.impl.type.ObjectDataType; import org.jbpm.process.core.datatype.impl.type.StringDataType; @@ -130,8 +132,8 @@ public void testScriptVariablewithDefaultValue() { RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("demo.orders"); factory .variable("order", new ObjectDataType("com.myspace.demo.Order")) - .variable("approver", new StringDataType(), "john", "customTags", null) - .variable("age", new IntegerDataType(), "1", "customTags", null) + .variable("approver", new StringDataType(), "john", Collections.singletonMap("customTags", null)) + .variable("age", new IntegerDataType(), "1", Collections.singletonMap("customTags", null)) .name("orders") .packageName("com.myspace.demo") .dynamic(false) diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowNodeContainerFactory.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowNodeContainerFactory.java index 8dbdc4769c2..b994fc5042e 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowNodeContainerFactory.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowNodeContainerFactory.java @@ -18,6 +18,8 @@ */ package org.jbpm.ruleflow.core; +import java.util.Map; + import org.jbpm.process.core.Context; import org.jbpm.process.core.ContextContainer; import org.jbpm.process.core.context.exception.ActionExceptionHandler; @@ -237,11 +239,11 @@ public T errorExceptionHandler(String signalType, String faultCode, String fault public abstract T variable(String name, DataType type); - public abstract T variable(String name, DataType type, Object value); + public abstract T variable(String name, DataType type, Map metadata); - public abstract T variable(String name, DataType type, String metaDataName, Object metaDataValue); + public abstract T variable(String name, DataType type, Object value); - public abstract T variable(String name, DataType type, Object value, String metaDataName, Object metaDataValue); + public abstract T variable(String name, DataType type, Object value, Map metadata); private S getScope(String scopeType, Class scopeClass) { ContextContainer contextContainer = (ContextContainer) getNodeContainer(); diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowProcessFactory.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowProcessFactory.java index ccfdb3d9933..3c6089e19ae 100755 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowProcessFactory.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/RuleFlowProcessFactory.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -201,29 +202,30 @@ public RuleFlowProcessFactory variable(String name, Class clazz) { @Override public RuleFlowProcessFactory variable(String name, DataType type) { - return variable(name, type, null); + return variable(name, type, Collections.emptyMap()); } @Override public RuleFlowProcessFactory variable(String name, DataType type, Object value) { - return variable(name, type, value, null, null); + return variable(name, type, value, Collections.emptyMap()); } @Override - public RuleFlowProcessFactory variable(String name, DataType type, String metaDataName, Object metaDataValue) { - return variable(name, type, null, metaDataName, metaDataValue); + public RuleFlowProcessFactory variable(String name, DataType type, Map metadata) { + return this.variable(name, type, null, metadata); } @Override - public RuleFlowProcessFactory variable(String name, DataType type, Object value, String metaDataName, Object metaDataValue) { - + public RuleFlowProcessFactory variable(String name, DataType type, Object value, Map metadata) { Variable variable = new Variable(); variable.setName(name); variable.setType(type); variable.setValue(type.verifyDataType(value) ? value : type.readValue((String) value)); - if (metaDataName != null && metaDataValue != null) { - variable.setMetaData(metaDataName, metaDataValue); + + for (Map.Entry entry : metadata.entrySet()) { + variable.setMetaData(entry.getKey(), entry.getValue()); } + getRuleFlowProcess().getVariableScope().getVariables().add(variable); return this; } diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/AbstractCompositeNodeFactory.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/AbstractCompositeNodeFactory.java index aacc99b20b8..144de670ac7 100644 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/AbstractCompositeNodeFactory.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/factory/AbstractCompositeNodeFactory.java @@ -18,6 +18,9 @@ */ package org.jbpm.ruleflow.core.factory; +import java.util.Collections; +import java.util.Map; + import org.jbpm.process.core.context.variable.Variable; import org.jbpm.process.core.context.variable.VariableScope; import org.jbpm.process.core.datatype.DataType; @@ -53,28 +56,28 @@ public T timeout(String timeout) { @Override public T variable(String name, DataType type) { - return variable(name, type, null); + return variable(name, type, Collections.emptyMap()); } @Override public T variable(String name, DataType type, Object value) { - return variable(name, type, value, null, null); + return variable(name, type, value, Collections.emptyMap()); } @Override - public T variable(String name, DataType type, String metaDataName, Object metaDataValue) { - return variable(name, type, null, metaDataName, metaDataValue); + public T variable(String name, DataType type, Map metaData) { + return variable(name, type, null, metaData); } @Override - public T variable(String name, DataType type, Object value, String metaDataName, Object metaDataValue) { + public T variable(String name, DataType type, Object value, Map metadata) { Variable variable = new Variable(); variable.setName(name); variable.setType(type); variable.setValue(value); VariableScope variableScope = (VariableScope) getCompositeNode().getDefaultContext(VariableScope.VARIABLE_SCOPE); - if (metaDataName != null && metaDataValue != null) { - variable.setMetaData(metaDataName, metaDataValue); + for (Map.Entry entry : metadata.entrySet()) { + variable.setMetaData(entry.getKey(), entry.getValue()); } if (variableScope == null) { variableScope = new VariableScope(); diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java index 16483d5d413..22184457a74 100755 --- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java +++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import org.drools.compiler.rule.builder.PackageBuildContext; import org.jbpm.bpmn2.activity.ScriptTaskModel; @@ -60,16 +61,29 @@ import org.jbpm.bpmn2.objects.HelloService; import org.jbpm.bpmn2.objects.Person; import org.jbpm.bpmn2.objects.TestWorkItemHandler; +import org.jbpm.bpmn2.subprocess.CallActivityModel; +import org.jbpm.bpmn2.subprocess.CallActivityProcess; import org.jbpm.bpmn2.subprocess.CallActivityProcessBoundaryErrorModel; import org.jbpm.bpmn2.subprocess.CallActivityProcessBoundaryErrorProcess; import org.jbpm.bpmn2.subprocess.CallActivitySubProcessBoundaryErrorModel; import org.jbpm.bpmn2.subprocess.CallActivitySubProcessBoundaryErrorProcess; +import org.jbpm.bpmn2.subprocess.CallActivitySubProcessProcess; import org.jbpm.bpmn2.subprocess.CallActivitySubProcessWithBoundaryEventModel; import org.jbpm.bpmn2.subprocess.CallActivitySubProcessWithBoundaryEventProcess; import org.jbpm.bpmn2.subprocess.CallActivityWithBoundaryEventModel; import org.jbpm.bpmn2.subprocess.CallActivityWithBoundaryEventProcess; +import org.jbpm.bpmn2.subprocess.InputMappingUsingValueModel; +import org.jbpm.bpmn2.subprocess.InputMappingUsingValueProcess; +import org.jbpm.bpmn2.subprocess.SingleTaskWithVarDefModel; +import org.jbpm.bpmn2.subprocess.SingleTaskWithVarDefProcess; import org.jbpm.bpmn2.subprocess.SubProcessWithEntryExitScriptsModel; import org.jbpm.bpmn2.subprocess.SubProcessWithEntryExitScriptsProcess; +import org.jbpm.bpmn2.subprocess.SubProcessWithTerminateEndEventModel; +import org.jbpm.bpmn2.subprocess.SubProcessWithTerminateEndEventProcess; +import org.jbpm.bpmn2.subprocess.SubProcessWithTerminateEndEventProcessScopeModel; +import org.jbpm.bpmn2.subprocess.SubProcessWithTerminateEndEventProcessScopeProcess; +import org.jbpm.bpmn2.task.ReceiveTaskModel; +import org.jbpm.bpmn2.task.ReceiveTaskProcess; import org.jbpm.bpmn2.task.SendTaskModel; import org.jbpm.bpmn2.task.SendTaskProcess; import org.jbpm.bpmn2.test.RequirePersistence; @@ -97,6 +111,8 @@ import org.jbpm.workflow.instance.WorkflowRuntimeException; import org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl; import org.jbpm.workflow.instance.node.DynamicUtils; +import org.jbpm.workflow.instance.node.EndNodeInstance; +import org.jbpm.workflow.instance.node.StartNodeInstance; import org.jbpm.workflow.instance.node.WorkItemNodeInstance; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -106,6 +122,7 @@ import org.kie.api.definition.process.NodeContainer; import org.kie.api.definition.process.Process; import org.kie.api.definition.process.WorkflowElementIdentifier; +import org.kie.api.event.process.ProcessNodeEvent; import org.kie.api.event.process.ProcessNodeTriggeredEvent; import org.kie.api.event.process.ProcessStartedEvent; import org.kie.api.event.process.ProcessVariableChangedEvent; @@ -465,25 +482,26 @@ public void testUserTaskVerifyParameters() throws Exception { } @Test - public void testCallActivityWithContantsAssignment() throws Exception { - kruntime = createKogitoProcessRuntime( - "org/jbpm/bpmn2/subprocess/BPMN2-SingleTaskWithVarDef.bpmn2", - "org/jbpm/bpmn2/subprocess/BPMN2-InputMappingUsingValue.bpmn2"); - - TestWorkItemHandler handler = new TestWorkItemHandler(); - kruntime.getKogitoWorkItemManager().registerWorkItemHandler("CustomTask", handler); - Map params = new HashMap<>(); - KogitoProcessInstance processInstance = kruntime.startProcess("InputMappingUsingValue", params); + public void testCallActivityWithContantsAssignment() { + Application app = ProcessTestHelper.newApplication(); + TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); + ProcessTestHelper.registerHandler(app, "CustomTask", workItemHandler); + org.kie.kogito.process.Process singleTaskWithVarDefModelProcess = SingleTaskWithVarDefProcess.newProcess(app); + SingleTaskWithVarDefModel singleTaskWithVarDefModel = singleTaskWithVarDefModelProcess.createModel(); + ProcessInstance singleTaskWithVarDefModelProcessInstance = singleTaskWithVarDefModelProcess.createInstance(singleTaskWithVarDefModel); + org.kie.kogito.process.Process processDefinition = InputMappingUsingValueProcess.newProcess(app); + InputMappingUsingValueModel model = processDefinition.createModel(); + org.kie.kogito.process.ProcessInstance instance = processDefinition.createInstance(model); + instance.start(); - org.kie.kogito.internal.process.runtime.KogitoWorkItem workItem = handler.getWorkItem(); + assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE); + KogitoWorkItem workItem = workItemHandler.getWorkItem(); assertThat(workItem).isNotNull(); - Object value = workItem.getParameter("TaskName"); assertThat(value).isNotNull().isEqualTo("test string"); - kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), null); - - assertProcessInstanceCompleted(processInstance); + singleTaskWithVarDefModelProcessInstance.completeWorkItem(workItem.getStringId(), Collections.emptyMap()); + assertThat(instance).extracting(ProcessInstance::status).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED); } @Test @@ -511,16 +529,18 @@ public void testSubProcessWithEntryExitScripts() throws Exception { } @Test - public void testCallActivity() throws Exception { - kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/subprocess/BPMN2-CallActivity.bpmn2", - "org/jbpm/bpmn2/subprocess/BPMN2-CallActivitySubProcess.bpmn2"); + public void testCallActivity() { + Application app = ProcessTestHelper.newApplication(); + org.kie.kogito.process.Process processDefinition = CallActivityProcess.newProcess(app); + CallActivityModel model = processDefinition.createModel(); + model.setX("oldValue"); + ProcessInstance instance = processDefinition.createInstance(model); - Map params = new HashMap<>(); - params.put("x", "oldValue"); - KogitoProcessInstance processInstance = kruntime.startProcess( - "CallActivity", params); - assertProcessInstanceCompleted(processInstance); - assertThat(((KogitoWorkflowProcessInstance) processInstance).getVariable("y")).isEqualTo("new value"); + CallActivitySubProcessProcess.newProcess(app); + + instance.start(); + assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED); + assertThat(instance.variables().getY()).isEqualTo("new value"); } @Test @@ -662,36 +682,46 @@ public void testMultiinstanceSubProcessWrongStartEvent() throws Exception { } @Test - public void testSubProcessWithTerminateEndEvent() throws Exception { - kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/subprocess/BPMN2-SubProcessWithTerminateEndEvent.bpmn2"); - final List list = new ArrayList<>(); - kruntime.getProcessEventManager().addEventListener(new DefaultKogitoProcessEventListener() { + public void testSubProcessWithTerminateEndEvent() { + Application app = ProcessTestHelper.newApplication(); + EventTrackerProcessListener listener = new EventTrackerProcessListener(); + ProcessTestHelper.registerProcessEventListener(app, listener); + org.kie.kogito.process.Process processDefinition = SubProcessWithTerminateEndEventProcess.newProcess(app); + SubProcessWithTerminateEndEventModel model = processDefinition.createModel(); + + org.kie.kogito.process.ProcessInstance instance = processDefinition.createInstance(model); + instance.start(); + Set processNodeEvents = listener.tracked().stream() + .map(ProcessNodeEvent::getNodeInstance) + .collect(Collectors.toSet()); + assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED); + assertThat(processNodeEvents).hasSize(7); - @Override - public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { - list.add(event.getNodeInstance().getNodeName()); - } - }); - KogitoProcessInstance processInstance = kruntime.startProcess("SubProcessWithTerminateEndEvent"); - assertProcessInstanceCompleted(processInstance); - assertThat(list).hasSize(7); } @Test - public void testSubProcessWithTerminateEndEventProcessScope() - throws Exception { - kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/subprocess/BPMN2-SubProcessWithTerminateEndEventProcessScope.bpmn2"); - final List list = new ArrayList<>(); - kruntime.getProcessEventManager().addEventListener(new DefaultKogitoProcessEventListener() { + public void testSubProcessWithTerminateEndEventProcessScope() { + + Application app = ProcessTestHelper.newApplication(); + final List nodeList = new ArrayList<>(); + EventTrackerProcessListener listener = new EventTrackerProcessListener() { @Override public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { - list.add(event.getNodeInstance().getNodeName()); + NodeInstance nodeInstance = event.getNodeInstance(); + if (!(nodeInstance instanceof EndNodeInstance || nodeInstance instanceof StartNodeInstance)) { + nodeList.add(nodeInstance.getNodeName()); + } } - }); - KogitoProcessInstance processInstance = kruntime.startProcess("SubProcessWithTerminateEndEventProcessScope"); - assertProcessInstanceCompleted(processInstance); - assertThat(list).hasSize(5); + }; + ProcessTestHelper.registerProcessEventListener(app, listener); + org.kie.kogito.process.Process processDefinition = SubProcessWithTerminateEndEventProcessScopeProcess.newProcess(app); + SubProcessWithTerminateEndEventProcessScopeModel model = processDefinition.createModel(); + + org.kie.kogito.process.ProcessInstance instance = processDefinition.createInstance(model); + instance.start(); + assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_COMPLETED); + assertThat(nodeList).hasSize(3); } @Test @@ -895,17 +925,19 @@ public void testSendTask() { @Test public void testReceiveTask() throws Exception { + Application app = ProcessTestHelper.newApplication(); kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/task/BPMN2-ReceiveTask.bpmn2"); ReceiveTaskHandler receiveTaskHandler = new ReceiveTaskHandler(kruntime); - - kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Receive Task", - receiveTaskHandler); - KogitoWorkflowProcessInstance processInstance = (KogitoWorkflowProcessInstance) kruntime - .startProcess("ReceiveTask"); - assertProcessInstanceActive(processInstance); + ProcessTestHelper.registerHandler(app, "Receive Task", receiveTaskHandler); + org.kie.kogito.process.Process processDefinition = ReceiveTaskProcess.newProcess(app); + ReceiveTaskModel model = processDefinition.createModel(); + org.kie.kogito.process.ProcessInstance instance = processDefinition.createInstance(model); + instance.start(); + assertThat(instance).extracting(ProcessInstance::status).isEqualTo(ProcessInstance.STATE_ACTIVE); receiveTaskHandler.setKnowledgeRuntime(kruntime); receiveTaskHandler.messageReceived("HelloMessage", "Hello john!"); - assertProcessInstanceFinished(processInstance, kruntime); + ProcessTestHelper.completeWorkItem(instance, "john", Collections.emptyMap()); + assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED); } @Test diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/VariableTagsTest.java b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/VariableTagsTest.java index 20542c6671f..90d63909c93 100644 --- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/VariableTagsTest.java +++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/VariableTagsTest.java @@ -22,11 +22,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import org.drools.io.ClassPathResource; import org.jbpm.bpmn2.objects.TestWorkItemHandler; +import org.jbpm.bpmn2.tags.ApprovalWithRequiredVariableTagsProcess; +import org.jbpm.process.core.context.variable.Variable; +import org.jbpm.ruleflow.core.RuleFlowProcess; +import org.jbpm.test.utils.ProcessTestHelper; import org.junit.jupiter.api.Test; import org.kie.api.event.process.ProcessVariableChangedEvent; +import org.kie.kogito.Application; import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener; import org.kie.kogito.internal.process.runtime.KogitoProcessInstance; import org.kie.kogito.internal.process.runtime.KogitoWorkItem; @@ -36,11 +42,25 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.entry; import static org.kie.kogito.internal.process.runtime.KogitoProcessInstance.STATE_ABORTED; import static org.kie.kogito.internal.process.runtime.KogitoProcessInstance.STATE_ACTIVE; public class VariableTagsTest extends JbpmBpmn2TestCase { + @Test + public void testVariableMultipleMetadata() throws Exception { + Application app = ProcessTestHelper.newApplication(); + ApprovalWithRequiredVariableTagsProcess processDefinition = (ApprovalWithRequiredVariableTagsProcess) ApprovalWithRequiredVariableTagsProcess.newProcess(app); + + RuleFlowProcess processEngine = (RuleFlowProcess) processDefinition.process(); + Optional var = processEngine.getVariableScope().getVariables().stream().filter(e -> "approver".equals(e.getName())).findAny(); + assertThat(var).isPresent(); + assertThat(var.get().getMetaData()).hasSize(3); + assertThat(var.get().getMetaData()).containsExactly(entry("approver", "approver"), entry("customTags", "required"), entry("ItemSubjectRef", "ItemDefinition_9")); + + } + @Test public void testProcessWithMissingRequiredVariable() throws Exception { kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/tags/BPMN2-ApprovalWithRequiredVariableTags.bpmn2"); diff --git a/jbpm/jbpm-tests/src/test/resources/compensation/unimplemented/BPMN2-Compensation-Transaction.bpmn2 b/jbpm/jbpm-tests/src/test/resources/compensation/unimplemented/BPMN2-Compensation-Transaction.bpmn2 deleted file mode 100755 index 69928fe1b46..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/compensation/unimplemented/BPMN2-Compensation-Transaction.bpmn2 +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - - - - _1-_2 - - - - _1-_2 - _2-_3 - - _2-1-_2-2 - - - - _2-1-_2-2 - _2-2-_2-3 - System.out.println("x = "); - - - - _2-2-_2-3 - _2-3-2-4a - _2-3-2-4c - - - return x == "normal"; - - - return x == "cancel"; - - - _2-3-2-4a - - - _2-3-2-4c - - - - - - - System.out.println("x = "); - - - - - _2-_3 - - - - _10 - - - - _10 - System.out.println("x = "); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jbpm/jbpm-tests/src/test/resources/compensation/unimplemented/BPMN2-TravelBookingExample.bpmn2 b/jbpm/jbpm-tests/src/test/resources/compensation/unimplemented/BPMN2-TravelBookingExample.bpmn2 deleted file mode 100755 index 5392de2174c..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/compensation/unimplemented/BPMN2-TravelBookingExample.bpmn2 +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process1.bpmn2 b/jbpm/jbpm-tests/src/test/resources/correlationkey/Process1.bpmn2 deleted file mode 100755 index 7698cb20c35..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process1.bpmn2 +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - _C49952D8-3347-45A0-954A-EFB585B6F3B8 - - - - - - - - _C49952D8-3347-45A0-954A-EFB585B6F3B8 - _6DF23EF1-3C05-4974-9ACA-DB5FD86E0662 - - - - - - - - - - _6DF23EF1-3C05-4974-9ACA-DB5FD86E0662 - _0FCFBC75-ED97-4A46-975D-A0477EFA0767 - - - - - - - - _0FCFBC75-ED97-4A46-975D-A0477EFA0767 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _nPBtwMLiEeiG6-VRHK3TqQ - _nPBtwMLiEeiG6-VRHK3TqQ - - diff --git a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process2.bpmn2 b/jbpm/jbpm-tests/src/test/resources/correlationkey/Process2.bpmn2 deleted file mode 100755 index 166ebc84aee..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process2.bpmn2 +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - _AC6A8707-5DF1-4D21-8C80-41452B4D93E6 - - - - - - - - _AC6A8707-5DF1-4D21-8C80-41452B4D93E6 - _A3AEB5E4-43F9-447B-86C2-F9B0539148CF - - - - - - - - - - _A3AEB5E4-43F9-447B-86C2-F9B0539148CF - _8146887F-EC59-4764-8EE8-F7188A3B244A - - - - - - - - _8146887F-EC59-4764-8EE8-F7188A3B244A - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _pPzSsMLiEeiG6-VRHK3TqQ - _pPzSsMLiEeiG6-VRHK3TqQ - - diff --git a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process3.bpmn2 b/jbpm/jbpm-tests/src/test/resources/correlationkey/Process3.bpmn2 deleted file mode 100755 index ebda1acc755..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process3.bpmn2 +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - _227BBF90-3EC7-4911-80B3-D2C12C172E07 - - - - - - - - _227BBF90-3EC7-4911-80B3-D2C12C172E07 - _943009C4-792F-462A-AF81-5A20C5B4D2C6 - - - - - - - - - - _943009C4-792F-462A-AF81-5A20C5B4D2C6 - _376B2FD2-96C2-48FA-9A7A-BF30F2DBB4AF - - - - - - - - _376B2FD2-96C2-48FA-9A7A-BF30F2DBB4AF - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _rQD6QMLiEeiG6-VRHK3TqQ - _rQD6QMLiEeiG6-VRHK3TqQ - - diff --git a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process4.bpmn2 b/jbpm/jbpm-tests/src/test/resources/correlationkey/Process4.bpmn2 deleted file mode 100755 index 2d2311fd3fa..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process4.bpmn2 +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - _AB7A0A8F-5BB7-4432-A133-FBB1117FFC69 - - - - - - - - _AB7A0A8F-5BB7-4432-A133-FBB1117FFC69 - _326982AC-3AE5-4383-A25D-ECC30B17C2BE - - - - - - - - - - _326982AC-3AE5-4383-A25D-ECC30B17C2BE - _51579233-3949-4142-8B20-B20B1E6A8566 - - - - - - - - _51579233-3949-4142-8B20-B20B1E6A8566 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _tVYA8MLiEeiG6-VRHK3TqQ - _tVYA8MLiEeiG6-VRHK3TqQ - - diff --git a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process5.bpmn2 b/jbpm/jbpm-tests/src/test/resources/correlationkey/Process5.bpmn2 deleted file mode 100755 index c270809f499..00000000000 --- a/jbpm/jbpm-tests/src/test/resources/correlationkey/Process5.bpmn2 +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - _608D663D-B91B-4D76-A521-57542AA715FD - - - - - - - - _608D663D-B91B-4D76-A521-57542AA715FD - _7EEE8F72-8D01-4BEC-9E56-21E97DE6A175 - - - - - - - - - - _7EEE8F72-8D01-4BEC-9E56-21E97DE6A175 - _F8BAA499-95A4-4B35-8AB9-A234355DF618 - - - - - - - - - - _F8BAA499-95A4-4B35-8AB9-A234355DF618 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _51jkAMLiEeiG6-VRHK3TqQ - _51jkAMLiEeiG6-VRHK3TqQ - - diff --git a/kogito-bom/pom.xml b/kogito-bom/pom.xml index ff530de56e8..6e6671e62e3 100755 --- a/kogito-bom/pom.xml +++ b/kogito-bom/pom.xml @@ -2588,28 +2588,6 @@ ${project.version} sources - - org.kie - kie-addons-quarkus-tracing-decision - ${project.version} - - - org.kie - kie-addons-quarkus-tracing-decision - ${project.version} - sources - - - org.kie - kie-addons-quarkus-tracing-decision-deployment - ${project.version} - - - org.kie - kie-addons-quarkus-tracing-decision-deployment - ${project.version} - sources - org.kie kie-addons-springboot-tracing-decision diff --git a/kogito-build/kogito-dependencies-bom/pom.xml b/kogito-build/kogito-dependencies-bom/pom.xml index 818b4113931..9e0e21dea0d 100644 --- a/kogito-build/kogito-dependencies-bom/pom.xml +++ b/kogito-build/kogito-dependencies-bom/pom.xml @@ -37,7 +37,7 @@ 3.8.4 ${version.io.quarkus} - 3.2.5 + 3.2.6 3.6.1 1.78.1 diff --git a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java index 3cec858b915..63610ad6b71 100644 --- a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java +++ b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java @@ -436,7 +436,7 @@ protected final MakeNodeResult filterAndMergeNode(RuleFlowNodeContainerFactory startNode, currentNode; if (fromStateExpr != null) { diff --git a/quarkus/addons/pom.xml b/quarkus/addons/pom.xml index d579b4aa5eb..eb068baddb0 100644 --- a/quarkus/addons/pom.xml +++ b/quarkus/addons/pom.xml @@ -55,7 +55,6 @@ monitoring process-svg task-notification - tracing-decision task-management marshallers process-definitions diff --git a/quarkus/extensions/kogito-quarkus-processes-extension/kogito-quarkus-processes-deployment/src/main/java/org/kie/kogito/quarkus/processes/deployment/KogitoDevServicesProcessor.java b/quarkus/extensions/kogito-quarkus-processes-extension/kogito-quarkus-processes-deployment/src/main/java/org/kie/kogito/quarkus/processes/deployment/KogitoDevServicesProcessor.java index 05fb6777d5d..51e9b5b090c 100644 --- a/quarkus/extensions/kogito-quarkus-processes-extension/kogito-quarkus-processes-deployment/src/main/java/org/kie/kogito/quarkus/processes/deployment/KogitoDevServicesProcessor.java +++ b/quarkus/extensions/kogito-quarkus-processes-extension/kogito-quarkus-processes-deployment/src/main/java/org/kie/kogito/quarkus/processes/deployment/KogitoDevServicesProcessor.java @@ -27,6 +27,7 @@ import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.arc.processor.DotNames; +import io.quarkus.deployment.Capabilities; import io.quarkus.deployment.IsDevelopment; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; @@ -36,6 +37,8 @@ import io.quarkus.devui.spi.page.CardPageBuildItem; import io.quarkus.devui.spi.page.Page; +import static org.kie.kogito.quarkus.workflow.devservices.DataIndexEventPublisher.KOGITO_DATA_INDEX; + /** * Starts a Data Index as dev service if needed. */ @@ -49,16 +52,25 @@ public void logger(BuildProducer additionalBean, Launch } @BuildStep(onlyIf = { GlobalDevServicesConfig.Enabled.class, IsDevelopment.class }) - CardPageBuildItem createDevUILink(List systemPropertyBuildItems) { - Optional dataindex_url_prop = getProperty(systemPropertyBuildItems, "kogito.data-index.url"); - if (dataindex_url_prop.isPresent()) { - CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); - cardPageBuildItem.addPage(Page.externalPageBuilder("Data Index GraphQL UI") - .url(dataindex_url_prop.get() + "/q/graphql-ui/") - .isHtmlContent() - .icon("font-awesome-solid:signs-post")); - return cardPageBuildItem; + CardPageBuildItem createDataIndexDevUILink(Capabilities capabilities, + KogitoWorkflowBuildTimeConfig kogitoBuildTimeConfig, + List systemPropertyBuildItems) { + + Optional dataIndexUrlProp = getProperty(systemPropertyBuildItems, KOGITO_DATA_INDEX); + + if (capabilities.isPresent(DATA_INDEX_CAPABILITY) || !areDevServicesEnabled(kogitoBuildTimeConfig) || dataIndexUrlProp.isEmpty()) { + return null; } - return null; + + CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); + cardPageBuildItem.addPage(Page.externalPageBuilder("Data Index GraphQL UI") + .url(dataIndexUrlProp.get() + "/q/graphql-ui/") + .isHtmlContent() + .icon("font-awesome-solid:signs-post")); + return cardPageBuildItem; + } + + private boolean areDevServicesEnabled(KogitoWorkflowBuildTimeConfig kogitoBuildTimeConfig) { + return kogitoBuildTimeConfig.devservices.enabled.orElse(true); } } diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowDevServicesProcessor.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowDevServicesProcessor.java index 02cba0f8d7d..31d86e51a58 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowDevServicesProcessor.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowDevServicesProcessor.java @@ -27,6 +27,7 @@ import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.arc.processor.DotNames; +import io.quarkus.deployment.Capabilities; import io.quarkus.deployment.IsDevelopment; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; @@ -36,6 +37,8 @@ import io.quarkus.devui.spi.page.CardPageBuildItem; import io.quarkus.devui.spi.page.Page; +import static org.kie.kogito.quarkus.workflow.devservices.DataIndexEventPublisher.KOGITO_DATA_INDEX; + public class ServerlessWorkflowDevServicesProcessor extends AbstractDevServicesProcessor { @BuildStep public void logger(BuildProducer additionalBean, LaunchModeBuildItem launchMode, KogitoWorkflowBuildTimeConfig config) { @@ -45,16 +48,25 @@ public void logger(BuildProducer additionalBean, Launch } @BuildStep(onlyIf = { GlobalDevServicesConfig.Enabled.class, IsDevelopment.class }) - CardPageBuildItem createDevUILink(List systemPropertyBuildItems) { - Optional dataindex_url_prop = getProperty(systemPropertyBuildItems, "kogito.data-index.url"); - if (dataindex_url_prop.isPresent()) { - CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); - cardPageBuildItem.addPage(Page.externalPageBuilder("Data Index GraphQL UI") - .url(dataindex_url_prop.get() + "/q/graphql-ui/") - .isHtmlContent() - .icon("font-awesome-solid:signs-post")); - return cardPageBuildItem; + CardPageBuildItem createDataIndexDevUILink(Capabilities capabilities, + KogitoWorkflowBuildTimeConfig kogitoBuildTimeConfig, + List systemPropertyBuildItems) { + + Optional dataIndexUrlProp = getProperty(systemPropertyBuildItems, KOGITO_DATA_INDEX); + + if (capabilities.isPresent(DATA_INDEX_CAPABILITY) || !areDevServicesEnabled(kogitoBuildTimeConfig) || dataIndexUrlProp.isEmpty()) { + return null; } - return null; + + CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); + cardPageBuildItem.addPage(Page.externalPageBuilder("Data Index GraphQL UI") + .url(dataIndexUrlProp.get() + "/q/graphql-ui/") + .isHtmlContent() + .icon("font-awesome-solid:signs-post")); + return cardPageBuildItem; + } + + private boolean areDevServicesEnabled(KogitoWorkflowBuildTimeConfig kogitoBuildTimeConfig) { + return kogitoBuildTimeConfig.devservices.enabled.orElse(true); } } diff --git a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/ServerlessWorkflowCodestartTest.java b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/ServerlessWorkflowCodestartTest.java index ffce8e0e5c3..9c1dbf98c50 100644 --- a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/ServerlessWorkflowCodestartTest.java +++ b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/ServerlessWorkflowCodestartTest.java @@ -20,19 +20,23 @@ import java.util.Map; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartData; +import io.quarkus.devtools.project.BuildTool; import io.quarkus.devtools.testing.codestarts.QuarkusCodestartTest; import io.quarkus.maven.dependency.ArtifactKey; import static io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartCatalog.Language.JAVA; +@Disabled public class ServerlessWorkflowCodestartTest { @RegisterExtension public static QuarkusCodestartTest codestartTest = QuarkusCodestartTest.builder() + .buildTool(BuildTool.MAVEN) .setupStandaloneExtensionTest("org.apache.kie.sonataflow:sonataflow-quarkus") .extension(ArtifactKey.fromString("io.quarkus:quarkus-config-yaml")) .putData(QuarkusCodestartData.QuarkusDataKey.APP_CONFIG, Map.of("quarkus.devservices.enabled", "false")) diff --git a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/AbstractDevServicesProcessor.java b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/AbstractDevServicesProcessor.java index 6bbb90352cc..7517da1c86d 100644 --- a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/AbstractDevServicesProcessor.java +++ b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/AbstractDevServicesProcessor.java @@ -60,7 +60,7 @@ public abstract class AbstractDevServicesProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDevServicesProcessor.class); private static final ContainerLocator LOCATOR = new ContainerLocator(DataIndexInMemoryContainer.DEV_SERVICE_LABEL, DataIndexInMemoryContainer.PORT); - private static final String DATA_INDEX_CAPABILITY = "org.kie.kogito.data-index"; + protected static final String DATA_INDEX_CAPABILITY = "org.kie.kogito.data-index"; static Closeable closeable; static DataIndexDevServiceConfig cfg; static volatile boolean first = true;