[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