[jboss-svn-commits] JBL Code SVN: r20325 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/common and 8 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 5 05:38:35 EDT 2008


Author: KrisVerlaenen
Date: 2008-06-05 05:38:35 -0400 (Thu, 05 Jun 2008)
New Revision: 20325

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/WorkflowProcessInstanceUpgrader.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StartNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNodeInstance.java
Log:
 - drools-process-enterprise modifications
 - runtime upgrading of processes

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -40,12 +40,12 @@
 import org.drools.process.core.impl.WorkDefinitionExtensionImpl;
 import org.drools.process.instance.ProcessInstanceFactory;
 import org.drools.process.instance.ProcessInstanceFactoryRegistry;
+import org.drools.process.instance.ProcessInstanceManager;
 import org.drools.process.instance.impl.ContextInstanceFactory;
 import org.drools.process.instance.impl.ContextInstanceFactoryRegistry;
 import org.drools.spi.ConflictResolver;
 import org.drools.spi.ConsequenceExceptionHandler;
 import org.drools.util.ChainedProperties;
-import org.drools.util.ClassUtils;
 import org.drools.util.ConfFileUtils;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.instance.impl.NodeInstanceFactory;
@@ -119,10 +119,11 @@
 
     private static final String            STAR             = "*";
     private ContextInstanceFactoryRegistry processContextInstanceFactoryRegistry;
-    private Map<String, WorkDefinition> workDefinitions;
+    private Map<String, WorkDefinition>    workDefinitions;
 
     private ProcessInstanceFactoryRegistry processInstanceFactoryRegistry;
     private NodeInstanceFactoryRegistry    processNodeInstanceFactoryRegistry;
+    private ProcessInstanceManager         processInstanceManager;
 
     private transient ClassLoader          classLoader;
 
@@ -674,6 +675,40 @@
         }
     }
 
