[jboss-svn-commits] JBL Code SVN: r24649 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/xml/processes and 22 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jan 12 09:11:28 EST 2009


Author: KrisVerlaenen
Date: 2009-01-12 09:11:27 -0500 (Mon, 12 Jan 2009)
New Revision: 24649

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TimeoutException.java
   labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConnectionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TaskView.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java
   labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java
   labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/WorkingMemoryDbLogger.java
   labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/AuditLog.hbm.xml
   labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml
   labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/WorkingMemoryDbLoggerTest.java
   labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow2.rf
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java
   labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
   labs/jbossrules/trunk/drools-repository/.classpath
   labs/jbossrules/trunk/drools-repository/.project
   labs/jbossrules/trunk/drools-templates/.classpath
   labs/jbossrules/trunk/drools-templates/.project
Log:
JBRULES-1913: Extend history log
 - added node instance information to db
Other minor fixes
 - added simple state node
 - minor fixes in IDE

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -24,6 +24,7 @@
 import org.drools.xml.processes.RuleSetNodeHandler;
 import org.drools.xml.processes.SplitNodeHandler;
 import org.drools.xml.processes.StartNodeHandler;
+import org.drools.xml.processes.StateNodeHandler;
 import org.drools.xml.processes.SubProcessNodeHandler;
 import org.drools.xml.processes.SwimlaneHandler;
 import org.drools.xml.processes.TimerHandler;
@@ -107,5 +108,7 @@
                 		   new TimerHandler() );
         addHandler( "trigger",
      		               new TriggerHandler() );
+        addHandler( "state",
+     		        new StateNodeHandler() );        
     }
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConnectionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConnectionHandler.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConnectionHandler.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -6,75 +6,71 @@
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.NodeContainer;
 import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.NodeImpl;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
 import org.drools.xml.Handler;
-import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
-public class ConnectionHandler extends BaseAbstractHandler
-    implements
-    Handler {
-    public ConnectionHandler() {
-        if ( (this.validParents == null) && (this.validPeers == null) ) {
-            this.validParents = new HashSet();
-            this.validParents.add( NodeContainer.class );
+public class ConnectionHandler extends BaseAbstractHandler implements Handler {
 
-            this.validPeers = new HashSet();
-            this.validPeers.add( null );
-            this.validPeers.add( Connection.class );
+	public ConnectionHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet<Class<?>>();
+			this.validParents.add(NodeContainer.class);
+			this.validPeers = new HashSet<Class<?>>();
+			this.validPeers.add(null);
+			this.validPeers.add(Connection.class);
+			this.allowNesting = false;
+		}
+	}
 
-            this.allowNesting = false;
-        }
-    }
-    
+	public Object start(final String uri, final String localName,
+			final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
 
-    
-    public Object start(final String uri,
-                        final String localName,
-                        final Attributes attrs,
-                        final ExtensibleXmlParser parser) throws SAXException {
-        parser.startElementBuilder( localName,
-                                    attrs );   
-        
-        String fromId = attrs.getValue( "from" );
-        emptyAttributeCheck( localName, "from", fromId, parser );
-        String toId = attrs.getValue( "to" );
-        emptyAttributeCheck( localName, "to", toId, parser );
-        String bendpoints = attrs.getValue( "bendpoints" );
-        
-        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
-        Node fromNode = nodeContainer.getNode( new Long(fromId) );
-        Node toNode = nodeContainer.getNode( new Long(toId) );
-        
-        if ( fromNode == null ) {
-                throw new SAXParseException( "Node '" + fromId + "' cannot be found",
-                                             parser.getLocator() );
-        }
-        if ( toNode == null ) {
-            throw new SAXParseException( "Node '" + toId + "' cannot be found",
-                                         parser.getLocator() );
-        }        
-        
-        ConnectionImpl connection = new ConnectionImpl(
-    		fromNode, org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE,
-    		toNode, org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
-        connection.setMetaData("bendpoints", bendpoints);
-        
-        return connection;
-    }    
-    
-    public Object end(final String uri,
-                      final String localName,
-                      final ExtensibleXmlParser parser) throws SAXException {
-        final Element element = parser.endElementBuilder();
-        return parser.getCurrent();
-    }
+		String fromId = attrs.getValue("from");
+		emptyAttributeCheck(localName, "from", fromId, parser);
+		String toId = attrs.getValue("to");
+		emptyAttributeCheck(localName, "to", toId, parser);
+		String bendpoints = attrs.getValue("bendpoints");
 
-    public Class generateNodeFor() {
-        return Connection.class;
-    }    
+		String fromType = attrs.getValue("fromType");
+		if (fromType == null || fromType.trim().length() == 0) {
+			fromType = NodeImpl.CONNECTION_DEFAULT_TYPE;
+		}
+		String toType = attrs.getValue("toType");
+		if (toType == null || toType.trim().length() == 0) {
+			toType = NodeImpl.CONNECTION_DEFAULT_TYPE;
+		}
 
+		NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+		Node fromNode = nodeContainer.getNode(new Long(fromId));
+		Node toNode = nodeContainer.getNode(new Long(toId));
+
+		if (fromNode == null) {
+			throw new SAXParseException(
+				"Node '" + fromId + "' cannot be found", parser.getLocator());
+		}
+		if (toNode == null) {
+			throw new SAXParseException("Node '" + toId + "' cannot be found", parser.getLocator());
+		}
+
+		ConnectionImpl connection = new ConnectionImpl(fromNode, fromType, toNode, toType);
+		connection.setMetaData("bendpoints", bendpoints);
+
+		return connection;
+	}
+
+	public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Connection.class;
+	}
+
 }

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -0,0 +1,36 @@
+package org.drools.xml.processes;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.StateNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+public class StateNodeHandler extends AbstractNodeHandler {
+
+    protected Node createNode() {
+        return new StateNode();
+    }
+
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return StateNode.class;
+    }
+
+    public void handleNode(final Node node, final Element element, final String uri,
+            final String localName, final ExtensibleXmlParser parser)
+            throws SAXException {
+        super.handleNode(node, element, uri, localName, parser);
+        StateNode stateNode = (StateNode) node;
+        for (String eventType: stateNode.getActionTypes()) {
+        	handleAction(node, element, eventType);
+        }
+    }
+    
+    public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+		StateNode milestoneNode = (StateNode) node;
+		writeNode("state", milestoneNode, xmlDump, includeMeta);
+        endNode(xmlDump);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel	2009-01-12 14:11:27 UTC (rev 24649)
@@ -100,8 +100,7 @@
 @end{}
 
 @declare{"consequenceMethod"}
