This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new f8c8f2ef12 [Fix #3524] Use timeout per Event state, not per Event type
(#3528)
f8c8f2ef12 is described below
commit f8c8f2ef12b47f3d0d0ed97e2f94d71e4910ab93
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Mon May 27 12:28:50 2024 +0200
[Fix #3524] Use timeout per Event state, not per Event type (#3528)
---
.../handlers/CompositeContextNodeHandler.java | 1 -
.../workflow/parser/handlers/EventHandler.java | 58 +++++++---------------
.../parser/handlers/ForEachStateHandler.java | 1 +
.../workflow/parser/handlers/OperationHandler.java | 5 +-
.../workflow/parser/handlers/ParallelHandler.java | 1 +
5 files changed, 23 insertions(+), 43 deletions(-)
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/CompositeContextNodeHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/CompositeContextNodeHandler.java
index 052b720f40..c4341e399a 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/CompositeContextNodeHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/CompositeContextNodeHandler.java
@@ -83,7 +83,6 @@ public abstract class CompositeContextNodeHandler<S extends
State> extends State
} else {
connect(embeddedSubProcess.startNode(parserContext.newId()).name("EmbeddedStart"),
embeddedSubProcess.endNode(parserContext.newId()).name("EmbeddedEnd").terminate(true)).done();
}
- handleErrors(parserContext.factory(), embeddedSubProcess);
return embeddedSubProcess;
}
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
index 0a9c385b33..9ccecb22a7 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/EventHandler.java
@@ -33,14 +33,10 @@ import
org.kie.kogito.serverless.workflow.parser.ParserContext;
import org.kie.kogito.serverless.workflow.parser.ServerlessWorkflowParser;
import io.serverlessworkflow.api.Workflow;
-import io.serverlessworkflow.api.actions.Action;
import io.serverlessworkflow.api.events.OnEvents;
import io.serverlessworkflow.api.states.EventState;
-import static
org.kie.kogito.serverless.workflow.parser.handlers.NodeFactoryUtils.eventBasedSplitNode;
-import static
org.kie.kogito.serverless.workflow.parser.handlers.NodeFactoryUtils.joinExclusiveNode;
import static
org.kie.kogito.serverless.workflow.parser.handlers.NodeFactoryUtils.startMessageNode;
-import static
org.kie.kogito.serverless.workflow.utils.TimeoutsConfigResolver.resolveEventTimeout;
public class EventHandler extends CompositeContextNodeHandler<EventState> {
@@ -53,47 +49,27 @@ public class EventHandler extends
CompositeContextNodeHandler<EventState> {
// disable standard procedure
}
- @Override
public MakeNodeResult makeNode(RuleFlowNodeContainerFactory<?, ?> factory)
{
- return joinNodes(factory, state.getOnEvents(), this::processOnEvent);
- }
-
- private MakeNodeResult processOnEvent(RuleFlowNodeContainerFactory<?, ?>
factory, OnEvents onEvent) {
if (isStartState) {
- MakeNodeResult result = joinNodes(factory,
- onEvent.getEventRefs(), (fact, onEventRef) ->
filterAndMergeNode(fact, onEvent.getEventDataFilter(),
ServerlessWorkflowParser.DEFAULT_WORKFLOW_VAR,
- (f, inputVar, outputVar) -> buildEventNode(f,
onEventRef, inputVar, outputVar)));
- CompositeContextNodeFactory<?> embeddedSubProcess =
handleActions(makeCompositeNode(factory), onEvent.getActions());
- connect(result.getOutgoingNode(), embeddedSubProcess);
- return new MakeNodeResult(result.getIncomingNode(),
embeddedSubProcess);
+ return joinNodes(factory, state.getOnEvents(),
this::processOnEvent);
} else {
- String varName = getVarName();
- CompositeContextNodeFactory<?> embeddedSubProcess =
makeCompositeNode(factory);
- NodeFactory<?, ?> startNode =
embeddedSubProcess.startNode(parserContext.newId()).name("EmbeddedStart");
- JoinFactory<?> joinNode = null;
- String eventTimeout = resolveEventTimeout(state, workflow);
- if (eventTimeout != null) {
- // creating a split-join branch for the timer
- SplitFactory<?> splitNode =
eventBasedSplitNode(embeddedSubProcess.splitNode(parserContext.newId()),
Split.TYPE_XAND);
- joinNode =
joinExclusiveNode(embeddedSubProcess.joinNode(parserContext.newId()));
- startNode = connect(startNode, splitNode);
- createTimerNode(embeddedSubProcess, splitNode, joinNode,
eventTimeout);
- }
- MakeNodeResult result = joinNodes(embeddedSubProcess,
- onEvent.getEventRefs(), (fact, onEventRef) ->
filterAndMergeNode(fact, onEvent.getEventDataFilter(), varName,
- (f, inputVar, outputVar) -> buildEventNode(f,
onEventRef, inputVar, outputVar)));
- connect(startNode, result.getIncomingNode());
- NodeFactory<?, ?> currentNode = result.getOutgoingNode();
- for (Action action : onEvent.getActions()) {
- currentNode = connect(currentNode,
getActionNode(embeddedSubProcess, action, varName, true));
- }
- if (joinNode != null) {
- currentNode = connect(currentNode, joinNode);
- }
- connect(currentNode,
embeddedSubProcess.endNode(parserContext.newId()).name("EmbeddedEnd").terminate(true)).done();
- handleErrors(parserContext.factory(), embeddedSubProcess);
- return new MakeNodeResult(embeddedSubProcess);
+ CompositeContextNodeFactory<?> embeddedContainer =
makeCompositeNode(factory);
+
connect(connect(embeddedContainer.startNode(parserContext.newId()).name("EmbeddedStart"),
+ makeTimeoutNode(embeddedContainer,
joinNodes(embeddedContainer, state.getOnEvents(), this::processOnEvent))),
+
embeddedContainer.endNode(parserContext.newId()).name("EmbeddedEnd").terminate(true)).done();
+ handleErrors(factory, embeddedContainer);
+ return new MakeNodeResult(embeddedContainer);
}
+
+ }
+
+ private MakeNodeResult processOnEvent(RuleFlowNodeContainerFactory<?, ?>
factory, OnEvents onEvent) {
+ MakeNodeResult result = joinNodes(factory,
+ onEvent.getEventRefs(), (fact, onEventRef) ->
filterAndMergeNode(fact, onEvent.getEventDataFilter(), isStartState ?
ServerlessWorkflowParser.DEFAULT_WORKFLOW_VAR : getVarName(),
+ (f, inputVar, outputVar) -> buildEventNode(f,
onEventRef, inputVar, outputVar)));
+ CompositeContextNodeFactory<?> embeddedSubProcess =
handleActions(makeCompositeNode(factory), onEvent.getActions());
+ connect(result.getOutgoingNode(), embeddedSubProcess);
+ return new MakeNodeResult(result.getIncomingNode(),
embeddedSubProcess);
}
private <T> MakeNodeResult joinNodes(RuleFlowNodeContainerFactory<?, ?>
factory, List<T> events, BiFunction<RuleFlowNodeContainerFactory<?, ?>, T,
MakeNodeResult> function) {
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ForEachStateHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ForEachStateHandler.java
index b9fab37eea..d76cbee7f3 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ForEachStateHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ForEachStateHandler.java
@@ -54,6 +54,7 @@ public class ForEachStateHandler extends
CompositeContextNodeHandler<ForEachStat
result.completionAction(new
CollectorActionSupplier(workflow.getExpressionLang(),
state.getOutputCollection(), DEFAULT_WORKFLOW_VAR, TEMP_OUTPUT_VAR));
}
handleActions(result, state.getActions(), FOR_EACH_OUTPUT_VARIABLE,
false);
+ handleErrors(factory, result);
return new MakeNodeResult(result);
}
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/OperationHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/OperationHandler.java
index 1ea49f22c7..af278271e8 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/OperationHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/OperationHandler.java
@@ -19,6 +19,7 @@
package org.kie.kogito.serverless.workflow.parser.handlers;
import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory;
+import org.jbpm.ruleflow.core.factory.CompositeContextNodeFactory;
import org.kie.kogito.serverless.workflow.parser.ParserContext;
import io.serverlessworkflow.api.Workflow;
@@ -37,6 +38,8 @@ public class OperationHandler extends
CompositeContextNodeHandler<OperationState
@Override
public MakeNodeResult makeNode(RuleFlowNodeContainerFactory<?, ?> factory)
{
- return new MakeNodeResult(handleActions(makeCompositeNode(factory),
state.getActions()));
+ CompositeContextNodeFactory<?> embeddedContainer =
handleActions(makeCompositeNode(factory), state.getActions());
+ handleErrors(parserContext.factory(), embeddedContainer);
+ return new MakeNodeResult(embeddedContainer);
}
}
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ParallelHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ParallelHandler.java
index 044824aeda..db07cbdf22 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ParallelHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/ParallelHandler.java
@@ -66,6 +66,7 @@ public class ParallelHandler extends
CompositeContextNodeHandler<ParallelState>
for (Branch branch : state.getBranches()) {
currentBranch = branch;
CompositeContextNodeFactory<?> embeddedSubProcess =
handleActions(makeCompositeNode(factory, getName(branch)), branch.getActions());
+ handleErrors(factory, embeddedSubProcess);
WorkflowElementIdentifier branchId =
embeddedSubProcess.getNode().getId();
embeddedSubProcess.done().connection(nodeFactory.getNode().getId(),
branchId).connection(branchId, connectionNode.getNode().getId());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]