+    public ProcessInstanceManager getProcessInstanceManager() {
+        if ( this.processInstanceManager == null ) {
+            initProcessInstanceManager();
+        }
+        return this.processInstanceManager;
+    }
+
+    private void initProcessInstanceManager() {
+        String className = this.chainedProperties.getProperty(
+            "processInstanceManager", "org.drools.process.instance.impl.DefaultProcessInstanceManager");
+        Class clazz = null;
+        try {
+            clazz = Thread.currentThread().getContextClassLoader().loadClass( className );
+        } catch ( ClassNotFoundException e ) {
+        }
+
+        if ( clazz == null ) {
+            try {
+                clazz = RuleBaseConfiguration.class.getClassLoader().loadClass( className );
+            } catch ( ClassNotFoundException e ) {
+            }
+        }
+
+        if ( clazz != null ) {
+            try {
+                this.processInstanceManager = (ProcessInstanceManager) clazz.newInstance();
+            } catch ( Exception e ) {
+                throw new IllegalArgumentException( "Unable to instantiate process instance manager '" + className + "'" );
+            }
+        } else {
+            throw new IllegalArgumentException( "Process instance manager '" + className + "' not found" );
+        }
+    }
+
     private boolean determineShadowProxy(String userValue) {
         if ( this.isSequential() ) {
             // sequential never needs shadowing, so always override

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -561,7 +561,7 @@
             final Map flows = newPkg.getRuleFlows();
             for ( final Iterator iter = flows.values().iterator(); iter.hasNext(); ) {
                 final Process flow = (Process) iter.next();
-                pkg.addRuleFlow( flow );
+                pkg.addProcess( flow );
             }
         }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -65,8 +65,10 @@
 import org.drools.process.instance.ProcessInstance;
 import org.drools.process.instance.ProcessInstanceFactory;
 import org.drools.process.instance.ProcessInstanceFactoryRegistry;
+import org.drools.process.instance.ProcessInstanceManager;
 import org.drools.process.instance.WorkItemManager;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.process.instance.impl.DefaultProcessInstanceManager;
 import org.drools.process.instance.timer.TimerManager;
 import org.drools.reteoo.EntryPointNode;
 import org.drools.reteoo.InitialFactHandle;
@@ -166,11 +168,9 @@
     protected volatile boolean                          firing;
 
     protected volatile boolean                          halt;
+    
+    private ProcessInstanceManager                      processInstanceManager;
 
-    private Map                                         processInstances;
-
-    private int                                         processCounter;
-
     private WorkItemManager                             workItemManager;
 
     private TimerManager                                timerManager;
@@ -224,9 +224,12 @@
         this.ruleBase = ruleBase;
         this.handleFactory = handleFactory;
         this.globalResolver = new MapGlobalResolver();
-        this.maintainTms = this.ruleBase.getConfiguration().isMaintainTms();
-        this.sequential = this.ruleBase.getConfiguration().isSequential();
+        
+        final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
 
+        this.maintainTms = conf.isMaintainTms();
+        this.sequential = conf.isSequential();
+
         if ( initialFactHandle == null ) {
             this.initialFactHandle = new InitialFactHandle( handleFactory.newFactHandle( new InitialFactHandleDummyObject(),
                                                                                          null,
@@ -245,7 +248,7 @@
         this.__ruleBaseEventListeners = new LinkedList();
         this.lock = new ReentrantLock();
         this.liaPropagations = Collections.EMPTY_LIST;
-        this.processInstances = new HashMap();
+        this.processInstanceManager = conf.getProcessInstanceManager();
         this.timeMachine = new TimeMachine();
 
         this.nodeMemories = new ConcurrentNodeMemories( this.ruleBase );
@@ -256,8 +259,6 @@
             this.tms = null;
         }
 
-        final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
-
         this.propagationIdCounter = new AtomicLong( propagationContext );
 
         this.objectStore = new SingleThreadedObjectStore( conf,
@@ -1447,9 +1448,7 @@
         ProcessInstance processInstance = getProcessInstance(process);
         processInstance.setWorkingMemory( this );
         processInstance.setProcess( process );
-        processInstance.setId( ++processCounter );
-        processInstances.put( new Long( processInstance.getId() ),
-                              processInstance );
+        addProcessInstance( processInstance );
         // set variable default values
         // TODO: should be part of processInstanceImpl?
         VariableScope variableScope = (VariableScope) process.getDefaultContext( VariableScope.VARIABLE_SCOPE );
@@ -1495,22 +1494,25 @@
         }
         return processInstance;
     }
+    
+    public ProcessInstanceManager getProcessInstanceManager() {
+        return processInstanceManager;
+    }
 
-    public Collection getProcessInstances() {
-        return Collections.unmodifiableCollection( processInstances.values() );
+    public Collection<ProcessInstance> getProcessInstances() {
+        return processInstanceManager.getProcessInstances();
     }
 
     public ProcessInstance getProcessInstance(long id) {
-        return (ProcessInstance) processInstances.get( new Long( id ) );
+        return processInstanceManager.getProcessInstance(id);
     }
 
     public void addProcessInstance(ProcessInstance processInstance) {
-        processInstances.put( processInstance.getId(),
-                              processInstance );
+        processInstanceManager.addProcessInstance(processInstance);
     }
 
     public void removeProcessInstance(ProcessInstance processInstance) {
-        processInstances.remove( processInstance.getId() );
+        processInstanceManager.removeProcessInstance(processInstance);
     }
 
     public WorkItemManager getWorkItemManager() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -10,6 +10,7 @@
 import org.drools.event.RuleFlowEventSupport;
 import org.drools.event.WorkingMemoryEventSupport;
 import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.ProcessInstanceManager;
 import org.drools.reteoo.LIANodePropagation;
 import org.drools.rule.Rule;
 import org.drools.rule.TimeMachine;
@@ -86,7 +87,8 @@
     public void addProcessInstance(ProcessInstance processInstance);
     
     public void removeProcessInstance(ProcessInstance processInstance);
-       
+    
+    public ProcessInstanceManager getProcessInstanceManager();
 
     public ExecutorService getExecutorService();
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/impl/ProcessImpl.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -110,7 +110,7 @@
     }
 
     public int hashCode() {
-        return this.name.hashCode() + 3 * this.version.hashCode();
+        return this.name.hashCode() + (this.version == null ? 0 : 3 * this.version.hashCode());
     }
 
     public Context resolveContext(String contextId, Object param) {
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceManager.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -0,0 +1,15 @@
+package org.drools.process.instance;
+
+import java.util.Collection;
+
+public interface ProcessInstanceManager {
+
+    ProcessInstance getProcessInstance(long id);
+    
+    Collection<ProcessInstance> getProcessInstances();
+
+    void addProcessInstance(ProcessInstance processInstance);
+
+    void removeProcessInstance(ProcessInstance processInstance);
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/impl/DefaultProcessInstanceManager.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -0,0 +1,34 @@
+package org.drools.process.instance.impl;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.ProcessInstanceManager;
+
+public class DefaultProcessInstanceManager implements ProcessInstanceManager {
+
+    private Map<Long, ProcessInstance> processInstances = new HashMap<Long, ProcessInstance>();
+    private int processCounter = 0;
+
+    public void addProcessInstance(ProcessInstance processInstance) {
+        if (processInstance.getId() == 0) {
+            processInstance.setId(++processCounter);
+        }
+        processInstances.put(processInstance.getId(), processInstance);
+    }
+
+    public Collection<ProcessInstance> getProcessInstances() {
+        return Collections.unmodifiableCollection(processInstances.values());
+    }
+
+    public ProcessInstance getProcessInstance(long id) {
+        return (ProcessInstance) processInstances.get(id);
+    }
+
+    public void removeProcessInstance(ProcessInstance processInstance) {
+        processInstances.remove(processInstance.getId());
+    }
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Package.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -414,7 +414,7 @@
     /**
      * Add a rule flow to this package.
      */
-    public void addRuleFlow(Process process) {
+    public void addProcess(Process process) {
         if ( this.ruleFlows == Collections.EMPTY_MAP ) {
             this.ruleFlows = new HashMap();
         }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/WorkflowProcessInstanceUpgrader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/WorkflowProcessInstanceUpgrader.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/WorkflowProcessInstanceUpgrader.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -0,0 +1,50 @@
+package org.drools.workflow.instance;
+
+import java.util.Map;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
+
+public class WorkflowProcessInstanceUpgrader {
+    
+    public static void upgradeProcessInstance(WorkingMemory workingMemory, long processInstanceId, String processId, Map<Long, Long> nodeMapping) {
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+            workingMemory.getProcessInstance(processInstanceId);
+        if (processInstance == null) {
+            throw new IllegalArgumentException("Could not find process instance " + processInstanceId);
+        }
+        if (processId == null) {
+            throw new IllegalArgumentException("Null process id");
+        }
+        WorkflowProcess process = (WorkflowProcess)
+            ((InternalRuleBase) workingMemory.getRuleBase()).getProcess(processId);
+        if (process == null) {
+            throw new IllegalArgumentException("Could not find process " + processId);
+        }
+        if (processInstance.getProcessId().equals(processId)) {
+            return;
+        }
+        ((WorkflowProcessInstanceImpl) processInstance).disconnect();
+        processInstance.setProcess(process);
+        for (NodeInstance nodeInstance: processInstance.getNodeInstances()) {
+            Long oldNodeId = nodeInstance.getNodeId();
+            Long newNodeId = nodeMapping.get(oldNodeId);
+            if (newNodeId == null) {
+                newNodeId = oldNodeId;
+            }
+            if (process.getNode(newNodeId) == null) {
+                throw new IllegalArgumentException("Could not find node " + newNodeId);
+            }
+            if (newNodeId != oldNodeId) {
+                ((NodeInstanceImpl) nodeInstance).setNodeId(newNodeId);
+            }
+        }
+        processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
+        ((WorkflowProcessInstanceImpl) processInstance).reconnect();
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ActionNodeInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -57,8 +57,7 @@
     }
 
     public void triggerCompleted() {
-        getNodeInstanceContainer().removeNodeInstance(this);
-        getNodeInstanceContainer().getNodeInstance(getActionNode().getTo().getTo()).trigger(this, getActionNode().getTo().getToType());
+        triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
     }
     
     private KnowledgeHelper createKnowledgeHelper() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -69,9 +69,7 @@
     }
 
     public void triggerCompleted(String outType) {
-        getNodeInstanceContainer().removeNodeInstance(this);
-        Connection connection = getCompositeNode().getOutgoingConnections(outType).get(0);
-        getNodeInstanceContainer().getNodeInstance( connection.getTo() ).trigger( this, connection.getToType() );
+        triggerCompleted(outType, true);
     }
 
     public void cancel() {
@@ -165,8 +163,7 @@
         }
         
         public void triggerCompleted() {
-            getNodeInstanceContainer().removeNodeInstance(this);
-            getNodeInstanceContainer().getNodeInstance( getCompositeNodeStart().getTo().getTo() ).trigger( this, getCompositeNodeStart().getTo().getToType());
+            triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
         }
         
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventNodeInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -1,5 +1,6 @@
 package org.drools.workflow.instance.node;
 
+import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.instance.impl.NodeInstanceImpl;
 
@@ -10,9 +11,7 @@
     }
     
     public void triggerCompleted() {
-        getNodeInstanceContainer().removeNodeInstance(this);
-        getNodeInstanceContainer().getNodeInstance(getEventNode().getTo().getTo())
-            .trigger(this, getEventNode().getTo().getToType());
+        triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
     }
     
     public void cancel() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/JoinInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -108,10 +108,7 @@
 
     public void triggerCompleted() {
         // join nodes are only removed from the container when they contain no more state
-        if (triggers.isEmpty()) {
-            getNodeInstanceContainer().removeNodeInstance(this);
-        }
-        getNodeInstanceContainer().getNodeInstance( getJoin().getTo().getTo() ).trigger( this, getJoin().getTo().getToType() );
+        triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, triggers.isEmpty());
     }
     
     public Map<Long, Integer> getTriggers() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -49,15 +49,10 @@
         // TODO make different strategies for each type
         switch ( split.getType() ) {
             case Split.TYPE_AND :
-                getNodeInstanceContainer().removeNodeInstance(this);
-                List<Connection> outgoing = split.getDefaultOutgoingConnections();
-                for ( final Iterator<Connection> iterator = outgoing.iterator(); iterator.hasNext(); ) {
-                    final Connection connection = (Connection) iterator.next();
-                    getNodeInstanceContainer().getNodeInstance(connection.getTo()).trigger(this, connection.getToType());
-                }
+                triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
                 break;
             case Split.TYPE_XOR :
-                outgoing = split.getDefaultOutgoingConnections();
+                List<Connection> outgoing = split.getDefaultOutgoingConnections();
                 int priority = Integer.MAX_VALUE;
                 Connection selected = null;
                 for ( final Iterator<Connection> iterator = outgoing.iterator(); iterator.hasNext(); ) {
@@ -76,7 +71,7 @@
                 if ( selected == null ) {
                     throw new IllegalArgumentException( "XOR split could not find at least one valid outgoing connection for split " + getSplit().getName() );
                 }
-                getNodeInstanceContainer().getNodeInstance( selected.getTo() ).trigger( this, selected.getToType() );
+                triggerConnection(selected);
                 break;
             case Split.TYPE_OR :
                 getNodeInstanceContainer().removeNodeInstance(this);
@@ -101,8 +96,8 @@
                     if (selectedConstraint.evaluate( this,
                                                      selectedConnection,
                                                      selectedConstraint ) ) {
-                            getNodeInstanceContainer().getNodeInstance(selectedConnection.getTo()).trigger(this, selectedConnection.getToType());
-                            found = true;
+                        triggerConnection(selectedConnection);
+                        found = true;
                     }
                     outgoingCopy.remove(selectedConnection);
                 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StartNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StartNodeInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StartNodeInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.StartNode;
 import org.drools.workflow.instance.NodeInstance;
 import org.drools.workflow.instance.impl.NodeInstanceImpl;
@@ -46,9 +47,7 @@
     }
 
     public void triggerCompleted() {
-        getNodeInstanceContainer().removeNodeInstance(this);
-        getNodeInstanceContainer().getNodeInstance(getStartNode().getTo().getTo())
-            .trigger(this, getStartNode().getTo().getToType());
+        triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
     }
     
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -43,11 +43,8 @@
     }
     
     public void triggerCompleted() {
-        if (getTimerNode().getTimer().getPeriod() == 0) {
-            getNodeInstanceContainer().removeNodeInstance(this);
-        }
-        getNodeInstanceContainer().getNodeInstance(getTimerNode().getTo().getTo())
-            .trigger(this, getTimerNode().getTo().getToType());
+        triggerCompleted(Node.CONNECTION_DEFAULT_TYPE,
+            getTimerNode().getTimer().getPeriod() == 0);
     }
     
     public void cancel() {

Modified: labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf	2008-06-05 09:38:35 UTC (rev 20325)
@@ -18,3 +18,4 @@
 drools.consequenceExceptionHandler = org.drools.base.DefaultConsequenceExceptionHandler
 drools.ruleBaseUpdateHandler = org.drools.base.FireAllRulesRuleBaseUpdateListener
 drools.workDefinitions = WorkDefinitions.conf
+drools.processInstanceManager = org.drools.process.instance.impl.DefaultProcessInstanceManager

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNodeInstance.java	2008-06-05 09:38:22 UTC (rev 20324)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNodeInstance.java	2008-06-05 09:38:35 UTC (rev 20325)
@@ -60,8 +60,7 @@
         return getNodeId() == other.getNodeId();
     }        
     
-    public void triggerCompleted() {        
-        getNodeInstanceContainer().removeNodeInstance(this);
-        getNodeInstanceContainer().getNodeInstance(getMockNode().getTo().getTo()).trigger(this, getMockNode().getTo().getToType());
+    public void triggerCompleted() {
+        triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
     }
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list