-public static void @{methodName}(org.drools.spi.KnowledgeHelper drools at if{declarations != empty}, at end{} @foreach{type : declarationTypes, declr : declarations} @{type} @{declr.identifier}, org.drools.FactHandle @{declr.identifier}__Handle__ @end{","}@if{globals != empty}, at end{} @foreach{type : globalTypes, identifier : globals}  @{type} @{identifier} @end{","} ) throws Exception {
-    org.drools.runtime.rule.RuleContext kcontext = drools;
+public static void @{methodName}(org.drools.spi.KnowledgeHelper drools at if{declarations != empty}, at end{} @foreach{type : declarationTypes, declr : declarations} @{type} @{declr.identifier}, org.drools.FactHandle @{declr.identifier}__Handle__ @end{","}@if{globals != empty}, at end{} @foreach{type : globalTypes, identifier : globals}  @{type} @{identifier} @end{","} ) throws Exception { org.drools.runtime.rule.RuleContext kcontext = drools;
     @{text}
 }
 @end{}

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -0,0 +1,53 @@
+package org.drools.integrationtests;
+
+import java.io.Reader;
+import java.io.StringReader;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.compiler.PackageBuilder;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.rule.Package;
+
+public class ProcessStateTest extends TestCase {
+    
+    public void testOnEntryExit() {
+        PackageBuilder builder = new PackageBuilder();
+        Reader source = new StringReader(
+            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+            "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+            "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+            "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+            "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+            "\n" +
+            "  <header>\n" +
+            "  </header>\n" +
+            "\n" +
+            "  <nodes>\n" +
+            "    <start id=\"1\" name=\"Start\" />\n" +
+            "    <state id=\"2\" name=\"State\" />\n" +
+            "    <end id=\"3\" name=\"End\" />\n" +
+            "  </nodes>\n" +
+            "\n" +
+            "  <connections>\n" +
+            "    <connection from=\"1\" to=\"2\" />\n" +
+            "    <connection from=\"2\" to=\"3\" />\n" +
+            "  </connections>\n" +
+            "\n" +
+            "</process>");
+        builder.addRuleFlow(source);
+        Package pkg = builder.getPackage();
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkg );
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        ProcessInstance processInstance = ( ProcessInstance )
+            workingMemory.startProcess("org.drools.state");
+        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+        processInstance.signalEvent("signal", null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+    
+}

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	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -826,6 +826,7 @@
             System.err.println( "Error occured while loading work definitions " + location );
             System.err.println( "Continuing without reading these work definitions" );
             t.printStackTrace();
+            throw new RuntimeException("Could not parse work definitions " + location + ": " + t.getMessage());
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -37,6 +37,8 @@
 import org.drools.audit.event.RuleFlowNodeLogEvent;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.process.Node;
+import org.drools.definition.process.NodeContainer;
 import org.drools.event.ActivationCancelledEvent;
 import org.drools.event.ActivationCreatedEvent;
 import org.drools.event.AfterActivationFiredEvent;
@@ -73,8 +75,12 @@
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.impl.StatelessKnowledgeSessionImpl;
 import org.drools.rule.Declaration;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.NodeInstanceContainer;
 import org.drools.spi.Activation;
 import org.drools.spi.Tuple;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.instance.node.CompositeNodeInstance;
 
 /**
  * A logger of events generated by a working memory.
@@ -423,8 +429,9 @@
     public void beforeRuleFlowNodeTriggered(RuleFlowNodeTriggeredEvent event,
                                             WorkingMemory workingMemory) {
         filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED,
-                event.getRuleFlowNodeInstance().getId() + "",
+                createNodeId(event.getRuleFlowNodeInstance()),
                 event.getRuleFlowNodeInstance().getNodeName(),
+                createNodeInstanceId(event.getRuleFlowNodeInstance()),
                 event.getProcessInstance().getProcessId(),
                 event.getProcessInstance().getProcessName(),
                 event.getProcessInstance().getId()) );
@@ -433,19 +440,65 @@
     public void afterRuleFlowNodeTriggered(RuleFlowNodeTriggeredEvent event,
                                            WorkingMemory workingMemory) {
         filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.AFTER_RULEFLOW_NODE_TRIGGERED,
-                event.getRuleFlowNodeInstance().getId() + "",
+                createNodeId(event.getRuleFlowNodeInstance()),
                 event.getRuleFlowNodeInstance().getNodeName(),
+                createNodeInstanceId(event.getRuleFlowNodeInstance()),
                 event.getProcessInstance().getProcessId(), 
                 event.getProcessInstance().getProcessName(),
                 event.getProcessInstance().getId()) );
     }
+    
+    private String createNodeId(NodeInstance nodeInstance) {
+    	Node node = ((org.drools.workflow.instance.NodeInstance) nodeInstance).getNode();
+    	String nodeId = "" + node.getId();
+    	NodeContainer nodeContainer = node.getNodeContainer();
+    	while (nodeContainer != null) {
+    		if (nodeContainer instanceof CompositeNode) {
+    			node = (CompositeNode) nodeContainer;
+    			nodeId = node.getId() + ":" + nodeId;
+    			nodeContainer = node.getNodeContainer();
+    		} else {
+    			break;
+    		}
+    	}
+    	return nodeId;
+    }
 
+    private String createNodeInstanceId(NodeInstance nodeInstance) {
+    	String nodeInstanceId = "" + nodeInstance.getId();
+    	NodeInstanceContainer nodeContainer = nodeInstance.getNodeInstanceContainer();
+    	while (nodeContainer != null) {
+    		if (nodeContainer instanceof CompositeNodeInstance) {
+    			nodeInstance = (CompositeNodeInstance) nodeContainer;
+    			nodeInstanceId = nodeInstance.getId() + ":" + nodeInstanceId;
+    			nodeContainer = nodeInstance.getNodeInstanceContainer();
+    		} else {
+    			break;
+    		}
+    	}
+    	return nodeInstanceId;
+    }
+
     public void beforeRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
     										WorkingMemory workingMemory) {
+        filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.BEFORE_RULEFLOW_NODE_EXITED,
+            createNodeId(event.getRuleFlowNodeInstance()),
+            event.getRuleFlowNodeInstance().getNodeName(),
+            createNodeInstanceId(event.getRuleFlowNodeInstance()),
+            event.getProcessInstance().getProcessId(),
+            event.getProcessInstance().getProcessName(),
+            event.getProcessInstance().getId()) );
     }
 
     public void afterRuleFlowNodeLeft(RuleFlowNodeTriggeredEvent event,
     								  WorkingMemory workingMemory) {
+        filterLogEvent(new RuleFlowNodeLogEvent(LogEvent.AFTER_RULEFLOW_NODE_EXITED,
+            createNodeId(event.getRuleFlowNodeInstance()),
+            event.getRuleFlowNodeInstance().getNodeName(),
+            createNodeInstanceId(event.getRuleFlowNodeInstance()),
+            event.getProcessInstance().getProcessId(), 
+            event.getProcessInstance().getProcessName(),
+            event.getProcessInstance().getId()) );
     }
 
     public void afterPackageAdded(AfterPackageAddedEvent event) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowNodeLogEvent.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -8,6 +8,7 @@
     
     private String nodeId;
     private String nodeName;
+    private String nodeInstanceId;
 
     /**
      * Create a new ruleflow node log event.
@@ -19,24 +20,28 @@
     public RuleFlowNodeLogEvent(final int type,
                                 final String nodeId,
                                 final String nodeName,
+                                final String nodeInstanceId,
                                 final String processId,
                                 final String processName,
                                 final long processInstanceId) {
         super( type, processId, processName, processInstanceId );
         this.nodeId = nodeId;
         this.nodeName = nodeName;
+        this.nodeInstanceId = nodeInstanceId;
     }
     
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         super.readExternal(in);
-        nodeId    = (String)in.readObject();
-        nodeName    = (String)in.readObject();
+        nodeId = (String) in.readObject();
+        nodeName = (String) in.readObject();
+        nodeInstanceId = (String) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
         super.writeExternal(out);
         out.writeObject(nodeId);
         out.writeObject(nodeName);
+        out.writeObject(nodeInstanceId);
     }
 
     public String getNodeId() {
@@ -47,6 +52,10 @@
         return nodeName;
     }
     
+    public String getNodeInstanceId() {
+        return nodeInstanceId;
+    }
+    
     public String toString() {
         String msg = null;
         switch ( this.getType() ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -2,8 +2,8 @@
 
 import org.drools.WorkingMemory;
 
-public interface Command {
+public interface Command<T> {
 	
-	Object execute(WorkingMemory workingMemory);
+	T execute(WorkingMemory workingMemory);
 	
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -2,6 +2,6 @@
 
 public interface CommandService {
 	
-	Object execute(Command command);
+	<T> T execute(Command<T> command);
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -5,7 +5,7 @@
 
 import org.drools.WorkingMemory;
 
-public class CompleteWorkItemCommand implements Command {
+public class CompleteWorkItemCommand implements Command<Object> {
 	
 	private long workItemId;
 	private Map<String, Object> results = new HashMap<String, Object>();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -1,8 +1,9 @@
 package org.drools.process.command;
 
 import org.drools.WorkingMemory;
+import org.drools.process.instance.ProcessInstance;
 
-public class GetProcessInstanceCommand implements Command {
+public class GetProcessInstanceCommand implements Command<ProcessInstance> {
 	
 	private Long processInstanceId;
 	
@@ -14,7 +15,7 @@
 		this.processInstanceId = processInstanceId;
 	}
 	
-	public Object execute(WorkingMemory workingMemory) {
+	public ProcessInstance execute(WorkingMemory workingMemory) {
 		if (processInstanceId == null) {
 			return null;
 		}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -5,7 +5,7 @@
 
 import org.drools.WorkingMemory;
 
-public class InsertObjectCommand implements Command {
+public class InsertObjectCommand implements Command<Object> {
 	
 	private List<Object> objects;
 	

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -3,7 +3,7 @@
 import org.drools.process.instance.ProcessInstance;
 import org.drools.WorkingMemory;
 
-public class SignalEventCommand implements Command {
+public class SignalEventCommand implements Command<Object> {
 	
 	private long processInstanceId;
 	private String eventType;
@@ -34,9 +34,13 @@
 	}
 
 	public Object execute(WorkingMemory workingMemory) {
-		ProcessInstance processInstance = ( ProcessInstance ) workingMemory.getProcessInstance(processInstanceId);
-		if (processInstance != null) {
-			processInstance.signalEvent(eventType, processInstance);
+		if (processInstanceId == -1) {
+			workingMemory.getSignalManager().signalEvent(eventType, event);
+		} else {
+			ProcessInstance processInstance = ( ProcessInstance ) workingMemory.getProcessInstance(processInstanceId);
+			if (processInstance != null) {
+				processInstance.signalEvent(eventType, processInstance);
+			}
 		}
 		return null;
 	}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -7,7 +7,7 @@
 import org.drools.process.instance.ProcessInstance;
 import org.drools.WorkingMemory;
 
-public class StartProcessCommand implements Command {
+public class StartProcessCommand implements Command<ProcessInstance> {
 	
 	private String processId;
 	private Map<String, Object> parameters = new HashMap<String, Object>();
@@ -37,7 +37,7 @@
 		this.data = data;
 	}
 
-	public Object execute(WorkingMemory workingMemory) {
+	public ProcessInstance execute(WorkingMemory workingMemory) {
 		if (data != null) {
 			for (Object o: data) {
 				workingMemory.insert(o);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -12,7 +12,7 @@
 		this.workingMemory = workingMemory;
 	}
 	
-	public Object execute(final Command command) {
+	public <T> T execute(final Command<T> command) {
 		new Thread(new Runnable() {
 			public void run() {
 				command.execute(workingMemory);	

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -12,7 +12,7 @@
 		this.workingMemory = workingMemory;
 	}
 	
-	public Object execute(Command command) {
+	public <T> T execute(Command<T> command) {
 		return command.execute(workingMemory);
 	}
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -18,14 +18,14 @@
 		this.session = session;
 	}
 	
-	public Object execute(Command command) {
+	public <T> T execute(Command<T> command) {
 		Persister<StatefulSession> persister =
 			new MemoryPersister<StatefulSession>(new StatefulSessionSnapshotter(session));
 		persister.save();
 		Transaction transaction = persister.getTransaction();
 		try {
 			transaction.start();
-			Object result = command.execute(session);
+			T result = command.execute(session);
 			transaction.commit();
 			return result;
 		} catch (Throwable t) {

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -0,0 +1,7 @@
+package org.drools.workflow.core.node;
+
+public class StateNode extends EventBasedNode {
+
+	private static final long serialVersionUID = 1L;
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -17,6 +17,7 @@
 import org.drools.workflow.core.node.RuleSetNode;
 import org.drools.workflow.core.node.Split;
 import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.StateNode;
 import org.drools.workflow.core.node.SubProcessNode;
 import org.drools.workflow.core.node.TimerNode;
 import org.drools.workflow.core.node.WorkItemNode;
@@ -35,6 +36,7 @@
 import org.drools.workflow.instance.node.RuleSetNodeInstance;
 import org.drools.workflow.instance.node.SplitInstance;
 import org.drools.workflow.instance.node.StartNodeInstance;
+import org.drools.workflow.instance.node.StateNodeInstance;
 import org.drools.workflow.instance.node.SubProcessNodeInstance;
 import org.drools.workflow.instance.node.TimerNodeInstance;
 import org.drools.workflow.instance.node.WorkItemNodeInstance;
@@ -80,6 +82,8 @@
                   new CreateNewNodeFactory( ForEachNodeInstance.class ) );
         register( EventNode.class,
                   new CreateNewNodeFactory( EventNodeInstance.class ) );
+        register( StateNode.class,
+                  new CreateNewNodeFactory( StateNodeInstance.class ) );
     }
 
     public void register(Class< ? extends Node> cls,

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -0,0 +1,41 @@
+package org.drools.workflow.instance.node;
+
+import org.drools.runtime.process.NodeInstance;
+import org.drools.workflow.core.impl.NodeImpl;
+
+public class StateNodeInstance extends EventBasedNodeInstance {
+
+	private static final long serialVersionUID = 4L;
+
+	public void internalTrigger(NodeInstance from, String type) {
+		addTriggerListener();
+	}
+	
+	public void signalEvent(String type, Object event) {
+		if ("signal".equals(type)) {
+			String connectionType = NodeImpl.CONNECTION_DEFAULT_TYPE;
+			if (event instanceof String) {
+				connectionType = (String) event;
+			}
+			removeEventListeners();
+			triggerCompleted(connectionType, true);
+		} else {
+			super.signalEvent(type, event);
+		}
+	}
+	
+	private void addTriggerListener() {
+		getProcessInstance().addEventListener("signal", this, false);
+	}
+
+    public void addEventListeners() {
+        super.addEventListeners();
+        addTriggerListener();
+    }
+    
+    public void removeEventListeners() {
+        super.removeEventListeners();
+        getProcessInstance().removeEventListener("signal", this, false);
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/debug/AuditView.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -109,13 +109,13 @@
         ((TreeViewer) getViewer()).expandAll();
     }
     
-    protected List createEventList(List logEvents) {
-		Iterator iterator = logEvents.iterator();
-		List events = new ArrayList();
-		Stack beforeEvents = new Stack();
-		List newActivations = new ArrayList();
-		Map activationMap = new HashMap();
-		Map objectMap = new HashMap();
+    protected List<Event> createEventList(List<LogEvent> logEvents) {
+		Iterator<LogEvent> iterator = logEvents.iterator();
+		List<Event> events = new ArrayList<Event>();
+		Stack<Event> beforeEvents = new Stack<Event>();
+		List<Event> newActivations = new ArrayList<Event>();
+		Map<String, Event> activationMap = new HashMap<String, Event>();
+		Map<Long, Event> objectMap = new HashMap<Long, Event>();
 		while (iterator.hasNext()) {
 			LogEvent inEvent = (LogEvent) iterator.next();
 			Event event = new Event(inEvent.getType());
@@ -309,6 +309,9 @@
     					newActivations.clear();
                     }
 					break;
+			    default:
+			    	// do nothing
+			    	break;
 			}
 		}
 		return events;
@@ -397,7 +400,7 @@
 		
 		private String toString;
 		private int type;
-		private List subEvents = new ArrayList();
+		private List<Event> subEvents = new ArrayList<Event>();
 		private Event causeEvent;
 		
 		public Event(int type) {
@@ -420,7 +423,7 @@
 			subEvents.add(subEvent);
 		}
 		
-		public void addSubEvents(Collection subEvents) {
+		public void addSubEvents(Collection<Event> subEvents) {
 			this.subEvents.addAll(subEvents);
 		}
 		

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/HumanTaskNodeWrapper.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -66,7 +66,7 @@
     protected void initDescriptors() {
     	super.initDescriptors();
         IPropertyDescriptor[] parentDescriptors = descriptors;
-        IPropertyDescriptor[] descriptors = new IPropertyDescriptor[parentDescriptors.length + 1];
+        descriptors = new IPropertyDescriptor[parentDescriptors.length + 1];
         System.arraycopy(parentDescriptors, 0, descriptors, 0, parentDescriptors.length);
         descriptors[descriptors.length - 1] = 
             new TextPropertyDescriptor(SWIMLANE, "Swimlane");

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -35,6 +35,7 @@
 import org.drools.workflow.core.node.TimerNode;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.dialogs.MessageDialog;
 
 public class RuleFlowWrapperBuilder implements ProcessWrapperBuilder {
     
@@ -124,16 +125,21 @@
             WorkItemWrapper workItemWrapper = new WorkItemWrapper();
             Work work = ((WorkItemNode) node).getWork();
             if (work != null && work.getName() != null) {
-                WorkDefinition workDefinition = 
-                    WorkItemDefinitions.getWorkDefinitions(project)
-                        .get(work.getName());
-                if (workDefinition == null) {
-//                	DroolsEclipsePlugin.log(
-//                        new IllegalArgumentException("Could not find work definition for work " + work.getName()));
-                    workDefinition = new WorkDefinitionImpl();
-                    ((WorkDefinitionImpl) workDefinition).setName(work.getName());
+                try {
+                	WorkDefinition workDefinition = 
+	                    WorkItemDefinitions.getWorkDefinitions(project)
+	                        .get(work.getName());
+	                if (workDefinition == null) {
+	//                	DroolsEclipsePlugin.log(
+	//                        new IllegalArgumentException("Could not find work definition for work " + work.getName()));
+	                    workDefinition = new WorkDefinitionImpl();
+	                    ((WorkDefinitionImpl) workDefinition).setName(work.getName());
+	                }
+	                workItemWrapper.setWorkDefinition(workDefinition);
+                } catch (Throwable t) {
+            		// an error might be thrown when parsing the work definitions,
+                	// but this should already be displayed to the user
                 }
-                workItemWrapper.setWorkDefinition(workDefinition);
             }
             return workItemWrapper;
         } else if (node instanceof EventNode) {

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/RuleFlowModelEditor.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -47,6 +47,7 @@
 import org.eclipse.gef.palette.PaletteRoot;
 import org.eclipse.gef.requests.SimpleFactory;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IFileEditorInput;
@@ -100,42 +101,47 @@
                     Thread.currentThread().setContextClassLoader(newLoader);
                     PaletteDrawer drawer = (PaletteDrawer) getPaletteRoot().getChildren().get(2);
                     List entries = new ArrayList();
-                    for (final WorkDefinition workDefinition: WorkItemDefinitions.getWorkDefinitions(file).values()) {
-                        final String label;
-                        String description = workDefinition.getName();
-                        String icon = null;
-                        if (workDefinition instanceof WorkDefinitionExtension) {
-                            WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
-                            label = extension.getDisplayName();
-                            description = extension.getExplanationText();
-                            icon = extension.getIcon();
-                        } else {
-                            label = workDefinition.getName();
-                        }
-                        
-                        URL iconUrl = null;
-                        if (icon != null) {
-                            iconUrl = newLoader.getResource(icon);
-                        }
-                        if (iconUrl == null) {
-                            iconUrl = DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif");
-                        }
-                        CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
-                            label,
-                            description,
-                            WorkItemWrapper.class,
-                            new SimpleFactory(WorkItemWrapper.class) {
-                                public Object getNewObject() {
-                                    WorkItemWrapper workItemWrapper = (WorkItemWrapper) super.getNewObject();
-                                    workItemWrapper.setName(label);
-                                    workItemWrapper.setWorkDefinition(workDefinition);
-                                    return workItemWrapper;
-                                }
-                            },
-                            ImageDescriptor.createFromURL(iconUrl), 
-                            ImageDescriptor.createFromURL(iconUrl)
-                        );
-                        entries.add(combined);
+                    try {
+	                    for (final WorkDefinition workDefinition: WorkItemDefinitions.getWorkDefinitions(file).values()) {
+	                        final String label;
+	                        String description = workDefinition.getName();
+	                        String icon = null;
+	                        if (workDefinition instanceof WorkDefinitionExtension) {
+	                            WorkDefinitionExtension extension = (WorkDefinitionExtension) workDefinition;
+	                            label = extension.getDisplayName();
+	                            description = extension.getExplanationText();
+	                            icon = extension.getIcon();
+	                        } else {
+	                            label = workDefinition.getName();
+	                        }
+	                        
+	                        URL iconUrl = null;
+	                        if (icon != null) {
+	                            iconUrl = newLoader.getResource(icon);
+	                        }
+	                        if (iconUrl == null) {
+	                            iconUrl = DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/action.gif");
+	                        }
+	                        CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
+	                            label,
+	                            description,
+	                            WorkItemWrapper.class,
+	                            new SimpleFactory(WorkItemWrapper.class) {
+	                                public Object getNewObject() {
+	                                    WorkItemWrapper workItemWrapper = (WorkItemWrapper) super.getNewObject();
+	                                    workItemWrapper.setName(label);
+	                                    workItemWrapper.setWorkDefinition(workDefinition);
+	                                    return workItemWrapper;
+	                                }
+	                            },
+	                            ImageDescriptor.createFromURL(iconUrl), 
+	                            ImageDescriptor.createFromURL(iconUrl)
+	                        );
+	                        entries.add(combined);
+	                    }
+                    } catch (Throwable t) {
+                		MessageDialog.openError(
+                			getSite().getShell(), "Parsing work item definitions", t.getMessage());
                     }
                     drawer.setChildren(entries);
                 } finally {

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/AbstractBlockingResponseHandler.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -4,7 +4,6 @@
 package org.drools.eclipse.task.views;
 
 import org.drools.task.service.BaseMinaHandler.ResponseHandler;
-import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
 
 public abstract class AbstractBlockingResponseHandler
     implements

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskOperationResponseHandler.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -3,8 +3,6 @@
  */
 package org.drools.eclipse.task.views;
 
-import org.drools.eventmessaging.EventResponseHandler;
-import org.drools.eventmessaging.Payload;
 import org.drools.task.service.TaskClientHandler.TaskOperationResponseHandler;
 
 public class BlockingTaskOperationResponseHandler extends AbstractBlockingResponseHandler implements TaskOperationResponseHandler {

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/BlockingTaskSummaryResponseHandler.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -33,7 +33,7 @@
             isDone = this.done;
         }        
         if ( !isDone ) {
-            throw new RuntimeException("Timeout : unable to retrieve results" );
+            throw new TimeoutException();
         }
         
         return results;

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TaskView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TaskView.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TaskView.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -3,6 +3,7 @@
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 import java.text.DateFormat;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -52,8 +53,6 @@
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.dialogs.ViewContentProvider;
-import org.eclipse.ui.internal.dialogs.ViewLabelProvider;
 import org.eclipse.ui.part.ViewPart;
 
 public class TaskView extends ViewPart {
@@ -112,7 +111,7 @@
 		}
 		public void dispose() {
 		}
-		@SuppressWarnings("unchecked")
+		@SuppressWarnings({ "unchecked" })
 		public Object[] getElements(Object parent) {
 			if (parent instanceof List) {
 				List<TaskSummary> tasks = (List<TaskSummary>) parent;
@@ -435,14 +434,22 @@
 			return;
 		}
 		
-		BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
-		client.getTasksAssignedAsPotentialOwner(userId, language, responseHandler);
-        List<TaskSummary> tasks = responseHandler.getResults();
-        
-        tableViewer.setInput(tasks);
-        tableViewer.refresh();
-        tableViewer.setSelection(null);
-        updateButtons();
+		try {
+			BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+			client.getTasksAssignedAsPotentialOwner(userId, language, responseHandler);
+	        List<TaskSummary> tasks = responseHandler.getResults();
+	        tableViewer.setInput(tasks);
+	        tableViewer.refresh();
+	        tableViewer.setSelection(null);
+	        updateButtons();
+		} catch (TimeoutException e) {
+			showMessage("Could not connect to task server, refresh first.");
+			client.disconnect();
+			this.client = null;
+	        tableViewer.setInput(new ArrayList<TaskSummary>());
+	        tableViewer.refresh();
+	        tableViewer.setSelection(null);
+		}
 	}
 	
 	private void createTask() {

Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TimeoutException.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TimeoutException.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse.task/src/main/java/org/drools/eclipse/task/views/TimeoutException.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -0,0 +1,7 @@
+package org.drools.eclipse.task.views;
+
+public class TimeoutException extends RuntimeException {
+
+	private static final long serialVersionUID = 4L;
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -0,0 +1,92 @@
+package org.drools.process.audit;
+
+import java.util.Date;
+
+public class NodeInstanceLog {
+    
+	public static final int TYPE_ENTER = 0;
+	public static final int TYPE_EXIT = 1;
+	
+	private String id;
+    private int type;
+    private long processInstanceId;
+    private String processId;
+    private String nodeInstanceId;
+    private String nodeId;
+    private Date date;
+    
+    NodeInstanceLog() {
+    }
+    
+	public NodeInstanceLog(int type, long processInstanceId, String processId,
+			               String nodeInstanceId, String nodeId) {
+		this.type = type;
+        this.processInstanceId = processInstanceId;
+        this.processId = processId;
+		this.nodeInstanceId = nodeInstanceId;
+		this.nodeId = nodeId;
+        this.date = new Date();
+    }
+	
+	public int getType() {
+		return type;
+	}
+	
+	void setType(int type) {
+		this.type = type;
+	}
+    
+    public String getId() {
+    	return id;
+    }
+    
+    void setId(String id) {
+		this.id = id;
+	}
+
+    public long getProcessInstanceId() {
+        return processInstanceId;
+    }
+    
+	void setProcessInstanceId(long processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+    public String getProcessId() {
+        return processId;
+    }
+    
+	void setProcessId(String processId) {
+		this.processId = processId;
+	}
+
+    public String getNodeInstanceId() {
+		return nodeInstanceId;
+	}
+
+	void setNodeInstanceId(String nodeInstanceId) {
+		this.nodeInstanceId = nodeInstanceId;
+	}
+
+	public String getNodeId() {
+		return nodeId;
+	}
+
+	void setNodeId(String nodeId) {
+		this.nodeId = nodeId;
+	}
+
+	public Date getDate() {
+        return date;
+    }
+    
+	void setDate(Date date) {
+		this.date = date;
+	}
+
+    public String toString() {
+        return (type == 0 ? "Triggered " : "Left ") + "Node Instance '" + 
+        	processId + "#" + nodeId + "' [" + processInstanceId + "#" + nodeInstanceId + "]";
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/ProcessInstanceDbLog.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -37,4 +37,44 @@
         return result == null || result.size() == 0 ? null : result.get(0);
     }
 
+    @SuppressWarnings("unchecked")
+	public static List<NodeInstanceLog> findNodeInstances(long processInstanceId) {
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        List<NodeInstanceLog> result = session.createQuery(
+            "from NodeInstanceLog as log where log.processInstanceId = ?")
+                .setLong(0, processInstanceId).list();
+        session.getTransaction().commit();
+        return result;
+    }
+
+    @SuppressWarnings("unchecked")
+	public static List<NodeInstanceLog> findNodeInstances(long processInstanceId, String nodeId) {
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        List<NodeInstanceLog> result = session.createQuery(
+            "from NodeInstanceLog as log where log.processInstanceId = ? and log.nodeId = ?")
+                .setLong(0, processInstanceId)
+                .setString(1, nodeId).list();
+        session.getTransaction().commit();
+        return result;
+    }
+
+	@SuppressWarnings("unchecked")
+	public static void clear() {
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        List<ProcessInstanceLog> processInstances =
+        	session.createQuery("from ProcessInstanceLog").list();
+        for (ProcessInstanceLog processInstance: processInstances) {
+        	session.delete(processInstance);
+        }
+        List<NodeInstanceLog> nodeInstances =
+        	session.createQuery("from NodeInstanceLog").list();
+        for (NodeInstanceLog nodeInstance: nodeInstances) {
+        	session.delete(nodeInstance);
+        }
+        session.getTransaction().commit();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/WorkingMemoryDbLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/WorkingMemoryDbLogger.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/WorkingMemoryDbLogger.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -6,6 +6,7 @@
 import org.drools.audit.WorkingMemoryLogger;
 import org.drools.audit.event.LogEvent;
 import org.drools.audit.event.RuleFlowLogEvent;
+import org.drools.audit.event.RuleFlowNodeLogEvent;
 import org.drools.event.KnowledgeRuntimeEventManager;
 import org.hibernate.Session;
 
@@ -22,19 +23,27 @@
     public void logEventCreated(LogEvent logEvent) {
         switch (logEvent.getType()) {
             case LogEvent.BEFORE_RULEFLOW_CREATED:
-                RuleFlowLogEvent event = (RuleFlowLogEvent) logEvent;
-                addLog(event.getProcessInstanceId(), event.getProcessId());
+                RuleFlowLogEvent processEvent = (RuleFlowLogEvent) logEvent;
+                addProcessLog(processEvent.getProcessInstanceId(), processEvent.getProcessId());
                 break;
             case LogEvent.AFTER_RULEFLOW_COMPLETED:
-                event = (RuleFlowLogEvent) logEvent;
-                updateLog(event.getProcessInstanceId());
+            	processEvent = (RuleFlowLogEvent) logEvent;
+                updateProcessLog(processEvent.getProcessInstanceId());
                 break;
+            case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED:
+            	RuleFlowNodeLogEvent nodeEvent = (RuleFlowNodeLogEvent) logEvent;
+            	addNodeEnterLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId());
+                break;
+            case LogEvent.BEFORE_RULEFLOW_NODE_EXITED:
+            	nodeEvent = (RuleFlowNodeLogEvent) logEvent;
+            	addNodeExitLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId());
+                break;
             default:
                 // ignore all other events
         }
     }
 
-    private void addLog(long processInstanceId, String processId) {
+    private void addProcessLog(long processInstanceId, String processId) {
         ProcessInstanceLog log = new ProcessInstanceLog(processInstanceId, processId);
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
@@ -42,7 +51,7 @@
         session.getTransaction().commit();
     }
     
-    private void updateLog(long processInstanceId) {
+    private void updateProcessLog(long processInstanceId) {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
         ProcessInstanceLog log = (ProcessInstanceLog) session.load(ProcessInstanceLog.class, processInstanceId);
@@ -50,4 +59,21 @@
         session.update(log);
         session.getTransaction().commit();
     }
+    
+    private void addNodeEnterLog(long processInstanceId, String processId, String nodeInstanceId, String nodeId) {
+        NodeInstanceLog log = new NodeInstanceLog(NodeInstanceLog.TYPE_ENTER, processInstanceId, processId, nodeInstanceId, nodeId);
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        session.save(log);
+        session.getTransaction().commit();
+    }
+    
+    private void addNodeExitLog(long processInstanceId, String processId, String nodeInstanceId, String nodeId) {
+        NodeInstanceLog log = new NodeInstanceLog(NodeInstanceLog.TYPE_EXIT, processInstanceId, processId, nodeInstanceId, nodeId);
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        session.beginTransaction();
+        session.save(log);
+        session.getTransaction().commit();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/AuditLog.hbm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/AuditLog.hbm.xml	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/AuditLog.hbm.xml	2009-01-12 14:11:27 UTC (rev 24649)
@@ -7,11 +7,23 @@
 
 	<class name="org.drools.process.audit.ProcessInstanceLog" >
         <id name="processInstanceId">
-            <generator class="native"/>
+            <generator class="assigned"/>
         </id>
         <property name="processId"/>
         <property name="start" type="timestamp" column="START_DATE"/>
         <property name="end" type="timestamp" column="END_DATE"/>
     </class>
 
+	<class name="org.drools.process.audit.NodeInstanceLog" >
+        <id name="id">
+            <generator class="native"/>
+        </id>
+        <property name="type"/>
+        <property name="nodeInstanceId"/>
+        <property name="nodeId"/>
+        <property name="processInstanceId"/>
+        <property name="processId"/>
+        <property name="date" type="timestamp" column="DATE"/>
+    </class>
+
 </hibernate-mapping>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/resources/hibernate.cfg.xml	2009-01-12 14:11:27 UTC (rev 24649)
@@ -9,8 +9,8 @@
 
         <!-- Database connection settings -->
         <property name="connection.driver_class">org.h2.Driver</property>
-        <!--property name="connection.url">jdbc:h2:mem:mydb</property-->
-        <property name="connection.url">jdbc:h2:file:/NotBackedUp/data/mydb</property>
+        <property name="connection.url">jdbc:h2:mem:mydb</property>
+        <!--property name="connection.url">jdbc:h2:file:/NotBackedUp/data/mydb</property-->
         <property name="connection.username">sa</property>
         <property name="connection.password"></property>
 
@@ -30,7 +30,7 @@
         <property name="show_sql">false</property>
 
         <!-- Drop and re-create the database schema on startup -->
-        <!-- property name="hbm2ddl.auto">create</property-->
+        <!--property name="hbm2ddl.auto">create</property-->
 
         <mapping resource="AuditLog.hbm.xml"/>
 

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/WorkingMemoryDbLoggerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/WorkingMemoryDbLoggerTest.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/WorkingMemoryDbLoggerTest.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -15,7 +15,7 @@
 
 public class WorkingMemoryDbLoggerTest extends TestCase {
 
-	public void testLogger() {
+	public void testLogger1() {
         // load the process
         RuleBase ruleBase = createKnowledgeBase();
         // create a new session
@@ -24,18 +24,92 @@
         session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
 
         // start process instance
+        long processInstanceId = session.startProcess("com.sample.ruleflow").getId();
+        
+        System.out.println("Checking process instances for process 'com.sample.ruleflow'");
+        List<ProcessInstanceLog> processInstances =
+        	ProcessInstanceDbLog.findProcessInstances("com.sample.ruleflow");
+        assertEquals(1, processInstances.size());
+        ProcessInstanceLog processInstance = processInstances.get(0);
+        System.out.println(processInstance);
+        assertNotNull(processInstance.getStart());
+        assertNotNull(processInstance.getEnd());
+        assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+        assertEquals("com.sample.ruleflow", processInstance.getProcessId());
+        List<NodeInstanceLog> nodeInstances = ProcessInstanceDbLog.findNodeInstances(processInstanceId);
+        assertEquals(6, nodeInstances.size());
+        for (NodeInstanceLog nodeInstance: nodeInstances) {
+        	System.out.println(nodeInstance);
+            assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+            assertEquals("com.sample.ruleflow", processInstance.getProcessId());
+            assertNotNull(nodeInstance.getDate());
+        }
+        ProcessInstanceDbLog.clear();
+	}
+	
+	public void testLogger2() {
+        // load the process
+        RuleBase ruleBase = createKnowledgeBase();
+        // create a new session
+        StatefulSession session = ruleBase.newStatefulSession();
+        new WorkingMemoryDbLogger(session);
+        session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+
+        // start process instance
         session.startProcess("com.sample.ruleflow");
         session.startProcess("com.sample.ruleflow");
         
         System.out.println("Checking process instances for process 'com.sample.ruleflow'");
-        List<ProcessInstanceLog> processInstances
-        	= ProcessInstanceDbLog.findProcessInstances("com.sample.ruleflow");
-        for (Object result: processInstances) {
-            System.out.println(result);
+        List<ProcessInstanceLog> processInstances =
+        	ProcessInstanceDbLog.findProcessInstances("com.sample.ruleflow");
+        assertEquals(2, processInstances.size());
+        for (ProcessInstanceLog processInstance: processInstances) {
+            System.out.print(processInstance);
+            System.out.println(" -> " + processInstance.getStart() + " - " + processInstance.getEnd());
+            List<NodeInstanceLog> nodeInstances = ProcessInstanceDbLog.findNodeInstances(processInstance.getProcessInstanceId());
+            for (NodeInstanceLog nodeInstance: nodeInstances) {
+            	System.out.print(nodeInstance);
+                System.out.println(" -> " + nodeInstance.getDate());
+            }
+            assertEquals(6, nodeInstances.size());
         }
-        assertEquals(2, processInstances.size());
+        ProcessInstanceDbLog.clear();
 	}
 	
+	public void testLogger3() {
+        // load the process
+        RuleBase ruleBase = createKnowledgeBase();
+        // create a new session
+        StatefulSession session = ruleBase.newStatefulSession();
+        new WorkingMemoryDbLogger(session);
+        session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+
+        // start process instance
+        long processInstanceId = session.startProcess("com.sample.ruleflow2").getId();
+        
+        System.out.println("Checking process instances for process 'com.sample.ruleflow2'");
+        List<ProcessInstanceLog> processInstances =
+        	ProcessInstanceDbLog.findProcessInstances("com.sample.ruleflow2");
+        assertEquals(1, processInstances.size());
+        ProcessInstanceLog processInstance = processInstances.get(0);
+        System.out.print(processInstance);
+        System.out.println(" -> " + processInstance.getStart() + " - " + processInstance.getEnd());
+        assertNotNull(processInstance.getStart());
+        assertNotNull(processInstance.getEnd());
+        assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+        assertEquals("com.sample.ruleflow2", processInstance.getProcessId());
+        List<NodeInstanceLog> nodeInstances = ProcessInstanceDbLog.findNodeInstances(processInstanceId);
+        for (NodeInstanceLog nodeInstance: nodeInstances) {
+        	System.out.print(nodeInstance);
+            System.out.println(" -> " + nodeInstance.getDate());
+            assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+            assertEquals("com.sample.ruleflow2", processInstance.getProcessId());
+            assertNotNull(nodeInstance.getDate());
+        }
+        assertEquals(14, nodeInstances.size());
+        ProcessInstanceDbLog.clear();
+	}
+	
     private static RuleBase createKnowledgeBase() {
         // create a builder
         PackageBuilder builder = new PackageBuilder();
@@ -43,7 +117,10 @@
         Reader source = new InputStreamReader(
             ProcessInstanceExecutor.class.getResourceAsStream("/ruleflow.rf"));
         builder.addProcessFromXml(source);
-       // create the knowledge base 
+        source = new InputStreamReader(
+                ProcessInstanceExecutor.class.getResourceAsStream("/ruleflow2.rf"));
+            builder.addProcessFromXml(source);
+        // create the knowledge base 
         Package pkg = builder.getPackage();
         RuleBase ruleBase = RuleBaseFactory.newRuleBase();
         ruleBase.addPackage(pkg);

Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow2.rf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow2.rf	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow2.rf	2009-01-12 14:11:27 UTC (rev 24649)
@@ -9,7 +9,8 @@
 
   <nodes>
     <start id="1" name="Start" />
-    <workItem id="2" name="Task" >
+    <split id="2" name="Split" type="1" />
+    <workItem id="3" name="Task" >
       <work name="Human Task" >
         <parameter name="ActorId" >
           <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
@@ -26,12 +27,34 @@
         </parameter>
       </work>
     </workItem>
-    <end id="3" name="End" />
+    <workItem id="4" name="Task" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>Task</value>
+        </parameter>
+        <parameter name="Comment" >
+          <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>
+      </work>
+    </workItem>
+    <join id="5" name="Join" type="1" />
+    <end id="6" name="End" />
   </nodes>
 
   <connections>
     <connection from="1" to="2" />
     <connection from="2" to="3" />
+    <connection from="2" to="4" />
+    <connection from="3" to="5" />
+    <connection from="4" to="5" />
+    <connection from="5" to="6" />
   </connections>
 
 </process>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java	2009-01-12 14:11:27 UTC (rev 24649)
@@ -68,11 +68,13 @@
     
     public void doAction(int actionId, Map inputs) {
         for (org.drools.runtime.process.NodeInstance nodeInstance: getNodeInstances()) {
-            StepNodeInstance stepNodeInstance = (StepNodeInstance) nodeInstance;
-            if (stepNodeInstance.isAvailableAction(actionId)) {
-                stepNodeInstance.doAction(actionId, inputs);
-                break;
-            }
+        	if (nodeInstance instanceof StepNodeInstance) {
+		        StepNodeInstance stepNodeInstance = (StepNodeInstance) nodeInstance;
+		        if (stepNodeInstance.isAvailableAction(actionId)) {
+		            stepNodeInstance.doAction(actionId, inputs);
+		            break;
+		        }
+        	}
         }
         checkImplicitFinish();
     }

Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml	2009-01-12 14:11:27 UTC (rev 24649)
@@ -87,7 +87,7 @@
      new org.drools.task.query.TaskSummary(
      t.id,
      names.text,
-     subjects.text,
+     subject.text,
      descriptions.text,
      t.taskData.status,
      t.priority,
@@ -98,9 +98,11 @@
      t.taskData.activationTime,
      t.taskData.expirationTime)
 from 
-    Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
+    Task t
+    left join t.taskData.createdBy
+    left join t.taskData.actualOwner
+    left join t.subjects as subject,
     I18NText names,
-    I18NText subjects,
     I18NText descriptions, 
     OrganizationalEntity potentialOwners
 where    
@@ -110,8 +112,7 @@
     names.language = :language and
     names in elements( t.names) and
     
-    subjects.language = :language and
-    subjects in elements( t.subjects) and
+    subject.language = :language and
     
     descriptions.language = :language and
     descriptions in elements( t.descriptions) and

Modified: labs/jbossrules/trunk/drools-repository/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-repository/.classpath	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-repository/.classpath	2009-01-12 14:11:27 UTC (rev 24649)
@@ -1,62 +1,62 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/acl-spi/2.0.2.CR6/acl-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/authorization-spi/2.0.2.CR6/authorization-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.4.sp1/hibernate-3.2.4.sp1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar"/>
-  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-impl/2.0.2.CR6/identity-impl-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-spi/2.0.2.CR6/identity-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/1.4/jackrabbit-api-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.4.5/jackrabbit-core-1.4.5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-jcr-commons/1.4/jackrabbit-jcr-commons-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi/1.4/jackrabbit-spi-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi-commons/1.4/jackrabbit-spi-commons-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.4/jackrabbit-text-extractors-1.4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.3.GA/javassist-3.3.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-core/2.0.2.GA/jboss-common-core-2.0.2.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.1.GA/jboss-common-core-2.2.1.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-log4j/2.0.2.GA/jboss-logging-log4j-2.0.2.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.2.GA/jboss-logging-spi-2.0.2.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl/2.0.2.Beta4/jboss-security-acl-2.0.2.Beta4.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl-impl/2.0.2.CR6/jboss-security-acl-impl-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-spi/2.0.2.CR6/jboss-security-spi-2.0.2.CR6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.4.3/slf4j-api-1.4.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.4.3/slf4j-log4j12-1.4.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-slide/webdavlib/2.0/webdavlib-2.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.7.1/xml-apis-2.7.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/acl-spi/2.0.2.CR6/acl-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/asm/asm/1.5.3/asm-1.5.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/authorization-spi/2.0.2.CR6/authorization-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/ch/ethz/ganymed/ganymed-ssh2/build210/ganymed-ssh2-build210.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate/3.2.4.sp1/hibernate-3.2.4.sp1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.0.0.ga/hibernate-commons-annotations-3.0.0.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.3.1.ga/hibernate-entitymanager-3.3.1.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar"/>
+  <classpathentry kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-impl/2.0.2.CR6/identity-impl-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/identity-spi/2.0.2.CR6/identity-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/1.4/jackrabbit-api-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-core/1.4.5/jackrabbit-core-1.4.5.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-jcr-commons/1.4/jackrabbit-jcr-commons-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi/1.4/jackrabbit-spi-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-spi-commons/1.4/jackrabbit-spi-commons-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.4/jackrabbit-text-extractors-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.3.GA/javassist-3.3.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-core/2.0.2.GA/jboss-common-core-2.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.1.GA/jboss-common-core-2.2.1.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-common-logging-spi/2.0.4.GA/jboss-common-logging-spi-2.0.4.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-log4j/2.0.2.GA/jboss-logging-log4j-2.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jboss/jboss-logging-spi/2.0.2.GA/jboss-logging-spi-2.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl/2.0.2.Beta4/jboss-security-acl-2.0.2.Beta4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-acl-impl/2.0.2.CR6/jboss-security-acl-impl-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/security/jboss-security-spi/2.0.2.CR6/jboss-security-spi-2.0.2.CR6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.4.3/slf4j-api-1.4.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.4.3/slf4j-log4j12-1.4.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/1.1.2/svnkit-1.1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-slide/webdavlib/2.0/webdavlib-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.7.1/xml-apis-2.7.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-repository/.project
===================================================================
--- labs/jbossrules/trunk/drools-repository/.project	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-repository/.project	2009-01-12 14:11:27 UTC (rev 24649)
@@ -1,13 +1,13 @@
-<projectDescription>
-  <name>drools-repository</name>
-  <comment>A rule production system</comment>
-  <projects/>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-repository</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-templates/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-templates/.classpath	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-templates/.classpath	2009-01-12 14:11:27 UTC (rev 24649)
@@ -1,20 +1,20 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.5/mvel2-2.0.5.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="src" path="/drools-api"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.5/mvel2-2.0.5.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-templates/.project
===================================================================
--- labs/jbossrules/trunk/drools-templates/.project	2009-01-12 12:45:08 UTC (rev 24648)
+++ labs/jbossrules/trunk/drools-templates/.project	2009-01-12 14:11:27 UTC (rev 24649)
@@ -1,17 +1,17 @@
-<projectDescription>
-  <name>drools-templates</name>
-  <comment>A rule production system</comment>
-  <projects>
-    <project>drools-api</project>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-templates</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-api</project>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file




More information about the jboss-svn-commits mailing list