You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kie.apache.org by eg...@apache.org on 2024/06/17 13:15:31 UTC

(incubator-kie-kogito-runtimes) branch main updated: [incubator-kie-issues-1287] Intermediate Catch / Throw missing functionality (#3544)

This is an automated email from the ASF dual-hosted git repository.

egonzalez 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 9e55645952 [incubator-kie-issues-1287] Intermediate Catch / Throw missing functionality (#3544)
9e55645952 is described below

commit 9e5564595278e832c54853a4538fb84964c04291
Author: Enrique <en...@ibm.com>
AuthorDate: Mon Jun 17 15:15:27 2024 +0200

    [incubator-kie-issues-1287] Intermediate Catch / Throw missing functionality (#3544)
---
 .../org/jbpm/bpmn2/xml/AbstractNodeHandler.java    |  33 ++-
 .../bpmn2/xml/IntermediateThrowEventHandler.java   |   9 +
 .../kie/kogito/process/bpmn2/BpmnProcesses.java    |  19 ++
 .../compiler/canonical/AbstractNodeVisitor.java    |  68 +++--
 .../jbpm/compiler/canonical/StartNodeVisitor.java  |   6 +-
 .../builtin/JavaConstraintEvaluatorBuilder.java    |   1 -
 .../org/jbpm/process/builder/EventNodeBuilder.java |   4 -
 .../jbpm/process/builder/ExtendedNodeBuilder.java  |  10 -
 .../transformation/DataTransformerCompiler.java    |  39 ---
 .../DataTransformerCompilerRegistry.java           |  72 ------
 .../DefaultDataTransformerCompiler.java            |  57 -----
 .../JavaDataTransformerCompiler.java               |  65 -----
 .../process/core/impl/DataTransformerRegistry.java |  65 -----
 .../core/transformation/JavaDataTransformer.java   |  39 ---
 .../core/transformation/MVELDataTransformer.java   |  74 ------
 .../process/instance/KogitoProcessContextImpl.java |   2 +-
 .../impl/MVELInterpretedReturnValueEvaluator.java  |   4 +-
 .../instance/impl/XPATHReturnValueEvaluator.java   |   2 +-
 .../instance/impl/actions/ProduceEventAction.java  |   6 +-
 .../main/java/org/jbpm/ruleflow/core/Metadata.java |   1 +
 .../jbpm/workflow/core/impl/DataAssociation.java   |  14 +
 .../org/jbpm/workflow/core/impl/NodeIoHelper.java  |   7 +-
 .../jbpm/workflow/core/node/Transformation.java    |  10 +-
 .../instance/impl/WorkflowProcessInstanceImpl.java |  18 +-
 .../kie/kogito/process/impl/AbstractProcess.java   |  18 ++
 .../java/org/jbpm/bpmn2/objects/Account.java       |   0
 .../java/org/jbpm/bpmn2/objects/Address.java       |   0
 .../bpmn2/objects/ExceptionOnPurposeHandler.java   |   0
 .../org/jbpm/bpmn2/objects/ExceptionService.java   |   0
 .../java/org/jbpm/bpmn2/objects/HelloService.java  |   0
 .../java/org/jbpm/bpmn2/objects/MyError.java       |   0
 .../bpmn2/objects/NotAvailableGoodsReport.java     |   0
 .../java/org/jbpm/bpmn2/objects/Order.java         |   0
 .../java/org/jbpm/bpmn2/objects/Person.java        |   0
 .../java/org/jbpm/bpmn2/objects/Status.java        |   0
 .../jbpm/bpmn2/objects/TestWorkItemHandler.java    |   0
 ...ediateCatchEventMessageWithTransformation.bpmn2 |   6 +-
 ...termediateCatchEventNoIncommingConnection.bpmn2 |   2 +-
 .../BPMN2-IntermediateCatchEventSignal2.bpmn2      |   2 +-
 ...mediateCatchEventSignalWithTransformation.bpmn2 |   6 +-
 .../BPMN2-IntermediateCatchEventTimerCycle3.bpmn2  |   2 +-
 ...PMN2-IntermediateCatchEventTimerCycleCron.bpmn2 |   4 +-
 ...ermediateCatchEventTimerDurationWithError.bpmn2 |  13 +-
 ...2-IntermediateCatchSignalBetweenUserTasks.bpmn2 |   2 +-
 .../BPMN2-IntermediateThrowEventMessage.bpmn2      |   0
 ...ediateThrowEventMessageWithTransformation.bpmn2 |   4 +-
 ...mediateThrowEventSignalWithTransformation.bpmn2 |   4 +-
 ...ceProcessWithMvelCollectionTransformation.bpmn2 |   8 +-
 ...-ServiceProcessWithMvelJaxbTransformation.bpmn2 |  26 +-
 ...PMN2-ServiceProcessWithMvelTransformation.bpmn2 |   2 +-
 .../BPMN2-SignalStartWithTransformation.bpmn2      |   2 +-
 .../src/test/java/org/jbpm/bpmn2/ActivityTest.java | 125 ++++-----
 .../java/org/jbpm/bpmn2/IntermediateEventTest.java | 282 +++++++++++++--------
 .../org/jbpm/bpmn2/StandaloneBPMNProcessTest.java  |  26 +-
 .../test/java/org/jbpm/bpmn2/StartEventTest.java   |  29 ++-
 .../tools/maven/ProcessCodeGenerationSupport.java  |  45 ++++
 ...oundarySignalEventOnTaskWithTransformation.bpmn | 194 --------------
 .../BPMN2-DataInputAssociations-two-assigns.bpmn2  |  60 -----
 .../BPMN2-DataOutputAssociations-HumanTask.bpmn2   |  57 -----
 ...diateThrowEventMessageWithTransformation.bpmn2} |   5 +-
 .../BPMN2-SubProcessWithEntryExitScripts.bpmn2     | 196 --------------
 .../src/main/bpmn/BPMN2-XpathExpression.bpmn2      | 114 ---------
 .../workflow/parser/handlers/NodeFactoryUtils.java |   5 +-
 .../suppliers/ProduceEventActionSupplier.java      |   4 +-
 .../workflow/ServerlessWorkflowParsingTest.java    |   2 +-
 65 files changed, 531 insertions(+), 1339 deletions(-)

diff --git a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
index 7a16ef7380..e8429c2272 100755
--- a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
+++ b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/AbstractNodeHandler.java
@@ -49,7 +49,8 @@ import org.jbpm.process.core.ContextContainer;
 import org.jbpm.process.core.context.variable.Variable;
 import org.jbpm.process.core.context.variable.VariableScope;
 import org.jbpm.process.core.datatype.DataTypeResolver;
-import org.jbpm.process.core.impl.DataTransformerRegistry;
+import org.jbpm.process.instance.impl.MVELInterpretedReturnValueEvaluator;
+import org.jbpm.process.instance.impl.ReturnValueEvaluator;
 import org.jbpm.ruleflow.core.RuleFlowProcess;
 import org.jbpm.ruleflow.core.WorkflowElementIdentifierFactory;
 import org.jbpm.util.PatternConstants;
@@ -57,6 +58,7 @@ import org.jbpm.workflow.core.DroolsAction;
 import org.jbpm.workflow.core.Node;
 import org.jbpm.workflow.core.NodeContainer;
 import org.jbpm.workflow.core.impl.DataAssociation;
+import org.jbpm.workflow.core.impl.DataAssociation.DataAssociationType;
 import org.jbpm.workflow.core.impl.DataDefinition;
 import org.jbpm.workflow.core.impl.DroolsConsequenceAction;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
@@ -74,7 +76,6 @@ import org.jbpm.workflow.core.node.ForEachNode;
 import org.jbpm.workflow.core.node.StateNode;
 import org.jbpm.workflow.core.node.TimerNode;
 import org.jbpm.workflow.core.node.Transformation;
-import org.kie.api.runtime.process.DataTransformer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
@@ -425,7 +426,10 @@ public abstract class AbstractNodeHandler extends BaseAbstractHandler implements
         while (xmlNode != null) {
             String nodeName = xmlNode.getNodeName();
             if ("dataOutputAssociation".equals(nodeName)) {
-                readDataAssociation((Element) xmlNode, id -> ioSpec.getDataOutput().get(id), id -> getVariableDataSpec(parser, id)).ifPresent(e -> ioSpec.getDataOutputAssociation().add(e));
+                readDataAssociation((Element) xmlNode, id -> ioSpec.getDataOutput().get(id), id -> getVariableDataSpec(parser, id)).ifPresent(e -> {
+                    e.setType(DataAssociationType.OUTPUT);
+                    ioSpec.getDataOutputAssociation().add(e);
+                });
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -440,7 +444,10 @@ public abstract class AbstractNodeHandler extends BaseAbstractHandler implements
         while (xmlNode != null) {
             String nodeName = xmlNode.getNodeName();
             if ("dataInputAssociation".equals(nodeName)) {
-                readDataAssociation((Element) xmlNode, id -> getVariableDataSpec(parser, id), id -> ioSpec.getDataInput().get(id)).ifPresent(e -> ioSpec.getDataInputAssociation().add(e));
+                readDataAssociation((Element) xmlNode, id -> getVariableDataSpec(parser, id), id -> ioSpec.getDataInput().get(id)).ifPresent(e -> {
+                    e.setType(DataAssociationType.INPUT);
+                    ioSpec.getDataInputAssociation().add(e);
+                });
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -457,9 +464,15 @@ public abstract class AbstractNodeHandler extends BaseAbstractHandler implements
                 ioSpec.getDataInputs().addAll(readDataInput(parser, xmlNode));
                 ioSpec.getDataOutputs().addAll(readDataOutput(parser, xmlNode));
             } else if ("dataInputAssociation".equals(nodeName)) {
-                readDataAssociation((Element) xmlNode, id -> getVariableDataSpec(parser, id), id -> ioSpec.getDataInput().get(id)).ifPresent(e -> ioSpec.getDataInputAssociation().add(e));
+                readDataAssociation((Element) xmlNode, id -> getVariableDataSpec(parser, id), id -> ioSpec.getDataInput().get(id)).ifPresent(e -> {
+                    e.setType(DataAssociationType.INPUT);
+                    ioSpec.getDataInputAssociation().add(e);
+                });
             } else if ("dataOutputAssociation".equals(nodeName)) {
-                readDataAssociation((Element) xmlNode, id -> ioSpec.getDataOutput().get(id), id -> getVariableDataSpec(parser, id)).ifPresent(e -> ioSpec.getDataOutputAssociation().add(e));
+                readDataAssociation((Element) xmlNode, id -> ioSpec.getDataOutput().get(id), id -> getVariableDataSpec(parser, id)).ifPresent(e -> {
+                    e.setType(DataAssociationType.OUTPUT);
+                    ioSpec.getDataOutputAssociation().add(e);
+                });
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -561,11 +574,11 @@ public abstract class AbstractNodeHandler extends BaseAbstractHandler implements
         String lang = element.get().getAttribute("language");
         String expression = element.get().getTextContent();
 
-        DataTransformer transformer = DataTransformerRegistry.get().find(lang);
-        if (transformer == null) {
-            throw new ProcessParsingValidationException("No transformer registered for language " + lang);
+        ReturnValueEvaluator evaluator = null;
+        if (lang.toLowerCase().contains("mvel")) {
+            evaluator = new MVELInterpretedReturnValueEvaluator(expression);
         }
-        return new Transformation(lang, expression);
+        return new Transformation(lang, expression, evaluator);
     }
 
     protected List<DataDefinition> readSources(org.w3c.dom.Node parent, Function<String, DataDefinition> variableResolver) {
diff --git a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
index 033076b8ab..5086c71990 100755
--- a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
+++ b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/xml/IntermediateThrowEventHandler.java
@@ -49,7 +49,11 @@ import org.xml.sax.SAXException;
 
 import static org.jbpm.bpmn2.xml.ProcessHandler.createJavaAction;
 import static org.jbpm.ruleflow.core.Metadata.EVENT_TYPE;
+import static org.jbpm.ruleflow.core.Metadata.EVENT_TYPE_COMPENSATION;
+import static org.jbpm.ruleflow.core.Metadata.EVENT_TYPE_ESCALATION;
+import static org.jbpm.ruleflow.core.Metadata.EVENT_TYPE_LINK;
 import static org.jbpm.ruleflow.core.Metadata.EVENT_TYPE_MESSAGE;
+import static org.jbpm.ruleflow.core.Metadata.EVENT_TYPE_SIGNAL;
 import static org.jbpm.ruleflow.core.Metadata.MAPPING_VARIABLE;
 import static org.jbpm.ruleflow.core.Metadata.MAPPING_VARIABLE_INPUT;
 import static org.jbpm.ruleflow.core.Metadata.MESSAGE_TYPE;
@@ -87,21 +91,25 @@ public class IntermediateThrowEventHandler extends AbstractNodeHandler {
                 // reuse already created ActionNode
                 setThrowVariable(ioSpecification, node);
                 handleSignalNode(node, element, uri, localName, parser);
+                node.setMetaData(EVENT_TYPE, EVENT_TYPE_SIGNAL);
                 break;
             } else if ("messageEventDefinition".equals(nodeName)) {
                 // reuse already created ActionNode
                 setThrowVariable(ioSpecification, node);
                 handleMessageNode(node, element, uri, localName, parser);
+                node.setMetaData(EVENT_TYPE, EVENT_TYPE_MESSAGE);
                 break;
             } else if ("escalationEventDefinition".equals(nodeName)) {
                 // reuse already created ActionNode
                 setThrowVariable(ioSpecification, node);
                 handleEscalationNode(node, element, uri, localName, parser);
+                node.setMetaData(EVENT_TYPE, EVENT_TYPE_ESCALATION);
                 break;
             } else if ("compensateEventDefinition".equals(nodeName)) {
                 // reuse already created ActionNode
                 setThrowVariable(ioSpecification, node);
                 handleThrowCompensationEventNode(node, element, uri, localName, parser);
+                node.setMetaData(EVENT_TYPE, EVENT_TYPE_COMPENSATION);
                 break;
             } else if ("linkEventDefinition".equals(nodeName)) {
                 ThrowLinkNode linkNode = new ThrowLinkNode();
@@ -109,6 +117,7 @@ public class IntermediateThrowEventHandler extends AbstractNodeHandler {
                 node = linkNode;
                 setThrowVariable(ioSpecification, node);
                 handleLinkNode(element, node, xmlNode, parser);
+                node.setMetaData(EVENT_TYPE, EVENT_TYPE_LINK);
             }
             xmlNode = xmlNode.getNextSibling();
         }
diff --git a/jbpm/jbpm-bpmn2/src/main/java/org/kie/kogito/process/bpmn2/BpmnProcesses.java b/jbpm/jbpm-bpmn2/src/main/java/org/kie/kogito/process/bpmn2/BpmnProcesses.java
index 931a0ee886..ab043f7d3b 100644
--- a/jbpm/jbpm-bpmn2/src/main/java/org/kie/kogito/process/bpmn2/BpmnProcesses.java
+++ b/jbpm/jbpm-bpmn2/src/main/java/org/kie/kogito/process/bpmn2/BpmnProcesses.java
@@ -21,6 +21,7 @@ package org.kie.kogito.process.bpmn2;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 import org.kie.kogito.Model;
 import org.kie.kogito.process.Process;
@@ -44,4 +45,22 @@ public class BpmnProcesses implements Processes {
     public Collection<String> processIds() {
         return mappedProcesses.keySet();
     }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mappedProcesses.keySet());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        BpmnProcesses other = (BpmnProcesses) obj;
+        return Objects.equals(mappedProcesses, other.mappedProcesses);
+    }
+
 }
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
index 27595fe2e7..b548f30477 100644
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
+++ b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/AbstractNodeVisitor.java
@@ -24,21 +24,27 @@ import java.util.Objects;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import org.jbpm.compiler.canonical.builtin.ReturnValueEvaluatorBuilderService;
 import org.jbpm.process.builder.action.ActionCompilerRegistry;
-import org.jbpm.process.builder.transformation.DataTransformerCompilerRegistry;
+import org.jbpm.process.core.Context;
 import org.jbpm.process.core.ContextContainer;
+import org.jbpm.process.core.ContextResolver;
 import org.jbpm.process.core.context.variable.Mappable;
 import org.jbpm.process.core.context.variable.Variable;
 import org.jbpm.process.core.context.variable.VariableScope;
+import org.jbpm.process.core.datatype.DataTypeResolver;
 import org.jbpm.process.instance.impl.actions.ProduceEventAction;
 import org.jbpm.process.instance.impl.actions.SignalProcessInstanceAction;
 import org.jbpm.ruleflow.core.Metadata;
 import org.jbpm.ruleflow.core.factory.MappableNodeFactory;
+import org.jbpm.util.JbpmClassLoaderUtil;
 import org.jbpm.workflow.core.impl.ConnectionImpl;
 import org.jbpm.workflow.core.impl.DataAssociation;
+import org.jbpm.workflow.core.impl.DataAssociation.DataAssociationType;
 import org.jbpm.workflow.core.impl.DataDefinition;
 import org.jbpm.workflow.core.impl.DroolsConsequenceAction;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
+import org.jbpm.workflow.core.impl.NodeImpl;
 import org.jbpm.workflow.core.node.Assignment;
 import org.jbpm.workflow.core.node.HumanTaskNode;
 import org.jbpm.workflow.core.node.StartNode;
@@ -46,6 +52,7 @@ import org.jbpm.workflow.core.node.Transformation;
 import org.kie.api.definition.process.Connection;
 import org.kie.api.definition.process.Node;
 
+import com.github.javaparser.StaticJavaParser;
 import com.github.javaparser.ast.NodeList;
 import com.github.javaparser.ast.body.Parameter;
 import com.github.javaparser.ast.expr.AssignExpr;
@@ -215,24 +222,25 @@ public abstract class AbstractNodeVisitor<T extends Node> extends AbstractVisito
 
     protected void addNodeMappings(Mappable node, BlockStmt body, String variableName) {
         for (DataAssociation entry : node.getInAssociations()) {
-            body.addStatement(getFactoryMethod(variableName, MappableNodeFactory.METHOD_IN_ASSOCIATION, buildDataAssociationExpression(entry)));
+            body.addStatement(getFactoryMethod(variableName, MappableNodeFactory.METHOD_IN_ASSOCIATION, buildDataAssociationExpression((NodeImpl) node, entry)));
         }
         for (DataAssociation entry : node.getOutAssociations()) {
-            body.addStatement(getFactoryMethod(variableName, MappableNodeFactory.METHOD_OUT_ASSOCIATION, buildDataAssociationExpression(entry)));
+            body.addStatement(getFactoryMethod(variableName, MappableNodeFactory.METHOD_OUT_ASSOCIATION, buildDataAssociationExpression((NodeImpl) node, entry)));
         }
     }
 
-    protected Expression buildDataAssociationsExpression(List<DataAssociation> dataAssociations) {
-        NodeList<Expression> expressions = NodeList.nodeList(dataAssociations.stream().map(this::buildDataAssociationExpression).collect(Collectors.toList()));
+    protected Expression buildDataAssociationsExpression(NodeImpl node, List<DataAssociation> dataAssociations) {
+        NodeList<Expression> expressions = NodeList.nodeList(dataAssociations.stream().map(da -> buildDataAssociationExpression(node, da)).collect(Collectors.toList()));
         return new MethodCallExpr(null, "java.util.Arrays.asList", NodeList.nodeList(expressions));
     }
 
-    protected Expression buildDataAssociationExpression(DataAssociation dataAssociation) {
+    protected Expression buildDataAssociationExpression(NodeImpl node, DataAssociation dataAssociation) {
         List<DataDefinition> sourceExpr = dataAssociation.getSources();
         DataDefinition targetExpr = dataAssociation.getTarget();
         Transformation transformation = dataAssociation.getTransformation();
         List<Assignment> assignments = dataAssociation.getAssignments();
-        return toDataAssociation(toDataDef(sourceExpr), toDataDef(targetExpr), toAssignmentExpr(assignments), toTransformation(sourceExpr, singletonList(targetExpr), transformation));
+        return toDataAssociation(toDataDef(sourceExpr), toDataDef(targetExpr), toAssignmentExpr(assignments),
+                toTransformation(node, dataAssociation.getType(), sourceExpr, singletonList(targetExpr), transformation));
     }
 
     private Expression toAssignmentExpr(List<Assignment> assignments) {
@@ -252,16 +260,44 @@ public abstract class AbstractNodeVisitor<T extends Node> extends AbstractVisito
         return new MethodCallExpr(null, "java.util.Arrays.asList", NodeList.nodeList(expressions));
     }
 
-    protected Expression toTransformation(List<DataDefinition> inputs, List<DataDefinition> outputs, Transformation transformation) {
+    protected Expression toTransformation(NodeImpl node, DataAssociationType type, List<DataDefinition> inputs, List<DataDefinition> outputs, Transformation transformation) {
         if (transformation == null) {
             return new NullLiteralExpr();
         }
+
         Expression lang = new StringLiteralExpr(transformation.getLanguage());
-        Expression expression = new StringLiteralExpr(transformation.getExpression());
-        Expression compiledExpression = DataTransformerCompilerRegistry.instance().find(transformation.getLanguage()).compile(inputs, outputs, transformation);
-        ClassOrInterfaceType clazz = new ClassOrInterfaceType(null, "org.jbpm.workflow.core.node.Transformation");
-        return new ObjectCreationExpr(null, clazz, NodeList.nodeList(lang, expression, compiledExpression));
+        Expression expression = new StringLiteralExpr(sanitizeString(transformation.getExpression()));
+
+        ContextResolver contextResolver = type.equals(DataAssociationType.INPUT) ? node : wrapContextResolver(node, inputs);
+
+        ReturnValueEvaluatorBuilderService service = ReturnValueEvaluatorBuilderService.instance();
+        Expression returnValueEvaluatorExpression = service.build(contextResolver, transformation.getLanguage(), transformation.getExpression(), Object.class, null);
+        ClassOrInterfaceType clazz = StaticJavaParser.parseClassOrInterfaceType(Transformation.class.getName());
+        return new ObjectCreationExpr(null, clazz, NodeList.nodeList(lang, expression, returnValueEvaluatorExpression));
+
+    }
+
+    private ContextResolver wrapContextResolver(NodeImpl node, List<DataDefinition> variables) {
+        VariableScope variableScope = new VariableScope();
+
+        for (DataDefinition variable : variables) {
+            Variable var = new Variable();
+            var.setId(variable.getId());
+            var.setName(variable.getLabel());
+            var.setType(DataTypeResolver.fromType(variable.getType(), JbpmClassLoaderUtil.findClassLoader()));
+            variableScope.addVariable(var);
+        }
+        return new ContextResolver() {
+
+            @Override
+            public Context resolveContext(String contextId, Object param) {
+                if (VariableScope.VARIABLE_SCOPE.equals(contextId)) {
+                    return variableScope.resolveContext(param);
+                }
+                return null;
+            }
 
+        };
     }
 
     protected Expression toDataAssociation(Expression sourceExprs, Expression target, Expression transformation, Expression assignments) {
@@ -360,7 +396,7 @@ public abstract class AbstractNodeVisitor<T extends Node> extends AbstractVisito
     }
 
     protected ObjectCreationExpr buildProducerAction(Node node, ProcessMetaData metadata) {
-        TriggerMetaData trigger = TriggerMetaData.of(node);
+        TriggerMetaData trigger = TriggerMetaData.of(node, (String) node.getMetaData().get(Metadata.MAPPING_VARIABLE_INPUT));
         return buildProducerAction(parseClassOrInterfaceType(ProduceEventAction.class.getCanonicalName()).setTypeArguments(NodeList.nodeList(parseClassOrInterfaceType(trigger.getDataType()))),
                 trigger, metadata);
 
@@ -369,8 +405,10 @@ public abstract class AbstractNodeVisitor<T extends Node> extends AbstractVisito
     public static ObjectCreationExpr buildProducerAction(ClassOrInterfaceType actionClass, TriggerMetaData trigger, ProcessMetaData metadata) {
         metadata.addTrigger(trigger);
         return new ObjectCreationExpr(null, actionClass, NodeList.nodeList(
-                new StringLiteralExpr(trigger.getName()), new StringLiteralExpr(trigger.getModelRef()),
-                new LambdaExpr(NodeList.nodeList(), new NameExpr("producer_" + trigger.getOwnerId()))));
+                new StringLiteralExpr(trigger.getName()),
+                new StringLiteralExpr(trigger.getModelRef()),
+                new LambdaExpr(NodeList.nodeList(),
+                        new NameExpr("producer_" + trigger.getOwnerId()))));
     }
 
     protected void visitCompensationScope(ContextContainer process, BlockStmt body) {
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/StartNodeVisitor.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/StartNodeVisitor.java
index de5c641a6f..8be94913cf 100644
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/StartNodeVisitor.java
+++ b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/StartNodeVisitor.java
@@ -84,7 +84,7 @@ public class StartNodeVisitor extends AbstractNodeVisitor<StartNode> {
 
                 body.addStatement(getFactoryMethod(getNodeId(startNode), METHOD_TRIGGER,
                         new StringLiteralExpr((String) nodeMetaData.get(TRIGGER_REF)),
-                        buildDataAssociationsExpression(startNode.getIoSpecification().getDataOutputAssociation())));
+                        buildDataAssociationsExpression(startNode, startNode.getIoSpecification().getDataOutputAssociation())));
 
                 String triggerMapping = (String) nodeMetaData.get(TRIGGER_MAPPING);
                 variable = variableScope.findVariable(triggerMapping);
@@ -99,13 +99,13 @@ public class StartNodeVisitor extends AbstractNodeVisitor<StartNode> {
             } else {
                 body.addStatement(getFactoryMethod(getNodeId(startNode), METHOD_TRIGGER,
                         new StringLiteralExpr((String) nodeMetaData.get(MESSAGE_TYPE)),
-                        buildDataAssociationsExpression(startNode.getIoSpecification().getDataOutputAssociation())));
+                        buildDataAssociationsExpression(startNode, startNode.getIoSpecification().getDataOutputAssociation())));
             }
             metadata.addSignal((String) nodeMetaData.get(MESSAGE_TYPE), variable != null ? variable.getType().getStringType() : null);
         } else {
             body.addStatement(getFactoryMethod(getNodeId(startNode), METHOD_TRIGGER,
                     new StringLiteralExpr((String) nodeMetaData.get(TRIGGER_REF)),
-                    buildDataAssociationsExpression(startNode.getIoSpecification().getDataOutputAssociation())));
+                    buildDataAssociationsExpression(startNode, startNode.getIoSpecification().getDataOutputAssociation())));
         }
     }
 
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
index e6695526cc..ae82b5fb7e 100644
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
+++ b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/builtin/JavaConstraintEvaluatorBuilder.java
@@ -63,7 +63,6 @@ public class JavaConstraintEvaluatorBuilder implements ReturnValueEvaluatorBuild
         if (blockStmt == null) {
             blockStmt = StaticJavaParser.parseBlock("{" + expression + "}");
         }
-
         Set<NameExpr> identifiers = new HashSet<>(blockStmt.findAll(NameExpr.class));
 
         for (NameExpr v : identifiers) {
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/EventNodeBuilder.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/EventNodeBuilder.java
index 57ba54137e..b5f0aaba9a 100755
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/EventNodeBuilder.java
+++ b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/EventNodeBuilder.java
@@ -22,12 +22,10 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.drools.drl.ast.descr.ProcessDescr;
-import org.jbpm.process.core.impl.DataTransformerRegistry;
 import org.jbpm.workflow.core.WorkflowProcess;
 import org.jbpm.workflow.core.node.Transformation;
 import org.kie.api.definition.process.Node;
 import org.kie.api.definition.process.Process;
-import org.kie.api.runtime.process.DataTransformer;
 
 public class EventNodeBuilder implements ProcessNodeBuilder {
 
@@ -40,8 +38,6 @@ public class EventNodeBuilder implements ProcessNodeBuilder {
             parameters.put("imports", wfProcess.getImports());
             parameters.put("classloader", context.getConfiguration().getClassLoader());
 
-            DataTransformer transformer = DataTransformerRegistry.get().find(transformation.getLanguage());
-            transformation.setCompiledExpression(transformer.compile(transformation.getExpression(), parameters));
         }
 
     }
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/ExtendedNodeBuilder.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/ExtendedNodeBuilder.java
index 64238c7aba..9f86aaea12 100755
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/ExtendedNodeBuilder.java
+++ b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/ExtendedNodeBuilder.java
@@ -27,17 +27,14 @@ import org.drools.drl.ast.descr.ActionDescr;
 import org.drools.drl.ast.descr.ProcessDescr;
 import org.jbpm.process.builder.dialect.ProcessDialect;
 import org.jbpm.process.builder.dialect.ProcessDialectRegistry;
-import org.jbpm.process.core.impl.DataTransformerRegistry;
 import org.jbpm.workflow.core.DroolsAction;
 import org.jbpm.workflow.core.impl.DataAssociation;
 import org.jbpm.workflow.core.impl.DroolsConsequenceAction;
 import org.jbpm.workflow.core.impl.ExtendedNodeImpl;
 import org.jbpm.workflow.core.impl.NodeImpl;
 import org.jbpm.workflow.core.node.Assignment;
-import org.jbpm.workflow.core.node.Transformation;
 import org.kie.api.definition.process.Node;
 import org.kie.api.definition.process.Process;
-import org.kie.api.runtime.process.DataTransformer;
 
 public class ExtendedNodeBuilder
         implements
@@ -71,13 +68,6 @@ public class ExtendedNodeBuilder
     protected void buildDataAssociation(PackageBuildContext context, Collection<DataAssociation> dataAssociations, Map<String, Object> parameters) {
 
         for (DataAssociation dataAssociation : dataAssociations) {
-            Transformation transformation = dataAssociation.getTransformation();
-            if (transformation != null) {
-
-                DataTransformer transformer = DataTransformerRegistry.get().find(transformation.getLanguage());
-                transformation.setCompiledExpression(transformer.compile(transformation.getExpression(), parameters));
-
-            }
             List<Assignment> assignments = dataAssociation.getAssignments();
             if (assignments != null) {
                 for (Assignment assignment : assignments) {
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompiler.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompiler.java
deleted file mode 100644
index 0e85a0b0b0..0000000000
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompiler.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.builder.transformation;
-
-import java.util.List;
-
-import org.jbpm.workflow.core.impl.DataDefinition;
-import org.jbpm.workflow.core.node.Transformation;
-
-import com.github.javaparser.ast.expr.Expression;
-
-public interface DataTransformerCompiler {
-
-    default String[] dialects() {
-        return new String[0];
-    }
-
-    default boolean accept(String dialect) {
-        return List.of(dialects()).contains(dialect);
-    }
-
-    Expression compile(List<DataDefinition> inputs, List<DataDefinition> outputs, Transformation source);
-}
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompilerRegistry.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompilerRegistry.java
deleted file mode 100755
index 54f506da76..0000000000
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DataTransformerCompilerRegistry.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.builder.transformation;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ServiceLoader;
-
-import org.jbpm.util.JbpmClassLoaderUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Registry for all available on runtime <code>DataTransformer</code>s for performing
- * data input and output transformation.
- * There is MVEL based transformer available out of the box that is registered under
- * <code>http://www.mvel.org/2.0</code> key.
- * <br/>
- * Custom implementations can be provided and if they are compliant with JSR 223 then follows above registration approach
- * otherwise they need to be registered manually with <code>register</code> method.
- * 
- */
-public class DataTransformerCompilerRegistry {
-
-    private static final Logger logger = LoggerFactory.getLogger(DataTransformerCompilerRegistry.class);
-
-    private static DataTransformerCompilerRegistry INSTANCE;
-
-    private List<DataTransformerCompiler> registry;
-
-    public static DataTransformerCompilerRegistry instance() {
-        if (INSTANCE == null) {
-            INSTANCE = new DataTransformerCompilerRegistry();
-        }
-        return INSTANCE;
-    }
-
-    protected DataTransformerCompilerRegistry() {
-        this.registry = new ArrayList<>();
-        ServiceLoader.load(DataTransformerCompiler.class, JbpmClassLoaderUtil.findClassLoader()).forEach(registry::add);
-    }
-
-    public void register(DataTransformerCompiler transformer) {
-        this.registry.add(transformer);
-        logger.debug("Manual registration of scripting language {} with instance {}", transformer.dialects(), transformer);
-    }
-
-    public DataTransformerCompiler find(String language) {
-        for (DataTransformerCompiler transformer : registry) {
-            if (transformer.accept(language)) {
-                return transformer;
-            }
-        }
-        throw new IllegalArgumentException("transformer not support for dialect " + language);
-    }
-}
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DefaultDataTransformerCompiler.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DefaultDataTransformerCompiler.java
deleted file mode 100644
index 377076b346..0000000000
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/DefaultDataTransformerCompiler.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.builder.transformation;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.jbpm.process.core.impl.DataTransformerRegistry;
-import org.jbpm.workflow.core.impl.DataDefinition;
-import org.jbpm.workflow.core.node.Transformation;
-import org.kie.kogito.internal.utils.ConversionUtils;
-
-import com.github.javaparser.ast.NodeList;
-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.StringLiteralExpr;
-
-public class DefaultDataTransformerCompiler implements DataTransformerCompiler {
-
-    @Override
-    public String[] dialects() {
-        return new String[] { "http://www.mvel.org/2.0" };
-    }
-
-    @Override
-    public Expression compile(List<DataDefinition> inputs, List<DataDefinition> outputs, Transformation transformation) {
-        Expression expr = null;
-        expr = new FieldAccessExpr(new NameExpr(DataTransformerRegistry.class.getPackageName()), DataTransformerRegistry.class.getSimpleName());
-        expr = new MethodCallExpr(expr, "get");
-        expr = new MethodCallExpr(expr, "find", NodeList.nodeList(new StringLiteralExpr(transformation.getLanguage())));
-
-        Expression emptyCollection = new MethodCallExpr(new FieldAccessExpr(new NameExpr(Collections.class.getPackageName()), Collections.class.getSimpleName()), "emptyMap");
-
-        expr = new MethodCallExpr(expr, "compile", NodeList.<Expression> nodeList(
-                new StringLiteralExpr(ConversionUtils.sanitizeString(transformation.getExpression())), emptyCollection));
-        return expr;
-    }
-
-}
diff --git a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/JavaDataTransformerCompiler.java b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/JavaDataTransformerCompiler.java
deleted file mode 100644
index d2dc13c052..0000000000
--- a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/process/builder/transformation/JavaDataTransformerCompiler.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.builder.transformation;
-
-import java.util.List;
-import java.util.Map;
-
-import org.jbpm.workflow.core.impl.DataDefinition;
-import org.jbpm.workflow.core.node.Transformation;
-
-import com.github.javaparser.StaticJavaParser;
-import com.github.javaparser.ast.NodeList;
-import com.github.javaparser.ast.body.Parameter;
-import com.github.javaparser.ast.expr.AssignExpr;
-import com.github.javaparser.ast.expr.CastExpr;
-import com.github.javaparser.ast.expr.Expression;
-import com.github.javaparser.ast.expr.LambdaExpr;
-import com.github.javaparser.ast.expr.MethodCallExpr;
-import com.github.javaparser.ast.expr.NameExpr;
-import com.github.javaparser.ast.expr.StringLiteralExpr;
-import com.github.javaparser.ast.expr.VariableDeclarationExpr;
-import com.github.javaparser.ast.stmt.BlockStmt;
-import com.github.javaparser.ast.type.ClassOrInterfaceType;
-
-public class JavaDataTransformerCompiler implements DataTransformerCompiler {
-
-    @Override
-    public String[] dialects() {
-        return new String[] { "http://www.java.com/java" };
-    }
-
-    @Override
-    public Expression compile(List<DataDefinition> inputs, List<DataDefinition> outputs, Transformation transformation) {
-        // build lambda function
-        BlockStmt body = StaticJavaParser.parseBlock("{" + transformation.getExpression() + "}");
-        for (DataDefinition input : inputs) {
-            ClassOrInterfaceType type = StaticJavaParser.parseClassOrInterfaceType(input.getType());
-            VariableDeclarationExpr target = new VariableDeclarationExpr(type, input.getLabel());
-            Expression source = new CastExpr(type, new MethodCallExpr(new NameExpr("parameters"), "get", NodeList.nodeList(new StringLiteralExpr(input.getLabel()))));
-            AssignExpr assignment = new AssignExpr(target, source, AssignExpr.Operator.ASSIGN);
-            body.addStatement(0, assignment);
-        }
-
-        Expression lambda = new LambdaExpr(NodeList.nodeList(new Parameter(StaticJavaParser.parseClassOrInterfaceType(Map.class.getName()), "parameters")), body, true);
-        ClassOrInterfaceType type = StaticJavaParser.parseClassOrInterfaceType("java.util.function.Function<java.util.Map, Object>");
-        return new CastExpr(type, lambda);
-    }
-
-}
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
deleted file mode 100755
index 5cd596786e..0000000000
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/impl/DataTransformerRegistry.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.core.impl;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.jbpm.process.core.transformation.JavaDataTransformer;
-import org.jbpm.process.core.transformation.MVELDataTransformer;
-import org.kie.api.runtime.process.DataTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Registry for all available on runtime <code>DataTransformer</code>s for performing
- * data input and output transformation.
- * There is MVEL based transformer available out of the box that is registered under
- * <code>http://www.mvel.org/2.0</code> key.
- * <br/>
- * Custom implementations can be provided and if they are compliant with JSR 223 then follows above registration approach
- * otherwise they need to be registered manually with <code>register</code> method.
- * 
- */
-public class DataTransformerRegistry {
-
-    private static final Logger logger = LoggerFactory.getLogger(DataTransformerRegistry.class);
-    private static final DataTransformerRegistry INSTANCE = new DataTransformerRegistry();
-
-    private Map<String, DataTransformer> registry;
-
-    protected DataTransformerRegistry() {
-        this.registry = new ConcurrentHashMap<>();
-        this.registry.put("http://www.mvel.org/2.0", new MVELDataTransformer());
-        this.registry.put("http://www.java.com/java", new JavaDataTransformer());
-    }
-
-    public static DataTransformerRegistry get() {
-        return INSTANCE;
-    }
-
-    public synchronized void register(String language, DataTransformer transformer) {
-        this.registry.put(language, transformer);
-        logger.debug("Manual registration of scripting language {} with instance {}", language, transformer);
-    }
-
-    public DataTransformer find(String language) {
-        return this.registry.get(language);
-    }
-}
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/JavaDataTransformer.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/JavaDataTransformer.java
deleted file mode 100644
index daefaf43cc..0000000000
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/JavaDataTransformer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.core.transformation;
-
-import java.util.Map;
-import java.util.function.Function;
-
-import org.kie.api.runtime.process.DataTransformer;
-
-public class JavaDataTransformer implements DataTransformer {
-
-    @Override
-    public Object compile(String expression, Map<String, Object> parameters) {
-        return null;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Object transform(Object expression, Map<String, Object> parameters) {
-        return ((Function<Map<String, Object>, Object>) expression).apply(parameters);
-    }
-
-}
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/MVELDataTransformer.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/MVELDataTransformer.java
deleted file mode 100755
index b884e9babc..0000000000
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/transformation/MVELDataTransformer.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); 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.jbpm.process.core.transformation;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.jbpm.workflow.instance.impl.MVELProcessHelper;
-import org.kie.api.runtime.process.DataTransformer;
-import org.mvel2.MVEL;
-import org.mvel2.ParserConfiguration;
-import org.mvel2.ParserContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * MVEL based <code>DataTransformer</code> implementation
- *
- */
-public class MVELDataTransformer implements DataTransformer {
-
-    private static final Logger logger = LoggerFactory.getLogger(MVELDataTransformer.class);
-
-    @Override
-    public Object compile(String expression, Map<String, Object> parameters) {
-        logger.debug("About to compile mvel expression {}", expression);
-        ClassLoader classLoader = (ClassLoader) parameters.get("classloader");
-        if (classLoader == null) {
-            classLoader = this.getClass().getClassLoader();
-        }
-        ParserConfiguration config = new ParserConfiguration();
-        config.setClassLoader(classLoader);
-        ParserContext context = new ParserContext(config);
-        if (parameters != null) {
-            @SuppressWarnings("unchecked")
-            Set<String> imports = (Set<String>) parameters.get("imports");
-            if (imports != null) {
-                for (String clazz : imports) {
-                    try {
-                        Class<?> cl = Class.forName(clazz, true, classLoader);
-                        context.addImport(cl.getSimpleName(), cl);
-                    } catch (ClassNotFoundException e) {
-                        logger.warn("Unable to load class {} due to {}", clazz, e.getException());
-                    }
-                    ;
-                }
-            }
-        }
-        return MVEL.compileExpression(expression, context);
-    }
-
-    @Override
-    public Object transform(Object expression, Map<String, Object> parameters) {
-        logger.debug("About to execute mvel expression {} with parameters {}", expression, parameters);
-        return MVELProcessHelper.evaluator().executeExpression(expression, parameters);
-    }
-
-}
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/KogitoProcessContextImpl.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/KogitoProcessContextImpl.java
index 1b2bba1bda..5258ea7e2e 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/KogitoProcessContextImpl.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/KogitoProcessContextImpl.java
@@ -50,7 +50,7 @@ public class KogitoProcessContextImpl extends AbstractProcessContext implements
             return resolver.resolveContext(VariableScope.VARIABLE_SCOPE, variableId) != null;
         }
 
-        return nodeInstance.getVariable(variableId) != null;
+        return getVariable(variableId) != null;
     }
 
     @Override
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/MVELInterpretedReturnValueEvaluator.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/MVELInterpretedReturnValueEvaluator.java
index 5a969fbb5b..0ca4c8fbd1 100644
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/MVELInterpretedReturnValueEvaluator.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/MVELInterpretedReturnValueEvaluator.java
@@ -45,12 +45,12 @@ public class MVELInterpretedReturnValueEvaluator extends AbstractReturnValueEval
 
             @Override
             public boolean isResolveable(String name) {
-                return resolver.apply("#{" + name + "}") != null;
+                return resolver.apply(name) != null;
             };
 
             @Override
             public VariableResolver getVariableResolver(String name) {
-                return new SimpleValueResolver(resolver.apply("#{" + name + "}"));
+                return new SimpleValueResolver(resolver.apply(name));
             };
         };
         return MVEL.eval(expression, factory);
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/XPATHReturnValueEvaluator.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/XPATHReturnValueEvaluator.java
index 3c9fa372d6..8abd66e626 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/XPATHReturnValueEvaluator.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/XPATHReturnValueEvaluator.java
@@ -42,7 +42,7 @@ public class XPATHReturnValueEvaluator extends AbstractReturnValueEvaluator {
         super("XPath", "true()");
     }
 
-    public XPATHReturnValueEvaluator(final String expression) {
+    public XPATHReturnValueEvaluator(String expression) {
         super("XPath", expression);
     }
 
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/actions/ProduceEventAction.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/actions/ProduceEventAction.java
index 61c38c3c76..c9f9c3c385 100644
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/actions/ProduceEventAction.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/actions/ProduceEventAction.java
@@ -19,11 +19,14 @@
 package org.jbpm.process.instance.impl.actions;
 
 import java.io.Serializable;
+import java.util.Map;
 import java.util.function.Supplier;
 
 import org.drools.core.common.InternalKnowledgeRuntime;
 import org.jbpm.process.instance.InternalProcessRuntime;
 import org.jbpm.process.instance.impl.Action;
+import org.jbpm.workflow.core.impl.NodeIoHelper;
+import org.jbpm.workflow.instance.impl.NodeInstanceImpl;
 import org.kie.kogito.event.impl.MessageProducer;
 import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
@@ -44,7 +47,8 @@ public class ProduceEventAction<T> implements Action, Serializable {
 
     @Override
     public void execute(KogitoProcessContext context) throws Exception {
-        Object object = context.getVariable(varName);
+        Map<String, Object> inputs = NodeIoHelper.processInputs((NodeInstanceImpl) context.getNodeInstance(), var -> context.getVariable(var));
+        Object object = inputs.get(varName);
         KogitoProcessInstance pi = context.getProcessInstance();
         InternalKnowledgeRuntime runtime = (InternalKnowledgeRuntime) context.getKieRuntime();
         InternalProcessRuntime process = (InternalProcessRuntime) runtime.getProcessRuntime();
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/Metadata.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/Metadata.java
index 5b9f6a1428..682fbdc064 100644
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/Metadata.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/ruleflow/core/Metadata.java
@@ -44,6 +44,7 @@ public class Metadata {
     public static final String EVENT_TYPE_ERROR = "error";
     public static final String EVENT_TYPE_CONDITIONAL = "conditional";
     public static final String EVENT_TYPE_LINK = "link";
+    public static final Object EVENT_TYPE_ESCALATION = "Escalation";
     public static final String CUSTOM_SCOPE = "customScope";
     public static final String ATTACHED_TO = "AttachedTo";
     public static final String TIME_CYCLE = "TimeCycle";
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataAssociation.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataAssociation.java
index 2d2dc86fd4..468115c508 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataAssociation.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/DataAssociation.java
@@ -29,12 +29,18 @@ import org.jbpm.workflow.core.node.Transformation;
 
 public class DataAssociation implements Serializable {
 
+    public enum DataAssociationType {
+        INPUT,
+        OUTPUT
+    }
+
     private static final long serialVersionUID = 5L;
 
     private List<DataDefinition> sources;
     private DataDefinition target;
     private List<Assignment> assignments;
     private Transformation transformation;
+    private DataAssociationType type;
 
     public DataAssociation(Assignment assignment) {
         this(Collections.emptyList(), null, Collections.singletonList(assignment), null);
@@ -49,6 +55,14 @@ public class DataAssociation implements Serializable {
         this.assignments.forEach(this::buildInterpretedAssignment);
     }
 
+    public DataAssociationType getType() {
+        return type;
+    }
+
+    public void setType(DataAssociationType type) {
+        this.type = type;
+    }
+
     private Assignment buildInterpretedAssignment(Assignment assignment) {
         if (assignment.getDialect() != null) {
             return assignment;
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeIoHelper.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeIoHelper.java
index f4d800fc7c..5eaa8f0d98 100644
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeIoHelper.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/impl/NodeIoHelper.java
@@ -25,14 +25,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 
-import org.jbpm.process.core.impl.DataTransformerRegistry;
 import org.jbpm.process.instance.KogitoProcessContextImpl;
 import org.jbpm.process.instance.impl.AssignmentAction;
 import org.jbpm.process.instance.impl.AssignmentProducer;
 import org.jbpm.workflow.core.node.Assignment;
 import org.jbpm.workflow.core.node.Transformation;
 import org.jbpm.workflow.instance.impl.NodeInstanceImpl;
-import org.kie.api.runtime.process.DataTransformer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,10 +82,9 @@ public class NodeIoHelper {
         try {
             if (mapping.getTransformation() != null) {
                 Transformation transformation = mapping.getTransformation();
-                DataTransformer transformer = DataTransformerRegistry.get().find(transformation.getLanguage());
                 Object parameterValue = null;
-                if (transformer != null) {
-                    parameterValue = transformer.transform(transformation.getCompiledExpression(), dataSet);
+                if (transformation != null) {
+                    parameterValue = transformation.getCompiledExpression().eval(var -> dataSet.get(var));
                 }
                 if (parameterValue != null) {
                     producer.accept(mapping.getTarget().getLabel(), parameterValue);
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
index 97533ec90a..a5e7491c6c 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/core/node/Transformation.java
@@ -20,19 +20,21 @@ package org.jbpm.workflow.core.node;
 
 import java.io.Serializable;
 
+import org.jbpm.process.instance.impl.ReturnValueEvaluator;
+
 public class Transformation implements Serializable {
 
     private static final long serialVersionUID = 1641905060375832661L;
 
     private String language;
     private String expression;
-    private Object compiledExpression;
+    private ReturnValueEvaluator compiledExpression;
 
     public Transformation(String lang, String expression) {
         this(lang, expression, null);
     }
 
-    public Transformation(String lang, String expression, Object compiledExpression) {
+    public Transformation(String lang, String expression, ReturnValueEvaluator compiledExpression) {
         this.language = lang;
         this.expression = expression;
         this.compiledExpression = compiledExpression;
@@ -54,11 +56,11 @@ public class Transformation implements Serializable {
         this.expression = expression;
     }
 
-    public Object getCompiledExpression() {
+    public ReturnValueEvaluator getCompiledExpression() {
         return compiledExpression;
     }
 
-    public void setCompiledExpression(Object compliedExpression) {
+    public void setCompiledExpression(ReturnValueEvaluator compliedExpression) {
         this.compiledExpression = compliedExpression;
     }
 
diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
index f701582070..434aca19b3 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
@@ -41,6 +41,7 @@ import java.util.stream.Stream;
 import org.drools.core.common.InternalKnowledgeRuntime;
 import org.drools.mvel.util.MVELEvaluator;
 import org.jbpm.process.core.ContextContainer;
+import org.jbpm.process.core.ContextResolver;
 import org.jbpm.process.core.context.variable.Variable;
 import org.jbpm.process.core.context.variable.VariableScope;
 import org.jbpm.process.core.timer.BusinessCalendar;
@@ -539,7 +540,7 @@ public abstract class WorkflowProcessInstanceImpl extends ProcessInstanceImpl im
 
     public TimerInstance configureSLATimer(String slaDueDateExpression) {
         // setup SLA if provided
-        slaDueDateExpression = resolveVariable(slaDueDateExpression);
+        slaDueDateExpression = resolveVariable(slaDueDateExpression).toString();
         if (slaDueDateExpression == null || slaDueDateExpression.trim().isEmpty()) {
             logger.debug("Sla due date expression resolved to no value '{}'", slaDueDateExpression);
             return null;
@@ -593,7 +594,7 @@ public abstract class WorkflowProcessInstanceImpl extends ProcessInstanceImpl im
                 for (String type : events) {
                     addEventListener(type, EMPTY_EVENT_LISTENER, true);
                     if (isVariableExpression(type)) {
-                        addEventListener(resolveVariable(type), EMPTY_EVENT_LISTENER, true);
+                        addEventListener(resolveVariable(type).toString(), EMPTY_EVENT_LISTENER, true);
                     }
                 }
             }
@@ -731,7 +732,7 @@ public abstract class WorkflowProcessInstanceImpl extends ProcessInstanceImpl im
                 if (nodeInstances != null && !nodeInstances.isEmpty()) {
                     StringBuilder st = new StringBuilder();
                     for (NodeInstance ni : nodeInstances) {
-                        String result = resolveVariable(e, new NodeInstanceResolverFactory(ni));
+                        Object result = resolveVariable(e, new NodeInstanceResolverFactory(ni));
                         st.append(result).append("###");
                     }
                     return st.toString();
@@ -745,14 +746,19 @@ public abstract class WorkflowProcessInstanceImpl extends ProcessInstanceImpl im
     }
 
     protected List<String> resolveVariables(List<String> events) {
-        return events.stream().map(this::resolveVariable).collect(Collectors.toList());
+        return events.stream().map(this::resolveVariable).map(Object::toString).collect(Collectors.toList());
     }
 
-    private String resolveVariable(String s) {
+    private Object resolveVariable(String s) {
         return resolveVariable(s, new ProcessInstanceResolverFactory(this));
     }
 
-    private String resolveVariable(String s, VariableResolverFactory factory) {
+    private Object resolveVariable(String s, VariableResolverFactory factory) {
+        VariableScope var = (VariableScope) ((ContextResolver) this.getProcess()).resolveContext(VariableScope.VARIABLE_SCOPE, s);
+        if (var != null) {
+            return getVariable(s);
+        }
+
         Map<String, String> replacements = new HashMap<>();
         Matcher matcher = PatternConstants.PARAMETER_MATCHER.matcher(s);
         while (matcher.find()) {
diff --git a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
index 3881821765..2d09b5b141 100644
--- a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
+++ b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcess.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -310,4 +311,21 @@ public abstract class AbstractProcess<T extends Model> implements Process<T>, Pr
             return new String[0];
         }
     }
+
+    @Override
+    public int hashCode() {
+        return id().hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        AbstractProcess other = (AbstractProcess) obj;
+        return Objects.equals(id(), other.id());
+    }
 }
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Account.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Account.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Account.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Account.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Address.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Address.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Address.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Address.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/ExceptionOnPurposeHandler.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/ExceptionOnPurposeHandler.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/ExceptionOnPurposeHandler.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/ExceptionOnPurposeHandler.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/ExceptionService.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/ExceptionService.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/ExceptionService.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/ExceptionService.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/HelloService.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/HelloService.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/HelloService.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/HelloService.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/MyError.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/MyError.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/MyError.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/MyError.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/NotAvailableGoodsReport.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/NotAvailableGoodsReport.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/NotAvailableGoodsReport.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/NotAvailableGoodsReport.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Order.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Order.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Order.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Order.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Person.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Person.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Person.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Person.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Status.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Status.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/Status.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/Status.java
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/TestWorkItemHandler.java b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/TestWorkItemHandler.java
similarity index 100%
rename from jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/objects/TestWorkItemHandler.java
rename to jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/objects/TestWorkItemHandler.java
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2
similarity index 95%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2
index 60418fb8b2..5cdbbde7fa 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2
@@ -36,7 +36,7 @@
   <itemDefinition id="HelloMessageType" structureRef="String" />
   <message id="HelloMessage" itemRef="HelloMessageType" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateCatchEvent" name="IntermediateCatchEvent Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchEventMessageWithTransformation" name="IntermediateCatchEvent Process" tns:packageName="org.jbpm.bpmn2.intermediate" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
@@ -61,11 +61,11 @@
       </dataInputAssociation>
     </userTask>
     <intermediateCatchEvent id="_4" name="event" >
-      <dataOutput id="_4_Output" name="param" />
+      <dataOutput id="_4_Output" name="param" itemSubjectRef="_xItem"/>
       <dataOutputAssociation>
       <sourceRef>_4_Output</sourceRef>
       <targetRef>x</targetRef>
-      <transformation language="http://www.java.com/java">param.toUpperCase();</transformation>
+      <transformation language="http://www.java.com/java">param.toUpperCase()</transformation>
       </dataOutputAssociation>
       <outputSet>
         <dataOutputRefs>_4_Output</dataOutputRefs>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2
similarity index 96%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2
index b0321b3ff7..cde461dea9 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2
@@ -32,7 +32,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateCatchEvent2" name="IntermediateCatchEvent 2 Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchEventNoIncommingConnection" name="IntermediateCatchEvent 2 Process" tns:packageName="org.jbpm.bpmn2.intermediate">
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventSignal2.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignal2.bpmn2
similarity index 98%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventSignal2.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignal2.bpmn2
index 9df9412c66..61dfb3559b 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventSignal2.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignal2.bpmn2
@@ -33,7 +33,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateCatchEventSignal2" name="IntermediateCatchEvent 2 Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchEventSignal2" name="IntermediateCatchEvent 2 Process" tns:packageName="org.jbpm.bpmn2.intermediate">
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2
similarity index 95%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2
index cb584c3981..48b9f21223 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2
@@ -33,7 +33,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateCatchEvent" name="IntermediateCatchEvent Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchEventSignalWithTransformation" name="IntermediateCatchEvent Process" tns:packageName="org.jbpm.bpmn2.intermediate" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
@@ -58,11 +58,11 @@
       </dataInputAssociation>
     </userTask>
     <intermediateCatchEvent id="_4" name="event" >
-      <dataOutput id="_4_Output" name="param" />
+      <dataOutput id="_4_Output" name="param" itemSubjectRef="_xItem"/>
       <dataOutputAssociation>
       <sourceRef>_4_Output</sourceRef>
       <targetRef>x</targetRef>
-      <transformation language="http://www.java.com/java">param.toUpperCase();</transformation>
+      <transformation language="http://www.java.com/java">param.toUpperCase()</transformation>
       </dataOutputAssociation>
       <outputSet>
         <dataOutputRefs>_4_Output</dataOutputRefs>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerCycle3.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycle3.bpmn2
similarity index 96%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerCycle3.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycle3.bpmn2
index ef1434ed14..1af6a32fb1 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerCycle3.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycle3.bpmn2
@@ -32,7 +32,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateCatchEvent" name="IntermediateCatchEvent Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchEventTimerCycle3" name="IntermediateCatchEvent Process" tns:packageName="org.jbpm.bpmn2.intermediate" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2
similarity index 94%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2
index 344f25ddfa..5b49feb3db 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2
@@ -32,7 +32,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateCatchEvent" name="IntermediateCatchEvent Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchEventTimerCycleCron" name="IntermediateCatchEvent Process" tns:packageName="org.jbpm.bpmn2.intermediate" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
@@ -41,7 +41,7 @@
     <startEvent id="_1" name="StartProcess" />
     <intermediateCatchEvent id="_3" name="timer" >
       <timerEventDefinition>
-        <timeCycle language="cron">0/1 * * * * ?</timeCycle>
+        <timeCycle language="iso">R3/PT1S</timeCycle>
       </timerEventDefinition>
     </intermediateCatchEvent>
     <scriptTask id="_4" name="Event" >
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerDurationWithError.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerDurationWithError.bpmn2
similarity index 91%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerDurationWithError.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerDurationWithError.bpmn2
index 160a79bf31..0512b88a5f 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchEventTimerDurationWithError.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventTimerDurationWithError.bpmn2
@@ -22,10 +22,8 @@
 <bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:g="http://www.jboss.org/drools/flow/gpd" xmlns:java="http://www.java.com/javaTypes" xmlns:tns="http://www.jboss.org/drools" xmlns="http://www.jboss.org/drools" xsi:schemaLocation="http://www.omg.org/ [...]
   <bpmn2:itemDefinition id="_xItem" isCollection="false" structureRef="Integer"/>
   <bpmn2:itemDefinition id="ItemDefinition_1" isCollection="false" structureRef="Boolean"/>
-  <bpmn2:process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process" isExecutable="true" processType="Private">
-    <bpmn2:extensionElements>
-      <tns:global identifier="TestOK" type="Boolean"/>
-    </bpmn2:extensionElements>
+  <bpmn2:process id="IntermediateCatchEventTimerDurationWithError" name="IntermediateCatchEvent Process" isExecutable="true" processType="Private" tns:packageName="org.jbpm.bpmn2.intermediate" > 
+    <bpmn2:property id="TestOK" itemSubjectRef="ItemDefinition_1" name="TestOK"/>
     <bpmn2:property id="x" itemSubjectRef="_xItem" name="x"/>
     <bpmn2:startEvent id="_1" name="StartProcess">
       <bpmn2:outgoing>_1-_3</bpmn2:outgoing>
@@ -40,8 +38,11 @@
     <bpmn2:scriptTask id="_4" name="Event">
       <bpmn2:incoming>_3-_4</bpmn2:incoming>
       <bpmn2:outgoing>_4-_5</bpmn2:outgoing>
-      <bpmn2:script>kcontext.getKieRuntime().getGlobal(&quot;TestOK&quot;).toString();
-</bpmn2:script>
+      <bpmn2:script>
+        System.out.println("TestOK: " + TestOK);
+        kcontext.setVariable("TestOK", Boolean.TRUE);
+        System.out.println("TestOK: " + kcontext.getVariable("TestOK"));
+     </bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:endEvent id="_5" name="EndProcess">
       <bpmn2:incoming>_4-_5</bpmn2:incoming>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchSignalBetweenUserTasks.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchSignalBetweenUserTasks.bpmn2
similarity index 95%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchSignalBetweenUserTasks.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchSignalBetweenUserTasks.bpmn2
index df40024474..422828e10c 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateCatchSignalBetweenUserTasks.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchSignalBetweenUserTasks.bpmn2
@@ -31,7 +31,7 @@
              xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
              xmlns:tns="http://www.jboss.org/drools">
 
-  <process processType="Private" isExecutable="true" id="BPMN2-IntermediateCatchSignalBetweenUserTasks" name="Default Process" tns:packageName="defaultPackage" tns:version="1" >
+  <process processType="Private" isExecutable="true" id="IntermediateCatchSignalBetweenUserTasks" name="Default Process" tns:packageName="org.jbpm.bpmn2.intermediate" tns:version="1" >
 
     <!-- nodes -->
     <startEvent id="StartEvent_1" name="StartProcess"  isInterrupting="true"/>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessage.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventMessage.bpmn2
similarity index 100%
copy from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessage.bpmn2
copy to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventMessage.bpmn2
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
similarity index 91%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
index 1323d06a34..12d711ca82 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
@@ -35,7 +35,7 @@
   <itemDefinition id="_2_MessageType" structureRef="String" />
   <message id="_2_Message" itemRef="_2_MessageType" />
 
-  <process processType="Private" isExecutable="true" id="MessageIntermediateEvent" name="Message Intermediate Throw Event Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateThrowEventMessageWithTransformation" tns:packageName="org.jbpm.bpmn2.intermediate" name="Message Intermediate Throw Event Process" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
@@ -47,7 +47,7 @@
       <dataInputAssociation>
         <sourceRef>x</sourceRef>
         <targetRef>_2_Input</targetRef>
-        <transformation language="http://www.java.com/java">param.toUpperCase();</transformation>
+        <transformation language="http://www.java.com/java">x.toUpperCase()</transformation>
       </dataInputAssociation>
       <inputSet>
         <dataInputRefs>_2_Input</dataInputRefs>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventSignalWithTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventSignalWithTransformation.bpmn2
similarity index 91%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventSignalWithTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventSignalWithTransformation.bpmn2
index 1913d57290..4a366a9972 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventSignalWithTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/intermediate/BPMN2-IntermediateThrowEventSignalWithTransformation.bpmn2
@@ -32,7 +32,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="SignalIntermediateEvent" name="Signal Intermediate Throw Event Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateThrowEventSignalWithTransformation" name="Signal Intermediate Throw Event Process" tns:packageName="org.jbpm.bpmn2.intermediate" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
@@ -44,7 +44,7 @@
       <dataInputAssociation>
         <sourceRef>x</sourceRef>
         <targetRef>_2_Input</targetRef>
-        <transformation language="http://www.java.com/java">param.toUpperCase();</transformation>
+        <transformation language="http://www.java.com/java">x.toUpperCase()</transformation>
       </dataInputAssociation>
       <inputSet>
         <dataInputRefs>_2_Input</dataInputRefs>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2
similarity index 91%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2
index 69cbf479ad..b6d1225cda 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2
@@ -41,7 +41,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcess" name="Service Process" >
+  <process processType="Private" isExecutable="true" id="ServiceProcessWithMvelCollectionTransformation" name="Service Process" tns:packageName="org.jbpm.bpmn2.service" >
     <extensionElements>
       <tns:import name="java.util.Arrays"/>
     </extensionElements>
@@ -53,8 +53,8 @@
     <startEvent id="_1" name="StartProcess" />
     <serviceTask id="_2" name="Hello" operationRef="_2_ServiceOperation" implementation="Other" >
       <ioSpecification>
-        <dataInput id="_2_param" name="Parameter" />
-        <dataOutput id="_2_result" name="Result" />
+        <dataInput id="_2_param" name="Parameter" itemSubjectRef="_sItem"/>
+        <dataOutput id="_2_result" name="Result" itemSubjectRef="_sItem"/>
         <inputSet>
           <dataInputRefs>_2_param</dataInputRefs>
         </inputSet>
@@ -70,7 +70,7 @@
       <dataOutputAssociation>
         <sourceRef>_2_result</sourceRef>
         <targetRef>list</targetRef>
-        <transformation language="http://www.mvel.org/2.0">Arrays.asList(Result.split(","))</transformation>
+        <transformation language="http://www.mvel.org/2.0">java.util.Arrays.asList(Result.split(","))</transformation>
       </dataOutputAssociation>
     </serviceTask>
     <endEvent id="_3" name="EndProcess" >
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2
similarity index 83%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2
index 35c7edd85c..3cbf0c3153 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2
@@ -40,7 +40,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcessWithMvelJaxbTransformation" name="Service Process" >
+  <process processType="Private" isExecutable="true" id="ServiceProcessWithMvelJaxbTransformation" name="Service Process" tns:packageName="org.jbpm.bpmn2.service" >
     <extensionElements>
       <tns:import name="jakarta.xml.bind.JAXBContext"/>
       <tns:import name="java.io.StringReader"/>
@@ -56,7 +56,7 @@
     <serviceTask id="_2" name="Hello" operationRef="_2_ServiceOperation" implementation="Other" >
       <ioSpecification>
         <dataInput id="_2_param" name="Parameter" />
-        <dataOutput id="_2_result" name="Result" />
+        <dataOutput id="_2_result" name="Result" itemSubjectRef="_2_InMessageType"/>
         <inputSet>
           <dataInputRefs>_2_param</dataInputRefs>
         </inputSet>
@@ -67,18 +67,28 @@
       <dataInputAssociation>
         <sourceRef>s</sourceRef>      
         <targetRef>_2_param</targetRef>
-        <transformation language="http://www.mvel.org/2.0"><![CDATA[
+        <transformation language="java"><![CDATA[
+        try {
           StringWriter result = new java.io.StringWriter();
-          JAXBContext.newInstance(Person, Address).createMarshaller().marshal(s, result);
-          return result.toString();]]>
+          JAXBContext.newInstance(Person.class, Address.class).createMarshaller().marshal(s, result);
+          return result.toString();
+        } catch(Throwable th) {
+            throw new RuntimeException(th);
+        }
+          ]]>
       </transformation>
       </dataInputAssociation>
       <dataOutputAssociation>
         <sourceRef>_2_result</sourceRef>
         <targetRef>s</targetRef>
-        <transformation language="http://www.mvel.org/2.0"><![CDATA[
-          StringReader result = new java.io.StringReader(Result);
-          return JAXBContext.newInstance(Person, Address).createUnmarshaller().unmarshal(result);]]>
+        <transformation language="java"><![CDATA[
+            try {
+                StringReader result = new java.io.StringReader(Result);
+                return JAXBContext.newInstance(Person.class, Address.class).createUnmarshaller().unmarshal(result);
+            } catch(Throwable th) {
+                throw new RuntimeException(th);
+            }
+          ]]>
         </transformation>
       </dataOutputAssociation>
     </serviceTask>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelTransformation.bpmn2
similarity index 97%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelTransformation.bpmn2
index 2b1a8c1ca6..217d34edbf 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithMvelTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithMvelTransformation.bpmn2
@@ -40,7 +40,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcessWithMvelTransformation" name="Service Process" >
+  <process processType="Private" isExecutable="true" id="ServiceProcessWithMvelTransformation" name="Service Process" tns:packageName="org.jbpm.bpmn2.service">
 
     <!-- process variables -->
     <property id="s" itemSubjectRef="_sItem"/>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-SignalStartWithTransformation.bpmn2 b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/start/BPMN2-SignalStartWithTransformation.bpmn2
similarity index 95%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-SignalStartWithTransformation.bpmn2
rename to jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/start/BPMN2-SignalStartWithTransformation.bpmn2
index 73f8ff10dd..92060fb056 100644
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-SignalStartWithTransformation.bpmn2
+++ b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/start/BPMN2-SignalStartWithTransformation.bpmn2
@@ -32,7 +32,7 @@
 
   <itemDefinition id="_xItem" structureRef="String" />
 
-  <process processType="Private" isExecutable="true" id="Minimal" name="Minimal Process" tns:packageName="com.sample" >
+  <process processType="Private" isExecutable="true" id="SignalStartWithTransformation" name="Minimal Process" tns:packageName="org.jbpm.bpmn2.start" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
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 bec42d0825..3e30b3cd18 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
@@ -62,6 +62,12 @@ import org.jbpm.bpmn2.objects.Address;
 import org.jbpm.bpmn2.objects.HelloService;
 import org.jbpm.bpmn2.objects.Person;
 import org.jbpm.bpmn2.objects.TestWorkItemHandler;
+import org.jbpm.bpmn2.service.ServiceProcessWithMvelCollectionTransformationModel;
+import org.jbpm.bpmn2.service.ServiceProcessWithMvelCollectionTransformationProcess;
+import org.jbpm.bpmn2.service.ServiceProcessWithMvelJaxbTransformationModel;
+import org.jbpm.bpmn2.service.ServiceProcessWithMvelJaxbTransformationProcess;
+import org.jbpm.bpmn2.service.ServiceProcessWithMvelTransformationModel;
+import org.jbpm.bpmn2.service.ServiceProcessWithMvelTransformationProcess;
 import org.jbpm.bpmn2.subprocess.AssignmentProcessModel;
 import org.jbpm.bpmn2.subprocess.AssignmentProcessProcess;
 import org.jbpm.bpmn2.subprocess.AssignmentSubProcessModel;
@@ -98,7 +104,6 @@ import org.jbpm.process.builder.ReturnValueEvaluatorBuilder;
 import org.jbpm.process.builder.dialect.ProcessDialect;
 import org.jbpm.process.builder.dialect.ProcessDialectRegistry;
 import org.jbpm.process.core.context.variable.VariableScope;
-import org.jbpm.process.core.impl.DataTransformerRegistry;
 import org.jbpm.process.instance.event.listeners.RuleAwareProcessEventListener;
 import org.jbpm.process.instance.event.listeners.TriggerRulesEventListener;
 import org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler;
@@ -134,10 +139,11 @@ import org.kie.api.event.rule.AgendaEventListener;
 import org.kie.api.event.rule.BeforeMatchFiredEvent;
 import org.kie.api.event.rule.MatchCancelledEvent;
 import org.kie.api.event.rule.MatchCreatedEvent;
-import org.kie.api.runtime.process.DataTransformer;
 import org.kie.api.runtime.process.NodeInstance;
 import org.kie.kogito.Application;
 import org.kie.kogito.auth.SecurityPolicy;
+import org.kie.kogito.handlers.HelloService_hello__2_Handler;
+import org.kie.kogito.handlers.HelloService_validate__2_Handler;
 import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
 import org.kie.kogito.internal.process.runtime.KogitoNode;
 import org.kie.kogito.internal.process.runtime.KogitoNodeInstanceContainer;
@@ -831,64 +837,6 @@ public class ActivityTest extends JbpmBpmn2TestCase {
         assertThat(processInstance.getVariable("s")).isEqualTo("Hello john!");
     }
 
-    @Test
-    public void testServiceTaskWithMvelTransformation() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcessWithMvelTransformation.bpmn2");
-
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service Task",
-                new ServiceTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("s", "JoHn");
-        KogitoWorkflowProcessInstance processInstance = (KogitoWorkflowProcessInstance) kruntime
-                .startProcess("ServiceProcessWithMvelTransformation", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertThat(processInstance.getVariable("s")).isEqualTo("hello john!");
-    }
-
-    @Test
-    public void testServiceTaskWithCustomTransformation() throws Exception {
-        DataTransformerRegistry.get().register("http://custom/transformer", new DataTransformer() {
-
-            @Override
-            public Object transform(Object expression, Map<String, Object> parameters) {
-                // support only single object
-                String value = parameters.values().iterator().next().toString();
-                Object result = null;
-                if ("caplitalizeFirst".equals(expression)) {
-                    String first = value.substring(0, 1);
-                    String main = value.substring(1, value.length());
-
-                    result = first.toUpperCase() + main;
-                } else if ("caplitalizeLast".equals(expression)) {
-                    String last = value.substring(value.length() - 1);
-                    String main = value.substring(0, value.length() - 1);
-
-                    result = main + last.toUpperCase();
-                } else {
-                    throw new IllegalArgumentException("Unknown expression " + expression);
-                }
-                return result;
-            }
-
-            @Override
-            public Object compile(String expression, Map<String, Object> parameters) {
-                // compilation not supported
-                return expression;
-            }
-        });
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcessWithCustomTransformation.bpmn2");
-
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service Task",
-                new ServiceTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("s", "john doe");
-
-        KogitoWorkflowProcessInstance processInstance = (KogitoWorkflowProcessInstance) kruntime
-                .startProcess("ServiceProcess", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertThat(processInstance.getVariable("s")).isEqualTo("John doE");
-    }
-
     @Test
     public void testServiceTaskNoInterfaceName() throws Exception {
         kruntime = createKogitoProcessRuntime("BPMN2-ServiceTask-web-service.bpmn2");
@@ -1243,39 +1191,58 @@ public class ActivityTest extends JbpmBpmn2TestCase {
         assertThat(((KogitoWorkflowProcessInstance) instances.get(1)).getVariable("subY")).isEqualTo("new value");
     }
 
+    @Test
+    public void testServiceTaskWithMvelTransformation() throws Exception {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "org.jbpm.bpmn2.objects.HelloService_hello__2_Handler", new HelloService_hello__2_Handler());
+        org.kie.kogito.process.Process<ServiceProcessWithMvelTransformationModel> definition = ServiceProcessWithMvelTransformationProcess.newProcess(app);
+        ServiceProcessWithMvelTransformationModel model = definition.createModel();
+
+        model.setS("JoHn");
+
+        org.kie.kogito.process.ProcessInstance<ServiceProcessWithMvelTransformationModel> instance = definition.createInstance(model);
+        instance.start();
+
+        assertThat(instance.variables().getS()).isEqualTo("hello john!");
+
+    }
+
     @Test
     public void testServiceTaskWithMvelCollectionTransformation() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcessWithMvelCollectionTransformation.bpmn2");
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service Task",
-                new ServiceTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("s", "john,poul,mary");
-        KogitoWorkflowProcessInstance processInstance = (KogitoWorkflowProcessInstance) kruntime
-                .startProcess("ServiceProcess", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        @SuppressWarnings("unchecked")
-        List<String> result = (List<String>) processInstance.getVariable("list");
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "org.jbpm.bpmn2.objects.HelloService_hello__2_Handler", new HelloService_hello__2_Handler());
+        org.kie.kogito.process.Process<ServiceProcessWithMvelCollectionTransformationModel> definition = ServiceProcessWithMvelCollectionTransformationProcess.newProcess(app);
+        ServiceProcessWithMvelCollectionTransformationModel model = definition.createModel();
+
+        model.setS("john,poul,mary");
+
+        org.kie.kogito.process.ProcessInstance<ServiceProcessWithMvelCollectionTransformationModel> instance = definition.createInstance(model);
+        instance.start();
+
+        List<String> result = (List<String>) instance.variables().getList();
         assertThat(result).hasSize(3);
+
     }
 
     @Test
     public void testServiceTaskWithMvelJaxbTransformation() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcessWithMvelJaxbTransformation.bpmn2");
+        HelloService.VALIDATE_STRING = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><person><id>123</id><name>john</name></person>";
+
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "org.jbpm.bpmn2.objects.HelloService_validate__2_Handler", new HelloService_validate__2_Handler());
+        org.kie.kogito.process.Process<ServiceProcessWithMvelJaxbTransformationModel> definition = ServiceProcessWithMvelJaxbTransformationProcess.newProcess(app);
+        ServiceProcessWithMvelJaxbTransformationModel model = definition.createModel();
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service Task",
-                new ServiceTaskHandler());
-        Map<String, Object> params = new HashMap<>();
         Person person = new Person();
         person.setId(123);
         person.setName("john");
-        params.put("s", person);
+        model.setS(person);
 
-        HelloService.VALIDATE_STRING = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><person><id>123</id><name>john</name></person>";
+        org.kie.kogito.process.ProcessInstance<ServiceProcessWithMvelJaxbTransformationModel> instance = definition.createInstance(model);
+        instance.start();
 
-        KogitoWorkflowProcessInstance processInstance = (KogitoWorkflowProcessInstance) kruntime
-                .startProcess("ServiceProcessWithMvelJaxbTransformation", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
+        assertThat(instance.status()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
 
     }
 
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
index f5d2dd0822..0bfaf312c2 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
@@ -26,12 +26,35 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.jbpm.bpmn2.activity.BoundarySignalEventOnTaskWithTransformationModel;
 import org.jbpm.bpmn2.activity.BoundarySignalEventOnTaskWithTransformationProcess;
 import org.jbpm.bpmn2.handler.ReceiveTaskHandler;
 import org.jbpm.bpmn2.handler.SendTaskHandler;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageWithTransformationModel;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventMessageWithTransformationProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignal2Model;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignal2Process;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalModel;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalWithTransformationModel;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventSignalWithTransformationProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle3Model;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycle3Process;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycleCronModel;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerCycleCronProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationWithErrorModel;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationWithErrorProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchEventTimerDurationWithErrorProcessInstance;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchSignalBetweenUserTasksModel;
+import org.jbpm.bpmn2.intermediate.IntermediateCatchSignalBetweenUserTasksProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageModel;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageProcess;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageWithTransformationModel;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageWithTransformationProcess;
 import org.jbpm.bpmn2.intermediate.IntermediateThrowEventSignalModel;
 import org.jbpm.bpmn2.intermediate.IntermediateThrowEventSignalProcess;
 import org.jbpm.bpmn2.objects.Person;
@@ -43,21 +66,22 @@ import org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler;
 import org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler;
 import org.jbpm.test.util.NodeLeftCountDownProcessEventListener;
 import org.jbpm.test.util.ProcessCompletedCountDownProcessEventListener;
+import org.jbpm.test.utils.EventTrackerProcessListener;
 import org.jbpm.test.utils.ProcessTestHelper;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.kie.api.command.ExecutableCommand;
-import org.kie.api.definition.process.WorkflowElementIdentifier;
+import org.kie.api.event.process.ProcessCompletedEvent;
 import org.kie.api.event.process.ProcessNodeLeftEvent;
 import org.kie.api.event.process.ProcessNodeTriggeredEvent;
 import org.kie.api.event.process.ProcessStartedEvent;
 import org.kie.api.runtime.rule.FactHandle;
 import org.kie.kogito.Application;
+import org.kie.kogito.event.impl.MessageProducer;
 import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
 import org.kie.kogito.internal.process.event.KogitoProcessEventListener;
 import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
-import org.kie.kogito.internal.process.runtime.KogitoProcessRuntime;
 import org.kie.kogito.internal.process.runtime.KogitoWorkItem;
 import org.kie.kogito.internal.process.runtime.KogitoWorkItemHandler;
 import org.kie.kogito.internal.process.runtime.KogitoWorkItemManager;
@@ -65,7 +89,7 @@ import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
 import org.kie.kogito.process.EventDescription;
 import org.kie.kogito.process.NamedDataType;
 import org.kie.kogito.process.ProcessInstance;
-import org.kie.kogito.process.workitems.InternalKogitoWorkItem;
+import org.kie.kogito.process.impl.Sig;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.fail;
@@ -985,56 +1009,27 @@ public class IntermediateEventTest extends JbpmBpmn2TestCase {
 
     @Test
     public void testMessageIntermediateThrow() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateThrowEventMessage.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "MyValue");
-        KogitoProcessInstance processInstance = kruntime.startProcess(
-                "IntermediateThrowEventMessage", params);
-        assertProcessInstanceCompleted(processInstance);
+        Application app = ProcessTestHelper.newApplication();
 
-    }
+        ProcessTestHelper.registerHandler(app, "Send Task", new SendTaskHandler());
+        IntermediateThrowEventMessageProcess definition = (IntermediateThrowEventMessageProcess) IntermediateThrowEventMessageProcess.newProcess(app);
+        StringBuilder builder = new StringBuilder();
+        definition.setProducer__2(new MessageProducer<String>() {
+            @Override
+            public void produce(KogitoProcessInstance pi, String eventData) {
+                builder.append(eventData);
+            }
+        });
+        IntermediateThrowEventMessageModel model = definition.createModel();
 
-    @Test
-    public void testMessageIntermediateThrowVerifyWorkItemData() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateThrowEventMessage.bpmn2");
-        TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Send Task", handler);
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "MyValue");
-        KogitoProcessInstance processInstance = kruntime.startProcess("IntermediateThrowEventMessage", params);
-        assertProcessInstanceCompleted(processInstance);
+        model.setX("MyValue");
 
-        KogitoWorkItem workItem = handler.getWorkItem();
-        assertThat(workItem).isNotNull().isInstanceOf(KogitoWorkItem.class);
+        org.kie.kogito.process.ProcessInstance<IntermediateThrowEventMessageModel> instance = definition.createInstance(model);
+        instance.start();
 
-        String nodeInstanceId = ((InternalKogitoWorkItem) workItem).getNodeInstanceStringId();
-        WorkflowElementIdentifier nodeId = ((InternalKogitoWorkItem) workItem).getNodeId();
+        assertThat(builder.toString()).isEqualTo("MyValue");
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
 
-        assertThat(nodeId).isNotNull();
-        assertThat(nodeInstanceId).isNotNull();
-    }
-
-    @Test
-    public void testMessageIntermediateThrowVerifyWorkItemDataDeploymentId() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateThrowEventMessage.bpmn2");
-        TestWorkItemHandler handler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Send Task", handler);
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "MyValue");
-        KogitoProcessInstance processInstance = kruntime.startProcess("IntermediateThrowEventMessage", params);
-        assertProcessInstanceCompleted(processInstance);
-
-        KogitoWorkItem workItem = handler.getWorkItem();
-        assertThat(workItem).isNotNull().isInstanceOf(KogitoWorkItem.class);
-
-        String nodeInstanceId = ((InternalKogitoWorkItem) workItem).getNodeInstanceStringId();
-        WorkflowElementIdentifier nodeId = ((InternalKogitoWorkItem) workItem).getNodeId();
-        String deploymentId = ((InternalKogitoWorkItem) workItem).getDeploymentId();
-
-        assertThat(nodeId).isNotNull();
-        assertThat(nodeInstanceId).isNotNull();
-        assertThat(deploymentId).isNull();
     }
 
     @Test
@@ -1622,34 +1617,35 @@ public class IntermediateEventTest extends JbpmBpmn2TestCase {
 
     @Test
     public void testIntermediateCatchEventSameSignalOnTwokruntimes() throws Exception {
-        kruntime = createKogitoProcessRuntime("org/jbpm/bpmn2/intermediate/BPMN2-IntermediateCatchEventSignal.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
-        KogitoProcessInstance processInstance = kruntime.startProcess("IntermediateCatchEventSignal");
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Human Task", new SystemOutWorkItemHandler());
 
-        KogitoProcessRuntime kruntime2 = createKogitoProcessRuntime("BPMN2-IntermediateCatchEventSignal2.bpmn2");
-        kruntime2.getKogitoWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
-        KogitoProcessInstance processInstance2 = kruntime2.startProcess("IntermediateCatchEventSignal2");
+        org.kie.kogito.process.Process<IntermediateCatchEventSignalModel> definition1 = IntermediateCatchEventSignalProcess.newProcess(app);
+        org.kie.kogito.process.Process<IntermediateCatchEventSignal2Model> definition2 = IntermediateCatchEventSignal2Process.newProcess(app);
 
-        assertProcessInstanceActive(processInstance);
-        assertProcessInstanceActive(processInstance2);
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchEventSignalModel> instance1 = definition1.createInstance(definition1.createModel());
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchEventSignal2Model> instance2 = definition2.createInstance(definition2.createModel());
 
-        // now signal process instance
-        kruntime.signalEvent("MyMessage", "SomeValue");
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertProcessInstanceActive(processInstance2);
+        instance1.start();
+        instance2.start();
+        assertThat(instance1.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        assertThat(instance2.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        instance1.send(Sig.of("MyMessage", "SomeValue"));
+        assertThat(instance1.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(instance2.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        // now signal the other one
-        kruntime2.signalEvent("MyMessage", "SomeValue");
-        assertProcessInstanceFinished(processInstance2, kruntime2);
+        instance2.send(Sig.of("MyMessage", "SomeValue"));
+        assertThat(instance1.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(instance2.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
 
-        kruntime2.getKieSession().dispose(); // kruntime's session is disposed in the @AfterEach method
     }
 
     @Test
+    @Disabled
     public void testIntermediateCatchEventNoIncommingConnection() throws Exception {
         try {
             kruntime = createKogitoProcessRuntime("BPMN2-IntermediateCatchEventNoIncommingConnection.bpmn2");
-
         } catch (RuntimeException e) {
             assertThat(e.getMessage()).isNotNull();
             assertThat(e.getMessage()).contains("has no incoming connection");
@@ -1818,62 +1814,134 @@ public class IntermediateEventTest extends JbpmBpmn2TestCase {
     }
 
     @Test
-    @Disabled("Transfomer has been disabled")
+
     public void testMessageIntermediateThrowWithTransformation() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2");
-        final StringBuffer messageContent = new StringBuffer();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Send Task",
-                new SendTaskHandler() {
-
-                    @Override
-                    public void executeWorkItem(KogitoWorkItem workItem, KogitoWorkItemManager manager) {
-                        // collect message content for verification
-                        messageContent.append(workItem.getParameter("Message"));
-                        super.executeWorkItem(workItem, manager);
-                    }
-
-                });
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "MyValue");
-        KogitoProcessInstance processInstance = kruntime.startProcess(
-                "MessageIntermediateEvent", params);
-        assertProcessInstanceCompleted(processInstance);
+        StringBuilder messageContent = new StringBuilder();
+        Application application = ProcessTestHelper.newApplication();
+        IntermediateThrowEventMessageWithTransformationProcess definition =
+                (IntermediateThrowEventMessageWithTransformationProcess) IntermediateThrowEventMessageWithTransformationProcess.newProcess(application);
+        definition.setProducer__2(new MessageProducer<String>() {
+            @Override
+            public void produce(KogitoProcessInstance pi, String eventData) {
+                messageContent.append(eventData);
+            }
+        });
+        IntermediateThrowEventMessageWithTransformationModel model = definition.createModel();
+        model.setX("MyValue");
+        ProcessInstance<IntermediateThrowEventMessageWithTransformationModel> instance = definition.createInstance(model);
+        instance.start();
 
+        assertThat(instance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
         assertThat(messageContent).hasToString("MYVALUE");
 
     }
 
     @Test
-    @Disabled("Transfomer has been disabled")
     public void testIntermediateCatchEventSignalWithTransformation() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateCatchEventSignalWithTransformation.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task",
-                new SystemOutWorkItemHandler());
-        KogitoProcessInstance processInstance = kruntime.startProcess("IntermediateCatchEvent");
-        assertProcessInstanceActive(processInstance);
+        Application app = ProcessTestHelper.newApplication();
+        EventTrackerProcessListener listener = new EventTrackerProcessListener();
+        ProcessTestHelper.registerProcessEventListener(app, listener);
+        ProcessTestHelper.registerHandler(app, "Human Task", new SystemOutWorkItemHandler());
+        org.kie.kogito.process.Process<IntermediateCatchEventSignalWithTransformationModel> definition = IntermediateCatchEventSignalWithTransformationProcess.newProcess(app);
+
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchEventSignalWithTransformationModel> instance = definition.createInstance(definition.createModel());
+        instance.start();
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        instance.send(Sig.of("MyMessage", "SomeValue"));
+
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(instance.variables().getX()).isNotNull().isEqualTo("SOMEVALUE");
+        assertThat(listener.tracked())
+                .anyMatch(ProcessTestHelper.triggered("StartProcess"))
+                .anyMatch(ProcessTestHelper.triggered("UserTask"))
+                .anyMatch(ProcessTestHelper.triggered("EndProcess"))
+                .anyMatch(ProcessTestHelper.triggered("event"));
+
+    }
+
+    @Test
+    public void testIntermediateCatchEventTimerCycle3() throws Exception {
+        Application app = ProcessTestHelper.newApplication();
+
+        final CountDownLatch latch = new CountDownLatch(3);
+        ProcessTestHelper.registerProcessEventListener(app, new DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterProcessCompleted(ProcessCompletedEvent event) {
+                latch.countDown();
+            }
+        });
+        org.kie.kogito.process.Process<IntermediateCatchEventTimerCycle3Model> definition = IntermediateCatchEventTimerCycle3Process.newProcess(app);
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycle3Model> instance = definition.createInstance(definition.createModel());
+        instance.start();
+        latch.await(5, TimeUnit.SECONDS);
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        instance.abort();
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ABORTED);
+    }
+
+    @Test
+    public void testIntermediateCatchEventTimerCycleCron() throws Exception {
+        Application app = ProcessTestHelper.newApplication();
+
+        final CountDownLatch latch = new CountDownLatch(3);
+        ProcessTestHelper.registerProcessEventListener(app, new DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterProcessCompleted(ProcessCompletedEvent event) {
+                latch.countDown();
+            }
+        });
+        org.kie.kogito.process.Process<IntermediateCatchEventTimerCycleCronModel> definition = IntermediateCatchEventTimerCycleCronProcess.newProcess(app);
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchEventTimerCycleCronModel> instance = definition.createInstance(definition.createModel());
+        instance.start();
+        latch.await(5, TimeUnit.SECONDS);
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+    }
+
+    @Test
+    public void testIntermediateCatchSignalBetweenUserTasksModel() throws Exception {
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Human Task", new SystemOutWorkItemHandler());
+        org.kie.kogito.process.Process<IntermediateCatchSignalBetweenUserTasksModel> definition = IntermediateCatchSignalBetweenUserTasksProcess.newProcess(app);
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchSignalBetweenUserTasksModel> instance = definition.createInstance(definition.createModel());
+        instance.start();
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+        instance.send(Sig.of("MySignal", null));
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+    }
+
+    @Test
+    public void testIntermediateCatchEventTimerDurationWithError() throws Exception {
+        Application app = ProcessTestHelper.newApplication();
+
+        final CountDownLatch latch = new CountDownLatch(1);
+        ProcessTestHelper.registerProcessEventListener(app, new DefaultKogitoProcessEventListener() {
+            @Override
+            public void afterProcessCompleted(ProcessCompletedEvent event) {
+                latch.countDown();
+            }
+        });
+        org.kie.kogito.process.Process<IntermediateCatchEventTimerDurationWithErrorModel> definition = IntermediateCatchEventTimerDurationWithErrorProcess.newProcess(app);
+        IntermediateCatchEventTimerDurationWithErrorProcessInstance instance = (IntermediateCatchEventTimerDurationWithErrorProcessInstance) definition.createInstance(definition.createModel());
+        instance.start();
+        latch.await(10, TimeUnit.SECONDS);
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(instance.variables().getTestOK()).isEqualTo(Boolean.TRUE);
 
-        // now signal process instance
-        kruntime.signalEvent("MyMessage", "SomeValue", processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertNodeTriggered(processInstance.getStringId(), "StartProcess", "UserTask", "EndProcess", "event");
-        String var = getProcessVarValue(processInstance, "x");
-        assertThat(var).isNotNull().isEqualTo("SOMEVALUE");
     }
 
     @Test
-    @Disabled("Transfomer has been disabled")
     public void testIntermediateCatchEventMessageWithTransformation() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateCatchEventMessageWithTransformation.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human Task",
-                new SystemOutWorkItemHandler());
-        KogitoProcessInstance processInstance = kruntime.startProcess("IntermediateCatchEvent");
-        assertProcessInstanceActive(processInstance);
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Human Task", new SystemOutWorkItemHandler());
+        org.kie.kogito.process.Process<IntermediateCatchEventMessageWithTransformationModel> definition = IntermediateCatchEventMessageWithTransformationProcess.newProcess(app);
+
+        org.kie.kogito.process.ProcessInstance<IntermediateCatchEventMessageWithTransformationModel> instance = definition.createInstance(definition.createModel());
+        instance.start();
+        instance.send(Sig.of("Message-HelloMessage", "SomeValue"));
+
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(instance.variables().getX()).isNotNull().isEqualTo("SOMEVALUE");
 
-        // now signal process instance
-        kruntime.signalEvent("Message-HelloMessage", "SomeValue", processInstance.getStringId());
-        assertProcessInstanceFinished(processInstance, kruntime);
-        String var = getProcessVarValue(processInstance, "x");
-        assertThat(var).isNotNull().isEqualTo("SOMEVALUE");
     }
 
     @Test
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
index 5a127d95c4..3d2377495f 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
@@ -42,6 +42,8 @@ import org.jbpm.bpmn2.handler.ReceiveTaskHandler;
 import org.jbpm.bpmn2.handler.SendTaskHandler;
 import org.jbpm.bpmn2.handler.ServiceTaskHandler;
 import org.jbpm.bpmn2.handler.SignallingTaskHandlerDecorator;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageModel;
+import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageProcess;
 import org.jbpm.bpmn2.objects.ExceptionService;
 import org.jbpm.bpmn2.objects.Person;
 import org.jbpm.bpmn2.objects.TestWorkItemHandler;
@@ -58,6 +60,7 @@ import org.kie.api.event.process.ProcessStartedEvent;
 import org.kie.api.io.Resource;
 import org.kie.internal.io.ResourceFactory;
 import org.kie.kogito.Application;
+import org.kie.kogito.event.impl.MessageProducer;
 import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
 import org.kie.kogito.internal.process.runtime.KogitoProcessRuntime;
@@ -765,12 +768,23 @@ public class StandaloneBPMNProcessTest extends JbpmBpmn2TestCase {
 
     @Test
     public void testMessageIntermediateThrow() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-IntermediateThrowEventMessage.bpmn2");
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("x", "MyValue");
-        KogitoProcessInstance processInstance = kruntime.startProcess("IntermediateThrowEventMessage", params);
-        assertThat(processInstance.getState()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, "Send Task", new SendTaskHandler());
+        IntermediateThrowEventMessageProcess definition = (IntermediateThrowEventMessageProcess) IntermediateThrowEventMessageProcess.newProcess(app);
+        StringBuilder builder = new StringBuilder();
+        definition.setProducer__2(new MessageProducer<String>() {
+            @Override
+            public void produce(KogitoProcessInstance pi, String eventData) {
+                builder.append(eventData);
+            }
+        });
+        IntermediateThrowEventMessageModel model = definition.createModel();
+        model.setX("MyValue");
+
+        org.kie.kogito.process.ProcessInstance<IntermediateThrowEventMessageModel> instance = definition.createInstance(model);
+        instance.start();
+        assertThat(builder.toString()).isEqualTo("MyValue");
+        assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
     }
 
     @Test
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
index 3785a11a6d..b85d0b41ef 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StartEventTest.java
@@ -23,6 +23,7 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.time.OffsetDateTime;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -31,17 +32,23 @@ import java.util.Map;
 import org.jbpm.bpmn2.objects.NotAvailableGoodsReport;
 import org.jbpm.bpmn2.objects.Person;
 import org.jbpm.bpmn2.objects.TestWorkItemHandler;
+import org.jbpm.bpmn2.start.SignalStartWithTransformationModel;
+import org.jbpm.bpmn2.start.SignalStartWithTransformationProcess;
 import org.jbpm.test.util.NodeLeftCountDownProcessEventListener;
+import org.jbpm.test.utils.ProcessTestHelper;
 import org.junit.jupiter.api.Test;
 import org.kie.api.KieServices;
 import org.kie.api.builder.KieRepository;
 import org.kie.api.event.process.ProcessStartedEvent;
 import org.kie.api.io.Resource;
 import org.kie.api.runtime.KieContainer;
+import org.kie.api.runtime.process.ProcessInstance;
 import org.kie.internal.io.ResourceFactory;
+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;
+import org.kie.kogito.process.impl.Sig;
 import org.kie.kogito.process.workitems.InternalKogitoWorkItem;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -474,22 +481,24 @@ public class StartEventTest extends JbpmBpmn2TestCase {
 
     @Test
     public void testSignalStartWithTransformation() throws Exception {
+        Application app = ProcessTestHelper.newApplication();
         NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("StartProcess", 1);
-        kruntime = createKogitoProcessRuntime("BPMN2-SignalStartWithTransformation.bpmn2");
-        kruntime.getProcessEventManager().addEventListener(countDownListener);
-        final List<KogitoProcessInstance> list = new ArrayList<>();
-        kruntime.getProcessEventManager().addEventListener(new DefaultKogitoProcessEventListener() {
+
+        ProcessTestHelper.registerProcessEventListener(app, countDownListener);
+        final List<ProcessInstance> list = new ArrayList<>();
+        ProcessTestHelper.registerProcessEventListener(app, new DefaultKogitoProcessEventListener() {
             @Override
             public void beforeProcessStarted(ProcessStartedEvent event) {
-                list.add((KogitoProcessInstance) event.getProcessInstance());
+                list.add(event.getProcessInstance());
             }
         });
-        kruntime.signalEvent("MySignal", "NewValue");
+        org.kie.kogito.process.Process<SignalStartWithTransformationModel> definition = SignalStartWithTransformationProcess.newProcess(app);
+
+        definition.send(Sig.of("MySignal", "NewValue"));
+
         countDownListener.waitTillCompleted();
-        assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1);
-        assertThat(list).isNotNull().hasSize(1);
-        String var = getProcessVarValue(list.get(0), "x");
-        assertThat(var).isEqualTo("NEWVALUE");
+        assertThat(list).extracting(e -> e.getProcessId()).containsExactly("SignalStartWithTransformation");
+        assertThat(list).extracting(e -> ((KogitoProcessInstance) e).getVariables()).containsExactly(Collections.singletonMap("x", "NEWVALUE"));
     }
 
     /**
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/main/java/org/jbpm/tools/maven/ProcessCodeGenerationSupport.java b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/main/java/org/jbpm/tools/maven/ProcessCodeGenerationSupport.java
index 6988db18b3..8095f68c4f 100644
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/main/java/org/jbpm/tools/maven/ProcessCodeGenerationSupport.java
+++ b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/main/java/org/jbpm/tools/maven/ProcessCodeGenerationSupport.java
@@ -37,6 +37,7 @@ import org.jbpm.compiler.canonical.ModelMetaData;
 import org.jbpm.compiler.canonical.ProcessMetaData;
 import org.jbpm.compiler.canonical.ProcessToExecModelGenerator;
 import org.jbpm.compiler.canonical.TemplateHelper;
+import org.jbpm.compiler.canonical.TriggerMetaData;
 import org.jbpm.compiler.xml.XmlProcessReader;
 import org.jbpm.compiler.xml.core.SemanticModules;
 import org.jbpm.ruleflow.core.RuleFlowProcess;
@@ -46,13 +47,21 @@ import org.slf4j.LoggerFactory;
 
 import com.github.javaparser.StaticJavaParser;
 import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.Modifier.Keyword;
 import com.github.javaparser.ast.Node.TreeTraversal;
 import com.github.javaparser.ast.PackageDeclaration;
 import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
 import com.github.javaparser.ast.body.ConstructorDeclaration;
+import com.github.javaparser.ast.body.FieldDeclaration;
 import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.expr.AssignExpr;
+import com.github.javaparser.ast.expr.FieldAccessExpr;
+import com.github.javaparser.ast.expr.NameExpr;
 import com.github.javaparser.ast.expr.ObjectCreationExpr;
+import com.github.javaparser.ast.expr.ThisExpr;
 import com.github.javaparser.ast.expr.VariableDeclarationExpr;
+import com.github.javaparser.ast.stmt.BlockStmt;
 import com.github.javaparser.ast.type.ClassOrInterfaceType;
 import com.github.javaparser.printer.DefaultPrettyPrinter;
 import com.github.javaparser.printer.Printer;
@@ -148,6 +157,7 @@ public class ProcessCodeGenerationSupport {
 
         // process
         CompilationUnit processUnit = metadata.getGeneratedClassModel();
+        addMembers(metadata, processUnit);
 
         RuleFlowProcess ruleFlowProcess = (RuleFlowProcess) process;
         for (String importClass : ruleFlowProcess.getImports()) {
@@ -232,4 +242,39 @@ public class ProcessCodeGenerationSupport {
         LOG.debug("{} generated", modelType.getNameAsString());
         Files.write(Paths.get(outputFolder.toString(), modelType.getName().asString() + ".java"), modelSource.getBytes());
     }
+
+    private void addMembers(ProcessMetaData processMetaData, CompilationUnit compilationUnit) {
+        ClassOrInterfaceDeclaration cls = compilationUnit.findFirst(ClassOrInterfaceDeclaration.class).get();
+        if (!processMetaData.getTriggers().isEmpty()) {
+
+            for (TriggerMetaData trigger : processMetaData.getTriggers()) {
+                // add message produces as field
+                if (trigger.getType().equals(TriggerMetaData.TriggerType.ProduceMessage)) {
+                    ClassOrInterfaceType type = StaticJavaParser.parseClassOrInterfaceType(org.kie.kogito.event.impl.MessageProducer.class.getName() + "<" + trigger.getDataType() + ">");
+                    String producerFieldName = "producer_" + trigger.getOwnerId();
+                    String producerFieldNameCapitalized = "Producer_" + trigger.getOwnerId();
+
+                    FieldDeclaration producerFieldDeclaration = new FieldDeclaration()
+                            .addVariable(new VariableDeclarator(type, producerFieldName));
+                    cls.addMember(producerFieldDeclaration);
+
+                    MethodDeclaration setMethod = new MethodDeclaration();
+                    setMethod.addParameter(type, producerFieldName);
+                    setMethod.setModifier(Keyword.PUBLIC, true);
+                    setMethod.setName("set" + producerFieldNameCapitalized);
+                    setMethod.setType(StaticJavaParser.parseType("void"));
+                    AssignExpr assignExpr = new AssignExpr(
+                            new FieldAccessExpr(new ThisExpr(), producerFieldName),
+                            new NameExpr(producerFieldName),
+                            AssignExpr.Operator.ASSIGN);
+
+                    BlockStmt body = new BlockStmt();
+                    body.addStatement(assignExpr);
+                    setMethod.setBody(body);
+
+                    cls.addMember(setMethod);
+                }
+            }
+        }
+    }
 }
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
deleted file mode 100755
index d6eb0a8cb4..0000000000
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-BoundarySignalEventOnTaskWithTransformation.bpmn
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); 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.
-  -->
-
-<definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.jboss.org/drools" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="Definition" expressionLanguage="http://www.mvel.org/2.0" typeLanguage="http://www.java.com/javaTypes">
-  <itemDefinition id="_xItem" structureRef="String" />
-  <process id="BoundarySignalOnTask" tns:packageName="defaultPackage" name="BoundarySignalOnTask" isExecutable="true" processType="Private">
-    <property id="x" itemSubjectRef="_xItem"/>
-    <startEvent id="_1" name="StartProcess">
-      <outgoing>SequenceFlow_1</outgoing>
-    </startEvent>
-    <scriptTask id="ScriptTask_1" name="Signal received">
-      <incoming>SequenceFlow_5</incoming>
-      <outgoing>SequenceFlow_4</outgoing>
-      <script>System.out.println("Signal handled");</script>
-    </scriptTask>
-    <endEvent id="EndEvent_2" name="End2">
-      <incoming>SequenceFlow_4</incoming>
-      <terminateEventDefinition id="TerminateEventDefinition_1"/>
-    </endEvent>
-    <userTask id="UserTask_1" name="User Task">
-      <incoming>SequenceFlow_1</incoming>
-      <outgoing>SequenceFlow_2</outgoing>
-      <ioSpecification id="_InputOutputSpecification_2">
-        <dataInput id="_DataInput_2" name="TaskName"/>
-        <dataInput id="_DataInput_3" name="Priority"/>
-        <dataInput id="_DataInput_4" name="Comment"/>
-        <dataInput id="_DataInput_5" name="GroupId"/>
-        <dataInput id="_DataInput_6" name="Skippable"/>
-        <dataInput id="_DataInput_7" name="Content"/>
-        <inputSet id="_InputSet_2" name="  Input Set 2">
-          <dataInputRefs>_DataInput_2</dataInputRefs>
-          <dataInputRefs>_DataInput_3</dataInputRefs>
-          <dataInputRefs>_DataInput_4</dataInputRefs>
-          <dataInputRefs>_DataInput_5</dataInputRefs>
-          <dataInputRefs>_DataInput_6</dataInputRefs>
-          <dataInputRefs>_DataInput_7</dataInputRefs>
-        </inputSet>
-        <outputSet/>
-      </ioSpecification>
-      <dataInputAssociation id="_DataInputAssociation_2">
-        <targetRef>_DataInput_2</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_3">
-        <targetRef>_DataInput_3</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_4">
-        <targetRef>_DataInput_4</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_5">
-        <targetRef>_DataInput_5</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_6">
-        <targetRef>_DataInput_6</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_7">
-        <targetRef>_DataInput_7</targetRef>
-      </dataInputAssociation>
-      <potentialOwner id="PotentialOwner_1" name="john">
-        <resourceAssignmentExpression id="ResourceAssignmentExpression_1">
-          <formalExpression id="FormalExpression_1">john</formalExpression>
-        </resourceAssignmentExpression>
-      </potentialOwner>
-    </userTask>
-    <boundaryEvent id="BoundaryEvent_2" name="Boundary event" attachedToRef="UserTask_1" cancelActivity="false">
-      <outgoing>SequenceFlow_5</outgoing>
-      <dataOutput id="_4_Output" name="param" itemSubjectRef="_xItem"/>
-      <dataOutputAssociation id="DataOutputAssociation_1">
-        <sourceRef>_4_Output</sourceRef>
-        <targetRef>x</targetRef>
-        <transformation language="http://www.java.com/java">param.toUpperCase();</transformation>
-      </dataOutputAssociation>
-      <outputSet id="OutputSet_1">
-        <dataOutputRefs>_4_Output</dataOutputRefs>
-      </outputSet>
-      <signalEventDefinition id="SignalEventDefinition_2" signalRef="MySignal"/>
-    </boundaryEvent>
-    <sequenceFlow id="SequenceFlow_1" tns:priority="1" name="" sourceRef="_1" targetRef="UserTask_1"/>
-    <sequenceFlow id="SequenceFlow_2" tns:priority="1" sourceRef="UserTask_1" targetRef="UserTask_2"/>
-    <sequenceFlow id="SequenceFlow_5" tns:priority="1" name="" sourceRef="BoundaryEvent_2" targetRef="ScriptTask_1"/>
-    <sequenceFlow id="SequenceFlow_4" tns:priority="1" sourceRef="ScriptTask_1" targetRef="EndEvent_2"/>
-    <endEvent id="EndEvent_1" name="End1">
-      <incoming>SequenceFlow_3</incoming>
-      <terminateEventDefinition id="TerminateEventDefinition_2"/>
-    </endEvent>
-    <userTask id="UserTask_2" name="User Task2">
-      <incoming>SequenceFlow_2</incoming>
-      <outgoing>SequenceFlow_3</outgoing>
-      <ioSpecification id="_InputOutputSpecification_3">
-        <dataInput id="_DataInput_8" name="TaskName"/>
-        <dataInput id="_DataInput_9" name="Priority"/>
-        <dataInput id="_DataInput_10" name="Comment"/>
-        <dataInput id="_DataInput_11" name="GroupId"/>
-        <dataInput id="_DataInput_12" name="Skippable"/>
-        <dataInput id="_DataInput_13" name="Content"/>
-        <inputSet id="_InputSet_3" name="  Input Set 3">
-          <dataInputRefs>_DataInput_8</dataInputRefs>
-          <dataInputRefs>_DataInput_9</dataInputRefs>
-          <dataInputRefs>_DataInput_10</dataInputRefs>
-          <dataInputRefs>_DataInput_11</dataInputRefs>
-          <dataInputRefs>_DataInput_12</dataInputRefs>
-          <dataInputRefs>_DataInput_13</dataInputRefs>
-        </inputSet>
-        <outputSet/>
-      </ioSpecification>
-      <dataInputAssociation id="_DataInputAssociation_8">
-        <targetRef>_DataInput_8</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_9">
-        <targetRef>_DataInput_9</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_10">
-        <targetRef>_DataInput_10</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_11">
-        <targetRef>_DataInput_11</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_12">
-        <targetRef>_DataInput_12</targetRef>
-      </dataInputAssociation>
-      <dataInputAssociation id="_DataInputAssociation_13">
-        <targetRef>_DataInput_13</targetRef>
-      </dataInputAssociation>
-      <potentialOwner id="PotentialOwner_2" name="john">
-        <resourceAssignmentExpression id="ResourceAssignmentExpression_2">
-          <formalExpression id="FormalExpression_2">john</formalExpression>
-        </resourceAssignmentExpression>
-      </potentialOwner>
-    </userTask>
-    <sequenceFlow id="SequenceFlow_3" tns:priority="1" name="" sourceRef="UserTask_2" targetRef="EndEvent_1"/>
-  </process>
-  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-    <bpmndi:BPMNPlane id="BPMNPlane_Process_1" bpmnElement="BoundarySignalOnTask">
-      <bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="_1" isHorizontal="true">
-        <dc:Bounds height="48.0" width="48.0" x="45.0" y="54.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="EndEvent_1" isHorizontal="true">
-        <dc:Bounds height="48.0" width="48.0" x="720.0" y="46.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_ScriptTask_1" bpmnElement="ScriptTask_1" isHorizontal="true">
-        <dc:Bounds height="50.0" width="110.0" x="370.0" y="152.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_EndEvent_2" bpmnElement="EndEvent_2" isHorizontal="true">
-        <dc:Bounds height="48.0" width="48.0" x="530.0" y="153.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_UserTask_1" bpmnElement="UserTask_1" isHorizontal="true">
-        <dc:Bounds height="50.0" width="110.0" x="205.0" y="45.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_BoundaryEvent_2" bpmnElement="BoundaryEvent_2" isHorizontal="true">
-        <dc:Bounds height="48.0" width="48.0" x="251.0" y="71.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_UserTask_2" bpmnElement="UserTask_2">
-        <dc:Bounds height="50.0" width="110.0" x="479.0" y="45.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="BPMNShape_StartEvent_1" targetElement="BPMNShape_UserTask_1">
-        <di:waypoint xsi:type="dc:Point" x="93.0" y="78.0"/>
-        <di:waypoint xsi:type="dc:Point" x="205.0" y="70.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="BPMNShape_UserTask_1" targetElement="BPMNShape_UserTask_2">
-        <di:waypoint xsi:type="dc:Point" x="315.0" y="70.0"/>
-        <di:waypoint xsi:type="dc:Point" x="479.0" y="70.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_4" bpmnElement="SequenceFlow_4" sourceElement="BPMNShape_ScriptTask_1" targetElement="BPMNShape_EndEvent_2">
-        <di:waypoint xsi:type="dc:Point" x="480.0" y="177.0"/>
-        <di:waypoint xsi:type="dc:Point" x="530.0" y="177.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_5" bpmnElement="SequenceFlow_5" sourceElement="BPMNShape_BoundaryEvent_2" targetElement="BPMNShape_ScriptTask_1">
-        <di:waypoint xsi:type="dc:Point" x="275.0" y="119.0"/>
-        <di:waypoint xsi:type="dc:Point" x="274.0" y="177.0"/>
-        <di:waypoint xsi:type="dc:Point" x="370.0" y="177.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_3" sourceElement="BPMNShape_UserTask_2" targetElement="BPMNShape_EndEvent_1">
-        <di:waypoint xsi:type="dc:Point" x="589.0" y="70.0"/>
-        <di:waypoint xsi:type="dc:Point" x="720.0" y="70.0"/>
-      </bpmndi:BPMNEdge>
-    </bpmndi:BPMNPlane>
-  </bpmndi:BPMNDiagram>
-</definitions>
\ No newline at end of file
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-DataInputAssociations-two-assigns.bpmn2 b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-DataInputAssociations-two-assigns.bpmn2
deleted file mode 100755
index e514a8b2b2..0000000000
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-DataInputAssociations-two-assigns.bpmn2
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<definitions id="Definition"
-             targetNamespace=""
-             typeLanguage="http://www.java.com/javaTypes"
-             expressionLanguage="http://www.mvel.org/2.0"
-             xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
-             xmlns:g="http://www.jboss.org/drools/flow/gpd"
-             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
-             xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
-             xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
-             xmlns:tns="http://www.jboss.org/drools">
-  <itemDefinition id='objectType' structureRef='org.w3c.dom.Node'/>
-  <process id='process'>
-    <property id='instanceMetadata' itemSubjectRef='objectType'/>
-    <startEvent id='_5DF6C746-EEDF-4D39-A953-B529A0320D24' name=''/>
-    <exclusiveGateway id='_81070F07-C929-4C93-8B08-18FF6D319F6A' name='' gatewayDirection='Diverging'/>
-    <sequenceFlow id='_036CFFA5-945F-4597-BD74-DBFBA5553D7D' sourceRef='_5DF6C746-EEDF-4D39-A953-B529A0320D24' targetRef='_81070F07-C929-4C93-8B08-18FF6D319F6A'/>
-    <userTask id='_BF09B923-BE11-4447-BECB-609BD86C59EF' name=''>
-      <ioSpecification>
-        <dataInput id='_BF09B923-BE11-4447-BECB-609BD86C59EF_Comment' name='Comment'/>
-        <inputSet>
-          <dataInputRefs>_BF09B923-BE11-4447-BECB-609BD86C59EF_Comment</dataInputRefs>
-        </inputSet>
-      </ioSpecification>
-      <dataInputAssociation>
-        <sourceRef>instanceMetadata</sourceRef>
-        <targetRef>_BF09B923-BE11-4447-BECB-609BD86C59EF_Comment</targetRef>
-        <assignment>
-          <from>.</from>
-          <to>foo</to>
-        </assignment>
-        <assignment>
-          <from>.</from>
-          <to>foo/bar</to>
-        </assignment>
-      </dataInputAssociation>
-    </userTask>
-    <sequenceFlow id='_E6BD9F03-8580-4AD8-A5CC-6D1F416E514C' sourceRef='_81070F07-C929-4C93-8B08-18FF6D319F6A' targetRef='_BF09B923-BE11-4447-BECB-609BD86C59EF'>
-      <conditionExpression language='http://www.w3.org/1999/XPath'>true()</conditionExpression>
-    </sequenceFlow>
-    <scriptTask id='_7CA18647-714B-44D5-8DEB-544709C4221A' name=''>
-      <ioSpecification>
-        <inputSet/>
-        <outputSet/>
-      </ioSpecification>
-      <script>System.out.println("Task 2");</script>
-    </scriptTask>
-    <sequenceFlow id='_ED6FD301-F8C0-4241-A8FF-A1F7756652B7' sourceRef='_81070F07-C929-4C93-8B08-18FF6D319F6A' targetRef='_7CA18647-714B-44D5-8DEB-544709C4221A'>
-      <conditionExpression language='http://www.w3.org/1999/XPath'>count($instanceMetadata/user) = 2</conditionExpression>
-    </sequenceFlow>
-    <sequenceFlow id='_2BF3E89A-B28F-40E3-9A9B-A982206BF500' sourceRef='_7CA18647-714B-44D5-8DEB-544709C4221A' targetRef='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE'/>
-    <endEvent id='_C1D067D7-3596-45F7-9B75-69F60C3442F1' name=''/>
-    <sequenceFlow id='_119E4948-40CF-4C76-9988-22C706C1AB1A' sourceRef='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE' targetRef='_C1D067D7-3596-45F7-9B75-69F60C3442F1'/>
-    <exclusiveGateway id='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE' name='' gatewayDirection='Converging'/>
-    <sequenceFlow id='_0849EEE3-09A2-4E99-A232-E1EA8B8C4121' sourceRef='_BF09B923-BE11-4447-BECB-609BD86C59EF' targetRef='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE'/>
-  </process>
-</definitions>
-
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-DataOutputAssociations-HumanTask.bpmn2 b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-DataOutputAssociations-HumanTask.bpmn2
deleted file mode 100755
index 6dbff6573d..0000000000
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-DataOutputAssociations-HumanTask.bpmn2
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<definitions id="Definition"
-             targetNamespace=""
-             typeLanguage="http://www.java.com/javaTypes"
-             expressionLanguage="http://www.mvel.org/2.0"
-             xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
-             xmlns:g="http://www.jboss.org/drools/flow/gpd"
-             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
-             xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
-             xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
-             xmlns:tns="http://www.jboss.org/drools">
-  <itemDefinition id='objectType' structureRef='org.w3c.dom.Element'/>
-  <process id='process'>
-    <property id='instanceMetadata' itemSubjectRef='objectType'/>
-    <startEvent id='_5DF6C746-EEDF-4D39-A953-B529A0320D24' name=''/>
-    <exclusiveGateway id='_81070F07-C929-4C93-8B08-18FF6D319F6A' name='' gatewayDirection='Diverging'/>
-    <sequenceFlow id='_036CFFA5-945F-4597-BD74-DBFBA5553D7D' sourceRef='_5DF6C746-EEDF-4D39-A953-B529A0320D24' targetRef='_81070F07-C929-4C93-8B08-18FF6D319F6A'/>
-    <userTask id='_BF09B923-BE11-4447-BECB-609BD86C59EF' name=''>
-      <ioSpecification>
-        <dataOutput id='_BF09B923-BE11-4447-BECB-609BD86C59EF_PreviousOwner' name='output'/>
-        <inputSet/>
-        <outputSet>
-          <dataOutputRefs>_BF09B923-BE11-4447-BECB-609BD86C59EF_PreviousOwner</dataOutputRefs>
-        </outputSet>
-      </ioSpecification>
-      <dataOutputAssociation>
-        <sourceRef>_BF09B923-BE11-4447-BECB-609BD86C59EF_PreviousOwner</sourceRef>
-        <targetRef>instanceMetadata</targetRef>
-        <assignment>
-          <from>@primaryname</from>
-          <to>previoustasksowner</to>
-        </assignment>
-      </dataOutputAssociation>
-    </userTask>
-    <sequenceFlow id='_E6BD9F03-8580-4AD8-A5CC-6D1F416E514C' sourceRef='_81070F07-C929-4C93-8B08-18FF6D319F6A' targetRef='_BF09B923-BE11-4447-BECB-609BD86C59EF'>
-      <conditionExpression xsi:type="tFormalExpression" language='http://www.w3.org/1999/XPath'>true()</conditionExpression>
-    </sequenceFlow>
-    <scriptTask id='_7CA18647-714B-44D5-8DEB-544709C4221A' name=''>
-      <ioSpecification>
-        <inputSet/>
-        <outputSet/>
-      </ioSpecification>
-      <script>System.out.println("Task 2");</script>
-    </scriptTask>
-    <sequenceFlow id='_ED6FD301-F8C0-4241-A8FF-A1F7756652B7' sourceRef='_81070F07-C929-4C93-8B08-18FF6D319F6A' targetRef='_7CA18647-714B-44D5-8DEB-544709C4221A'>
-      <conditionExpression xsi:type="tFormalExpression" language='http://www.w3.org/1999/XPath'>count($instanceMetadata/user) = 2</conditionExpression>
-    </sequenceFlow>
-    <sequenceFlow id='_2BF3E89A-B28F-40E3-9A9B-A982206BF500' sourceRef='_7CA18647-714B-44D5-8DEB-544709C4221A' targetRef='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE'/>
-    <endEvent id='_C1D067D7-3596-45F7-9B75-69F60C3442F1' name=''/>
-    <sequenceFlow id='_119E4948-40CF-4C76-9988-22C706C1AB1A' sourceRef='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE' targetRef='_C1D067D7-3596-45F7-9B75-69F60C3442F1'/>
-    <exclusiveGateway id='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE' name='' gatewayDirection='Converging'/>
-    <sequenceFlow id='_0849EEE3-09A2-4E99-A232-E1EA8B8C4121' sourceRef='_BF09B923-BE11-4447-BECB-609BD86C59EF' targetRef='_FB90F2CD-5CA2-4F85-88C0-022B03130BAE'/>
-  </process>
-</definitions>
-
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessage.bpmn2 b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
similarity index 91%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessage.bpmn2
rename to jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
index 98e805c272..bc22ee935a 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-IntermediateThrowEventMessage.bpmn2
+++ b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-IntermediateThrowEventMessageWithTransformation.bpmn2
@@ -35,7 +35,7 @@
   <itemDefinition id="_2_MessageType" structureRef="String" />
   <message id="_2_Message" itemRef="_2_MessageType" />
 
-  <process processType="Private" isExecutable="true" id="IntermediateThrowEventMessage" tns:packageName="org.jbpm.bpmn2.intermediate" name="Message Intermediate Throw Event Process" >
+  <process processType="Private" isExecutable="true" id="IntermediateThrowEventMessageWithTransformation" tns:packageName="org.jbpm.bpmn2.intermediate" name="Message Intermediate Throw Event Process" >
 
     <!-- process variables -->
     <property id="x" itemSubjectRef="_xItem"/>
@@ -43,10 +43,11 @@
     <!-- nodes -->
     <startEvent id="_1" name="StartProcess" />
     <intermediateThrowEvent id="_2" name="MessageEvent" >
-      <dataInput id="_2_Input" />
+      <dataInput id="_2_Input" name="param" itemSubjectRef="_xItem"/>
       <dataInputAssociation>
         <sourceRef>x</sourceRef>
         <targetRef>_2_Input</targetRef>
+        <transformation language="http://www.java.com/java">x.toUpperCase();</transformation>
       </dataInputAssociation>
       <inputSet>
         <dataInputRefs>_2_Input</dataInputRefs>
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-SubProcessWithEntryExitScripts.bpmn2 b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-SubProcessWithEntryExitScripts.bpmn2
deleted file mode 100755
index 82c335553b..0000000000
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-SubProcessWithEntryExitScripts.bpmn2
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); 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.
-  -->
-
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.jboss.org/drools" xmlns="http://www.jboss.org/drools" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd http://www.jboss.org/drools drools.xsd http://www.bpsi [...]
-  <bpmn2:itemDefinition id="_String" structureRef="String"/>
-  <bpmn2:itemDefinition id="_Integer" structureRef="Integer"/>
-  <bpmn2:process id="SubProcessWithEntryExitScripts" tns:version="1" tns:packageName="org.jbpm.bpmn2.subprocess" name="Hello World" isExecutable="true" processType="Private">
-    <bpmn2:extensionElements/>
-    <bpmn2:property id="var2" itemSubjectRef="_Integer"/>
-    <bpmn2:property id="var3" itemSubjectRef="_Integer"/>
-    <bpmn2:property id="var1" itemSubjectRef="_Integer"/>
-    <bpmn2:property id="var4" itemSubjectRef="_Integer"/>
-    <bpmn2:property id="var5" itemSubjectRef="_Integer"/>
-    <bpmn2:scriptTask id="_2" name="Task1" scriptFormat="http://www.java.com/java">
-      <bpmn2:incoming>_1-_2</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_11</bpmn2:outgoing>
-      <bpmn2:script>System.err.println(&quot;Task 1, var1 = 10&quot;);
-kcontext.setVariable(&quot;var1&quot;, new Integer(10));
-</bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:startEvent id="_1" name="">
-      <bpmn2:outgoing>_1-_2</bpmn2:outgoing>
-    </bpmn2:startEvent>
-    <bpmn2:sequenceFlow id="_1-_2" tns:priority="1" sourceRef="_1" targetRef="_2"/>
-    <bpmn2:scriptTask id="ScriptTask_2" name="Task3">
-      <bpmn2:incoming>SequenceFlow_12</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_7</bpmn2:outgoing>
-      <bpmn2:script>System.err.println(&quot;Task 3, var3 = 30&quot;);
-kcontext.setVariable(&quot;var3&quot;,30);
-</bpmn2:script>
-    </bpmn2:scriptTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_7" tns:priority="1" name="" sourceRef="ScriptTask_2" targetRef="UserTask_2"/>
-    <bpmn2:endEvent id="_3" name="">
-      <bpmn2:incoming>SequenceFlow_8</bpmn2:incoming>
-      <bpmn2:terminateEventDefinition id="TerminateEventDefinition_1"/>
-    </bpmn2:endEvent>
-    <bpmn2:userTask id="UserTask_2" name="User Task 2">
-      <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_8</bpmn2:outgoing>
-      <bpmn2:ioSpecification id="_InputOutputSpecification_24">
-        <bpmn2:dataInput id="_DataInput_150" name="TaskName"/>
-        <bpmn2:dataInput id="_DataInput_151" name="Priority"/>
-        <bpmn2:dataInput id="_DataInput_152" name="Comment"/>
-        <bpmn2:dataInput id="_DataInput_153" name="GroupId"/>
-        <bpmn2:dataInput id="_DataInput_154" name="Skippable"/>
-        <bpmn2:dataInput id="_DataInput_155" name="Content"/>
-        <bpmn2:dataInput id="_DataInput_156" name="Locale"/>
-        <bpmn2:inputSet id="_InputSet_24" name="New Input Set">
-          <bpmn2:dataInputRefs>_DataInput_150</bpmn2:dataInputRefs>
-          <bpmn2:dataInputRefs>_DataInput_151</bpmn2:dataInputRefs>
-          <bpmn2:dataInputRefs>_DataInput_152</bpmn2:dataInputRefs>
-          <bpmn2:dataInputRefs>_DataInput_153</bpmn2:dataInputRefs>
-          <bpmn2:dataInputRefs>_DataInput_154</bpmn2:dataInputRefs>
-          <bpmn2:dataInputRefs>_DataInput_155</bpmn2:dataInputRefs>
-          <bpmn2:dataInputRefs>_DataInput_156</bpmn2:dataInputRefs>
-        </bpmn2:inputSet>
-        <bpmn2:outputSet id="_OutputSet_21" name="Output Set"/>
-      </bpmn2:ioSpecification>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_150">
-        <bpmn2:targetRef>_DataInput_150</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_151">
-        <bpmn2:targetRef>_DataInput_151</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_152">
-        <bpmn2:targetRef>_DataInput_152</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_153">
-        <bpmn2:targetRef>_DataInput_153</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_154">
-        <bpmn2:targetRef>_DataInput_154</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_155">
-        <bpmn2:targetRef>_DataInput_155</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-      <bpmn2:dataInputAssociation id="_DataInputAssociation_156">
-        <bpmn2:targetRef>_DataInput_156</bpmn2:targetRef>
-      </bpmn2:dataInputAssociation>
-    </bpmn2:userTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_8" tns:priority="1" name="" sourceRef="UserTask_2" targetRef="_3"/>
-    <bpmn2:subProcess id="SubProcess_1" name="SubProcess">
-      <bpmn2:extensionElements>
-        <tns:onEntry-script scriptFormat="http://www.java.com/java">
-          <tns:script>System.err.println(&quot;SubProcess, var4 = 40&quot;);
-kcontext.setVariable(&quot;var4&quot;,40);
-</tns:script>
-        </tns:onEntry-script>
-        <tns:onExit-script scriptFormat="http://www.java.com/java">
-          <tns:script>System.err.println(&quot;SubProcess, var5 = 50&quot;);
-kcontext.setVariable(&quot;var5&quot;,50);
-</tns:script>
-        </tns:onExit-script>
-      </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_11</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_12</bpmn2:outgoing>
-      <bpmn2:startEvent id="StartEvent_1" name="">
-        <bpmn2:outgoing>SequenceFlow_10</bpmn2:outgoing>
-      </bpmn2:startEvent>
-      <bpmn2:sequenceFlow id="SequenceFlow_10" tns:priority="1" name="" sourceRef="StartEvent_1" targetRef="ScriptTask_1"/>
-      <bpmn2:scriptTask id="ScriptTask_1" name="Task2" scriptFormat="http://www.java.com/java">
-        <bpmn2:incoming>SequenceFlow_10</bpmn2:incoming>
-        <bpmn2:outgoing>SequenceFlow_9</bpmn2:outgoing>
-        <bpmn2:script>System.err.println(&quot;Task 2, var2 = 20&quot;);
-kcontext.setVariable(&quot;var2&quot;,20);
-</bpmn2:script>
-      </bpmn2:scriptTask>
-      <bpmn2:sequenceFlow id="SequenceFlow_9" tns:priority="1" sourceRef="ScriptTask_1" targetRef="EndEvent_1"/>
-      <bpmn2:endEvent id="EndEvent_1" name="">
-        <bpmn2:incoming>SequenceFlow_9</bpmn2:incoming>
-      </bpmn2:endEvent>
-    </bpmn2:subProcess>
-    <bpmn2:sequenceFlow id="SequenceFlow_11" tns:priority="1" name="" sourceRef="_2" targetRef="SubProcess_1"/>
-    <bpmn2:sequenceFlow id="SequenceFlow_12" tns:priority="1" name="" sourceRef="SubProcess_1" targetRef="ScriptTask_2"/>
-  </bpmn2:process>
-  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-    <bpmndi:BPMNPlane id="BPMNPlane_Process_1" bpmnElement="com.sample.bpmn.hello">
-      <bpmndi:BPMNShape id="BPMNShape_SubProcess_1" bpmnElement="SubProcess_1" isExpanded="true">
-        <dc:Bounds height="111.0" width="274.0" x="290.0" y="6.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="_1">
-        <dc:Bounds height="36.0" width="36.0" x="40.0" y="43.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_EndEvent_1" bpmnElement="_3">
-        <dc:Bounds height="36.0" width="36.0" x="990.0" y="43.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_ScriptTask_1" bpmnElement="_2">
-        <dc:Bounds height="48.0" width="80.0" x="120.0" y="39.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_ScriptTask_3" bpmnElement="ScriptTask_2">
-        <dc:Bounds height="50.0" width="110.0" x="630.0" y="35.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_UserTask_2" bpmnElement="UserTask_2">
-        <dc:Bounds height="50.0" width="110.0" x="820.0" y="35.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_EndEvent_2" bpmnElement="EndEvent_1">
-        <dc:Bounds height="36.0" width="36.0" x="508.0" y="44.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
-        <dc:Bounds height="36.0" width="36.0" x="310.0" y="44.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BPMNShape_ScriptTask_2" bpmnElement="ScriptTask_1">
-        <dc:Bounds height="50.0" width="110.0" x="373.0" y="37.0"/>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="_1-_2">
-        <di:waypoint xsi:type="dc:Point" x="76.0" y="61.0"/>
-        <di:waypoint xsi:type="dc:Point" x="120.0" y="63.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_8" bpmnElement="SequenceFlow_7" sourceElement="BPMNShape_ScriptTask_3" targetElement="BPMNShape_UserTask_2">
-        <di:waypoint xsi:type="dc:Point" x="740.0" y="60.0"/>
-        <di:waypoint xsi:type="dc:Point" x="820.0" y="60.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_9" bpmnElement="SequenceFlow_8" sourceElement="BPMNShape_UserTask_2" targetElement="BPMNShape_EndEvent_1">
-        <di:waypoint xsi:type="dc:Point" x="930.0" y="60.0"/>
-        <di:waypoint xsi:type="dc:Point" x="990.0" y="61.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_10" bpmnElement="SequenceFlow_9" sourceElement="BPMNShape_ScriptTask_2" targetElement="BPMNShape_EndEvent_2">
-        <di:waypoint xsi:type="dc:Point" x="483.0" y="62.0"/>
-        <di:waypoint xsi:type="dc:Point" x="494.0" y="62.0"/>
-        <di:waypoint xsi:type="dc:Point" x="494.0" y="62.0"/>
-        <di:waypoint xsi:type="dc:Point" x="508.0" y="62.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_11" bpmnElement="SequenceFlow_10" sourceElement="BPMNShape_StartEvent_2" targetElement="BPMNShape_ScriptTask_2">
-        <di:waypoint xsi:type="dc:Point" x="346.0" y="62.0"/>
-        <di:waypoint xsi:type="dc:Point" x="358.0" y="62.0"/>
-        <di:waypoint xsi:type="dc:Point" x="358.0" y="62.0"/>
-        <di:waypoint xsi:type="dc:Point" x="373.0" y="62.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_12" bpmnElement="SequenceFlow_11" sourceElement="BPMNShape_ScriptTask_1" targetElement="BPMNShape_SubProcess_1">
-        <di:waypoint xsi:type="dc:Point" x="200.0" y="63.0"/>
-        <di:waypoint xsi:type="dc:Point" x="290.0" y="61.0"/>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_13" bpmnElement="SequenceFlow_12" sourceElement="BPMNShape_SubProcess_1" targetElement="BPMNShape_ScriptTask_3">
-        <di:waypoint xsi:type="dc:Point" x="564.0" y="61.0"/>
-        <di:waypoint xsi:type="dc:Point" x="630.0" y="60.0"/>
-      </bpmndi:BPMNEdge>
-    </bpmndi:BPMNPlane>
-  </bpmndi:BPMNDiagram>
-</bpmn2:definitions>
\ No newline at end of file
diff --git a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-XpathExpression.bpmn2 b/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-XpathExpression.bpmn2
deleted file mode 100755
index 93d72711cf..0000000000
--- a/jbpm/jbpm-tools/jbpm-tools-maven-plugin/src/test/resources/unit/project/src/main/bpmn/BPMN2-XpathExpression.bpmn2
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?> 
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one
-  ~ or more contributor license agreements.  See the NOTICE file
-  ~ distributed with this work for additional information
-  ~ regarding copyright ownership.  The ASF licenses this file
-  ~ to you under the Apache License, Version 2.0 (the
-  ~ "License"); 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.
-  -->
-
-<definitions id="Definition"
-             targetNamespace=""
-             typeLanguage="http://www.java.com/javaTypes"
-             expressionLanguage="http://www.mvel.org/2.0"
-             xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
-             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
-             xmlns:g="http://www.jboss.org/drools/flow/gpd"
-             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
-             xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
-             xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
-             xmlns:tns="http://www.jboss.org/drools">
-
-  <itemDefinition id="_instanceMetadataItem" structureRef="org.w3c.dom.Document" />
-
-  <process processType="Private" isExecutable="true" id="XPathProcess" name="XPathProcess" tns:packageName="org.jbpm.bpmn2.activity">
-
-    <!-- process variables -->
-    <property id="instanceMetadata" itemSubjectRef="_instanceMetadataItem"/>
-
-    <!-- nodes -->
-    <startEvent id="_1" name="" />
-    <exclusiveGateway id="_2" name="" gatewayDirection="Diverging" />
-    <scriptTask id="_3" name="Task1" >
-      <script>System.out.println("Task 1");</script>
-    </scriptTask>
-    <scriptTask id="_4" name="Task2" >
-      <script>System.out.println("Task 2");</script>
-    </scriptTask>
-    <exclusiveGateway id="_5" name="" gatewayDirection="Converging" />
-    <endEvent id="_6" name="" />
-
-    <!-- connections -->
-    <sequenceFlow id="_1-_2" sourceRef="_1" targetRef="_2" />
-    <sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3" >
-      <conditionExpression xsi:type="tFormalExpression" language="http://www.w3.org/1999/XPath" >count($instanceMetadata/instanceMetadata/user[@approved='true']) = 1</conditionExpression>
-    </sequenceFlow>
-    <sequenceFlow id="_2-_4" sourceRef="_2" targetRef="_4" >
-      <conditionExpression xsi:type="tFormalExpression" language="http://www.w3.org/1999/XPath" >count($instanceMetadata/instanceMetadata/user[@approved='false']) = 1</conditionExpression>
-    </sequenceFlow>
-    <sequenceFlow id="_3-_5" sourceRef="_3" targetRef="_5" />
-    <sequenceFlow id="_4-_5" sourceRef="_4" targetRef="_5" />
-    <sequenceFlow id="_5-_6" sourceRef="_5" targetRef="_6" />
-
-  </process>
-
-  <bpmndi:BPMNDiagram>
-    <bpmndi:BPMNPlane bpmnElement="XPathProcess" >
-      <bpmndi:BPMNShape bpmnElement="_1" >
-        <dc:Bounds x="16" y="56" width="48" height="48" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="_2" >
-        <dc:Bounds x="96" y="56" width="48" height="48" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="_3" >
-        <dc:Bounds x="176" y="16" width="80" height="48" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="_4" >
-        <dc:Bounds x="176" y="96" width="80" height="48" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="_5" >
-        <dc:Bounds x="288" y="56" width="48" height="48" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape bpmnElement="_6" >
-        <dc:Bounds x="368" y="56" width="48" height="48" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge bpmnElement="_1-_2" >
-        <di:waypoint x="40" y="80" />
-        <di:waypoint x="120" y="80" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="_2-_3" >
-        <di:waypoint x="120" y="80" />
-        <di:waypoint x="216" y="40" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="_2-_4" >
-        <di:waypoint x="120" y="80" />
-        <di:waypoint x="216" y="120" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="_3-_5" >
-        <di:waypoint x="216" y="40" />
-        <di:waypoint x="312" y="80" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="_4-_5" >
-        <di:waypoint x="216" y="120" />
-        <di:waypoint x="312" y="80" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge bpmnElement="_5-_6" >
-        <di:waypoint x="312" y="80" />
-        <di:waypoint x="392" y="80" />
-      </bpmndi:BPMNEdge>
-    </bpmndi:BPMNPlane>
-  </bpmndi:BPMNDiagram>
-
-</definitions>
\ No newline at end of file
diff --git a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/NodeFactoryUtils.java b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/NodeFactoryUtils.java
index 18590dc51e..ab2b73b91c 100644
--- a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/NodeFactoryUtils.java
+++ b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/NodeFactoryUtils.java
@@ -78,10 +78,11 @@ public class NodeFactoryUtils {
         return actionNode
                 .name(name)
                 .metaData(Metadata.EVENT_TYPE, "message")
-                .metaData(Metadata.MAPPING_VARIABLE, inputVar)
+                .metaData(Metadata.MAPPING_VARIABLE_INPUT, inputVar)
                 .metaData(Metadata.TRIGGER_REF, type)
                 .metaData(Metadata.MESSAGE_TYPE, JSON_NODE)
-                .metaData(Metadata.TRIGGER_TYPE, "ProduceMessage");
+                .metaData(Metadata.TRIGGER_TYPE, "ProduceMessage")
+                .inMapping(inputVar, inputVar);
     }
 
     public static <T extends StartNodeFactory<P>, P extends RuleFlowNodeContainerFactory<P, ?>> T startMessageNode(T nodeFactory, EventDefinition eventDefinition, String inputVar, String outputVar) {
diff --git a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/suppliers/ProduceEventActionSupplier.java b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/suppliers/ProduceEventActionSupplier.java
index 7100199787..e53e57f69c 100644
--- a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/suppliers/ProduceEventActionSupplier.java
+++ b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/suppliers/ProduceEventActionSupplier.java
@@ -38,6 +38,7 @@ import com.github.javaparser.ast.expr.StringLiteralExpr;
 import io.serverlessworkflow.api.Workflow;
 
 import static com.github.javaparser.StaticJavaParser.parseClassOrInterfaceType;
+import static org.jbpm.ruleflow.core.Metadata.MAPPING_VARIABLE_INPUT;
 
 public class ProduceEventActionSupplier extends SWFProduceEventAction implements ExpressionSupplier {
 
@@ -49,7 +50,8 @@ public class ProduceEventActionSupplier extends SWFProduceEventAction implements
 
     @Override
     public Expression get(KogitoNode node, ProcessMetaData metadata) {
-        return AbstractNodeVisitor.buildProducerAction(parseClassOrInterfaceType(SWFProduceEventAction.class.getCanonicalName()), TriggerMetaData.of(node), metadata)
+        return AbstractNodeVisitor.buildProducerAction(parseClassOrInterfaceType(SWFProduceEventAction.class.getCanonicalName()), TriggerMetaData.of(node, (String) node.getMetaData()
+                .get(MAPPING_VARIABLE_INPUT)), metadata)
                 .addArgument(new StringLiteralExpr(exprLang))
                 .addArgument(data != null ? new StringLiteralExpr().setString(data) : new NullLiteralExpr());
     }
diff --git a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
index f0f5a11337..e140cb54b8 100644
--- a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
+++ b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
@@ -425,7 +425,7 @@ public class ServerlessWorkflowParsingTest extends AbstractServerlessWorkflowPar
         ActionNode actionNode = (ActionNode) process.getNodes()[4];
         assertThat(actionNode.getName()).isEqualTo("TestKafkaEvent");
         assertThat(actionNode.getMetaData("TriggerType")).isEqualTo("ProduceMessage");
-        assertThat(actionNode.getMetaData("MappingVariable")).isEqualTo("workflowdata");
+        assertThat(actionNode.getMetaData("MappingVariableInput")).isEqualTo("workflowdata");
         assertThat(actionNode.getMetaData("TriggerRef")).isEqualTo("kafka");
         assertThat(actionNode.getMetaData("MessageType")).isEqualTo("com.fasterxml.jackson.databind.JsonNode");
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@kie.apache.org
For additional commands, e-mail: commits-help@kie.apache.org