[jboss-svn-commits] JBL Code SVN: r29174 - in labs/jbossrules/branches/salaboy_RelationalVariablePersistence: drools-core/src/main/java/org/drools/workflow/instance/node and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Sep 3 15:58:27 EDT 2009
Author: KrisVerlaenen
Date: 2009-09-03 15:58:27 -0400 (Thu, 03 Sep 2009)
New Revision: 29174
Added:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf
Modified:
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeContextNodeInstance.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
Log:
- cleanup nested variable persistence
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java 2009-09-03 14:15:34 UTC (rev 29173)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java 2009-09-03 19:58:27 UTC (rev 29174)
@@ -81,6 +81,10 @@
protected void writeAttributes(CompositeNode compositeNode, StringBuffer xmlDump, boolean includeMeta) {
}
+ public boolean allowNesting() {
+ return true;
+ }
+
protected List<Node> getSubNodes(CompositeNode compositeNode) {
List<Node> subNodes =
new ArrayList<Node>();
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeContextNodeInstance.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeContextNodeInstance.java 2009-09-03 14:15:34 UTC (rev 29173)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeContextNodeInstance.java 2009-09-03 19:58:27 UTC (rev 29174)
@@ -10,12 +10,13 @@
import org.drools.process.core.ContextContainer;
import org.drools.process.instance.ContextInstance;
import org.drools.process.instance.ContextInstanceContainer;
+import org.drools.process.instance.ContextableInstance;
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.impl.ContextInstanceFactory;
import org.drools.process.instance.impl.ContextInstanceFactoryRegistry;
import org.drools.workflow.core.node.CompositeContextNode;
-public class CompositeContextNodeInstance extends CompositeNodeInstance implements ContextInstanceContainer {
+public class CompositeContextNodeInstance extends CompositeNodeInstance implements ContextInstanceContainer, ContextableInstance {
private static final long serialVersionUID = 4L;
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-09-03 14:15:34 UTC (rev 29173)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java 2009-09-03 19:58:27 UTC (rev 29174)
@@ -1,8 +1,5 @@
package org.drools.persistence.processinstance;
-import java.util.Collection;
-import org.drools.definition.process.Node;
-import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -10,12 +7,12 @@
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -29,11 +26,8 @@
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
-
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
-import javax.persistence.PostPersist;
-import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Transient;
@@ -42,31 +36,25 @@
import org.drools.WorkingMemory;
import org.drools.common.InternalRuleBase;
import org.drools.common.InternalWorkingMemory;
-
-
-import org.drools.definition.process.NodeContainer;
import org.drools.marshalling.impl.MarshallerReaderContext;
import org.drools.marshalling.impl.MarshallerWriteContext;
import org.drools.marshalling.impl.ProcessInstanceMarshaller;
import org.drools.marshalling.impl.ProcessMarshallerRegistry;
-import org.drools.process.core.ContextContainer;
+import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.core.impl.ContextContainerImpl;
import org.drools.process.instance.ContextInstance;
import org.drools.process.instance.ContextInstanceContainer;
+import org.drools.process.instance.ContextableInstance;
import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.process.instance.impl.ProcessInstanceImpl;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
-
-import org.drools.runtime.process.ProcessInstance;
-
import org.drools.runtime.process.NodeInstance;
-
import org.drools.runtime.process.NodeInstanceContainer;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
+import org.drools.workflow.instance.node.CompositeContextNodeInstance;
import org.hibernate.annotations.CollectionOfElements;
@@ -74,6 +62,8 @@
@Entity
public class ProcessInstanceInfo {
+ private static final String VARIABLE_SEPARATOR = ":";
+
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long processInstanceId;
@@ -98,8 +88,6 @@
ProcessInstance processInstance;
@Transient
private Environment env;
- @Transient
- private final String variableSeparator = "+";
private boolean serializeVariables = false;
// @OneToMany(mappedBy="processInstanceInfo", targetEntity=VariableInstanceInfo.class )
@@ -178,95 +166,47 @@
}
return processInstance;
}
-
-
private void restoreVariables() {
-
-
- for (String variable: variables.keySet()){
-
- System.out.println("Restoring " + variable + " " + variables.get(variable));
- restoreVariable(variable, variable, null);
-
-
+ for (Map.Entry<String, VariableInstanceInfo> entry: variables.entrySet()){
+ System.out.println("Restoring variable " + entry + " = " + variables.get(entry));
+ String[] variableHierarchy = entry.getKey().split(VARIABLE_SEPARATOR);
+ // last one is variable name
+ String variableName = variableHierarchy[variableHierarchy.length - 1];
+ // other ones are parent ids
+ List<Long> parentIds = new ArrayList<Long>();
+ for (int i = 0; i < variableHierarchy.length - 1; i++) {
+ parentIds.add(Long.valueOf(variableHierarchy[i]));
+ }
+ restoreVariable(entry.getValue(), parentIds, variableName, (WorkflowProcessInstance) processInstance);
}
-
-
}
- private void restoreVariable(String variable, String processedVariable, NodeInstanceContainer nodeInstanceContainer) throws NumberFormatException {
- VariablePersistenceStrategy persistenceStrategy =
- VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
- //If the original variable doesn't contain the variable separator it need to be restored at the processInstance scope
- if(!variable.contains(variableSeparator)){
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((WorkflowProcessInstanceImpl) this.processInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
- VariableInstanceInfo variableInfo = variables.get(variable);
- variableScopeInstance.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo, this.env));
- return;
- }
-
- String[] variableHierarchy = processedVariable.split(variableSeparator);
-
-
- if (variableHierarchy.length == 2) {
-
- Long nodeId = Long.valueOf(variableHierarchy[0]);
- //find the node and get the variableScopeInstance and insert the variable..
- Collection<NodeInstance> nodeInstances = null;
- if(nodeInstanceContainer == null){
- nodeInstances = ((WorkflowProcessInstanceImpl) this.processInstance).getNodeInstances();
+ private void restoreVariable(VariableInstanceInfo variableInfo, List<Long> parentIds, String variableName, NodeInstanceContainer nodeInstanceContainer) throws NumberFormatException {
+ if (parentIds.size() == 0) {
+ if (!(nodeInstanceContainer instanceof ContextableInstance)) {
+ throw new IllegalArgumentException("Parent node instance is not a contextable instance: " + nodeInstanceContainer);
+ }
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ ((ContextableInstance) nodeInstanceContainer).getContextInstance(VariableScope.VARIABLE_SCOPE);
+ Object value = VariablePersistenceStrategyFactory
+ .getVariablePersistenceStrategyFactory()
+ .getVariable(variableInfo, this.env);
+ variableScopeInstance.setVariable(variableName, value);
+ } else {
+ Long nodeInstanceId = parentIds.get(0);
+ // find the node and get the variableScopeInstance and insert the variable..
+ Collection<NodeInstance> nodeInstances = nodeInstanceContainer.getNodeInstances();
+ for (NodeInstance nodeInstance : nodeInstances) {
+ if (nodeInstance.getId() == nodeInstanceId) {
+ parentIds.remove(0);
+ restoreVariable(variableInfo, parentIds, variableName,
+ (CompositeContextNodeInstance) nodeInstance);
}
- else{
- nodeInstances = nodeInstanceContainer.getNodeInstances();
- }
- for (NodeInstance nodeInstance : nodeInstances) {
- if (nodeInstance.getId() == nodeId) {
- if (nodeInstance instanceof NodeInstanceContainer || nodeInstance instanceof ContextInstanceContainer) {
-
- List<ContextInstance> nodeContextInstances = ((ContextInstanceContainer) nodeInstance).getContextInstances(VariableScope.VARIABLE_SCOPE);
- for (ContextInstance contextInstance : nodeContextInstances) {
- if (contextInstance.getContextType().equals(VariableScope.VARIABLE_SCOPE)) {
- VariableScopeInstance variableScopeInstanceNode = (VariableScopeInstance) contextInstance;
- VariableInstanceInfo variableInfo = variables.get(variableHierarchy[1]);
- variableScopeInstanceNode.setVariable(variableInfo.getName(), persistenceStrategy.getVariable(variableInfo, this.env));
- }
- }
- }
- }
-
- }
+ return;
+ }
+ throw new IllegalArgumentException("Could not find node instance " + nodeInstanceId + " in " + nodeInstanceContainer);
}
- if (variableHierarchy.length > 2) {
- Long nodeId = Long.valueOf(variableHierarchy[0]);
- Collection<NodeInstance> nodeInstances = null;
- if(nodeInstanceContainer == null){
- nodeInstances = ((WorkflowProcessInstanceImpl) this.processInstance).getNodeInstances();
- }
- else{
- nodeInstances = nodeInstanceContainer.getNodeInstances();
- }
- for (NodeInstance nodeInstance : nodeInstances) {
- if (nodeInstance.getId() == nodeId) {
- if (nodeInstance instanceof NodeInstanceContainer){
- String newProcessedVariable = "";
- String add = "";
- for(int i = 1; i > variableHierarchy.length; i++){
- if(i == (variableHierarchy.length -1)){
- add = "";
- }else{
- add = variableSeparator;
- }
-
- newProcessedVariable += variableHierarchy[i]+add;
- }
- restoreVariable(variable, newProcessedVariable, nodeInstance.getNodeInstanceContainer());
- }
- }
- }
-
- }
-
}
@@ -330,13 +270,13 @@
return o1.compareTo(o2);
}
});
- //Persist Process Variables
- persist(keys, processVariables,"");
-
-
- Collection<NodeInstance> nodeInstances = ((WorkflowProcessInstanceImpl) this.processInstance).getNodeInstances();
- if(nodeInstances.size() > 0){
- persistNodeVariables(nodeInstances,"");
+ // persist process variables
+ persist(processVariables, "");
+ // persist variables in nested variable scopes
+ Collection<NodeInstance> nodeInstances =
+ ((WorkflowProcessInstanceImpl) this.processInstance).getNodeInstances();
+ if (nodeInstances.size() > 0){
+ persistNodeVariables(nodeInstances, "");
}
//If we wont find any VariableInstanceInfo that mactches with the persistence strategy,
@@ -347,44 +287,33 @@
return changed;
}
- private void persist(List<String> keys, Map<String, Object> processVariables, String prefix) {
+ private void persist(Map<String, Object> variables, String prefix) {
VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory("PersistenceStrategies.conf");
- for (String key : keys) {
- VariableInstanceInfo variable = persistenceStrategy.persistVariable(key, processVariables.get(key), this.env);
+ for (Map.Entry<String, Object> entries: variables.entrySet()) {
+ String variableName = prefix + entries.getKey();
+ Object value = entries.getValue();
+ VariableInstanceInfo variable = persistenceStrategy.persistVariable(
+ variableName, value, this.env);
if (variable != null) {
- String add = "";
- if(!prefix.equals("")){
- add += prefix + variableSeparator;
- }
- getVariables().put( add + variable.getName(), variable);
+ getVariables().put(variableName, variable);
}
}
}
- private void persistNodeVariables(Collection<NodeInstance> nodeInstances,String parentPrefix) {
-
+ private void persistNodeVariables(Collection<NodeInstance> nodeInstances, String parentPrefix) {
for (NodeInstance nodeInstance : nodeInstances) {
- if(nodeInstance instanceof NodeContainer || nodeInstance instanceof ContextInstanceContainer){
- List<ContextInstance> nodeContextInstances = ((ContextInstanceContainer)nodeInstance).getContextInstances(VariableScope.VARIABLE_SCOPE);
- for(ContextInstance contextInstance : nodeContextInstances){
- VariableScopeInstance variableScopeInstanceNode = (VariableScopeInstance) contextInstance;
- Map<String, Object> nodeVariables = variableScopeInstanceNode.getVariables();
- List<String> nodeKeys = new ArrayList<String>(nodeVariables.keySet());
- Collections.sort(nodeKeys, new Comparator<String>() {
-
- public int compare(String o1, String o2) {
- return o1.compareTo(o2);
- }
- });
-
- persist(nodeKeys, nodeVariables, parentPrefix + variableSeparator + nodeInstance.getId());
-
- if (nodeInstance instanceof NodeInstanceContainer) {
- Collection<NodeInstance> nodeInstancesInsideTheContainer = ((NodeInstanceContainer) nodeInstance).getNodeInstances();
- persistNodeVariables(nodeInstancesInsideTheContainer, ""+nodeInstance.getId());
- }
+ String prefix = parentPrefix + nodeInstance.getId() + VARIABLE_SEPARATOR;
+ if (nodeInstance instanceof ContextInstanceContainer) {
+ List<ContextInstance> variableScopeInstances = ((ContextInstanceContainer) nodeInstance).getContextInstances(VariableScope.VARIABLE_SCOPE);
+ for (ContextInstance contextInstance : variableScopeInstances){
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) contextInstance;
+ persist(variableScopeInstance.getVariables(), prefix);
}
}
+ if (nodeInstance instanceof NodeInstanceContainer) {
+ Collection<NodeInstance> nodeInstancesInsideTheContainer = ((NodeInstanceContainer) nodeInstance).getNodeInstances();
+ persistNodeVariables(nodeInstancesInsideTheContainer, prefix);
+ }
}
}
Modified: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2009-09-03 14:15:34 UTC (rev 29173)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java 2009-09-03 19:58:27 UTC (rev 29174)
@@ -168,4 +168,54 @@
processInstance = ksession.getProcessInstance( processInstance.getId() );
assertNull( processInstance );
}
+
+ public void testPersistenceVariablesSubProcess() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( new ClassPathResource( "VariablePersistenceStrategySubProcess.rf" ), ResourceType.DRF );
+ for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+ System.out.println(error);
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
+
+ env.set( EnvironmentName.GLOBALS, new MapGlobalResolver() );
+
+ StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
+ int id = ksession.getId();
+
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("x", "SomeString");
+ parameters.put("y", new MyEntity("This is a test Entity"));
+ parameters.put("z", new MyVariableSerializable("This is a test SerializableObject"));
+ ProcessInstance processInstance = ksession.startProcess( "com.sample.ruleflow", parameters );
+
+ TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+ WorkItem workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+ ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+
+ workItem = handler.getWorkItem();
+ assertNotNull( workItem );
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNotNull( processInstance );
+ ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
+
+ workItem = handler.getWorkItem();
+ assertNull( workItem );
+
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env );
+ processInstance = ksession.getProcessInstance( processInstance.getId() );
+ assertNull( processInstance );
+ }
+
}
\ No newline at end of file
Added: labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf
===================================================================
--- labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf (rev 0)
+++ labs/jbossrules/branches/salaboy_RelationalVariablePersistence/drools-persistence-jpa/src/test/resources/VariablePersistenceStrategySubProcess.rf 2009-09-03 19:58:27 UTC (rev 29174)
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://drools.org/drools-5.0/process"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+ type="RuleFlow" name="ruleflow" id="com.sample.ruleflow" package-name="com.sample" >
+
+ <header>
+ <imports>
+ <import name="org.drools.persistence.session.MyEntity" />
+ <import name="org.drools.persistence.session.MyVariableSerializable" />
+ </imports>
+ <variables>
+ <variable name="x" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </variable>
+ <variable name="y" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+ </variable>
+ <variable name="z" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyVariableSerializable" />
+ </variable>
+ <variable name="v" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <value>Default</value>
+ </variable>
+ </variables>
+ </header>
+
+ <nodes>
+ <start id="1" name="Start" x="16" y="16" width="48" height="48" />
+ <end id="3" name="End" x="669" y="16" width="48" height="48" />
+ <composite id="4" name="CompositeNode" x="187" y="33" width="326" height="327" >
+ <variables>
+ <variable name="y" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyEntity" />
+ </variable>
+ <variable name="z" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="org.drools.persistence.session.MyVariableSerializable" />
+ </variable>
+ <variable name="x" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <value></value>
+ </variable>
+ <variable name="w" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <value>New default</value>
+ </variable>
+ </variables>
+ <nodes>
+ <actionNode id="1" name="Action" x="31" y="62" >
+ <action type="expression" dialect="mvel" >kcontext.setVariable("x", "new String");
+kcontext.setVariable("y", new MyEntity("This is a new test Entity"));
+kcontext.setVariable("z", new MyVariableSerializable("This is a new test SerializableObject"));</action>
+ </actionNode>
+ <humanTask id="2" name="Human Task" x="122" y="61" >
+ <work name="Human Task" >
+ <parameter name="ActorId" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Comment" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Content" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Priority" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Skippable" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="TaskName" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ </work>
+ </humanTask>
+ <actionNode id="3" name="Action" x="211" y="61" >
+ <action type="expression" dialect="mvel" >System.out.println("v = " + v);
+System.out.println("w = " + w);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+ </actionNode>
+ <composite id="7" name="CompositeNode" x="26" y="136" width="273" height="173" >
+ <variables>
+ <variable name="a" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <value>Newest Default 1</value>
+ </variable>
+ <variable name="z" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <value>Newest Default 2</value>
+ </variable>
+ </variables>
+ <nodes>
+ <actionNode id="1" name="Action" x="18" y="55" >
+ <action type="expression" dialect="mvel" >System.out.println("a = " + a);
+System.out.println("v = " + v);
+System.out.println("w = " + w);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+ </actionNode>
+ <humanTask id="2" name="Human Task" x="140" y="40" >
+ <work name="Human Task" >
+ <parameter name="ActorId" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Comment" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Content" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Priority" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Skippable" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="TaskName" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ </work>
+ </humanTask>
+ <actionNode id="3" name="Action" x="163" y="112" >
+ <action type="expression" dialect="mvel" >System.out.println("a = " + a);
+System.out.println("v = " + v);
+System.out.println("w = " + w);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+ </actionNode>
+ </nodes>
+ <connections>
+ <connection from="1" to="2" />
+ <connection from="2" to="3" />
+ </connections>
+ <in-ports>
+ <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+ </in-ports>
+ <out-ports>
+ <out-port type="DROOLS_DEFAULT" nodeId="3" nodeOutType="DROOLS_DEFAULT" />
+ </out-ports>
+ </composite>
+ </nodes>
+ <connections>
+ <connection from="1" to="2" />
+ <connection from="2" to="3" />
+ <connection from="3" to="7" />
+ </connections>
+ <in-ports>
+ <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+ </in-ports>
+ <out-ports>
+ <out-port type="DROOLS_DEFAULT" nodeId="7" nodeOutType="DROOLS_DEFAULT" />
+ </out-ports>
+ </composite>
+ <actionNode id="5" name="Action" x="547" y="50" width="80" height="48" >
+ <action type="expression" dialect="mvel" >System.out.println("v = " + v);
+System.out.println("x = " + x);
+System.out.println("y = " + y);
+System.out.println("z = " + z);</action>
+ </actionNode>
+ </nodes>
+
+ <connections>
+ <connection from="5" to="3" />
+ <connection from="1" to="4" />
+ <connection from="4" to="5" />
+ </connections>
+
+</process>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list