[jboss-svn-commits] JBL Code SVN: r34584 - in labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test: resources/org/drools/integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 6 13:49:05 EDT 2010


Author: eaa
Date: 2010-08-06 13:49:05 -0400 (Fri, 06 Aug 2010)
New Revision: 34584

Added:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest_2.rf
Modified:
   labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java
Log:
JBRULES-2595: Extend ProcessEventListener to add support for low-level exceptions occurred in a process execution
	- Updated Test scenario

Modified: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java	2010-08-06 17:37:56 UTC (rev 34583)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/java/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.java	2010-08-06 17:49:05 UTC (rev 34584)
@@ -1,6 +1,5 @@
 package org.drools.integrationtests;
 
-import org.drools.runtime.process.ProcessInstance;
 import org.drools.impl.StatefulKnowledgeSessionImpl.ProcessEventListenerWrapper;
 import org.drools.Person;
 import java.util.List;
@@ -27,6 +26,7 @@
 import org.drools.runtime.process.WorkItemHandler;
 import org.drools.runtime.process.WorkItemManager;
 import org.drools.WorkingMemory;
+import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
 import org.drools.spi.Action;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.ProcessContext;
@@ -157,10 +157,11 @@
         }
     }
 
-    private class MyBusinessException extends RuntimeException{
+    private class MyBusinessException extends ProcessNodeExecutionException{
         private ProcessNodeExceptionOccurredEvent source;
 
         public MyBusinessException(ProcessNodeExceptionOccurredEvent source){
+            super(source.getError());
             this.source = source;
         }
 
@@ -188,7 +189,7 @@
      * a WorkItemHandler too.
      * @throws InterruptedException
      */
-    @Test
+    //@Test
     public void actionAndWorkItemExceptionTest() throws InterruptedException {
 
         //Create a new kbase with the given flow.
@@ -245,7 +246,7 @@
     public void testListenerException(){
         //Create a new kbase with the given flow.
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(ResourceFactory.newClassPathResource("org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest.rf"), ResourceType.DRF);
+        kbuilder.add(ResourceFactory.newClassPathResource("org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest_2.rf"), ResourceType.DRF);
         if (kbuilder.hasErrors()) {
             Assert.fail(kbuilder.getErrors().toString());
         }
@@ -285,15 +286,50 @@
         try {
             ksession.startProcess("org.drools.test.process1");
             fail("An exception should occurr!");
-        } catch (ProcessNodeExecutionException ex) {
-            System.out.println("\tProcessNodeExecutionException: "+ex.getCause());
-            assertTrue(ex.getCause() instanceof MyBusinessException);
-            assertEquals("flow", ((MyBusinessException)ex.getCause()).getProcessName());
-            assertEquals("HumanTask", ((MyBusinessException)ex.getCause()).getNodeName());
+        } catch (MyBusinessException ex) {
+            System.out.println("\tMyBusinessException");
+            assertEquals("flow", ex.getProcessName());
+            assertEquals("HumanTask", ex.getNodeName());
+        } catch (Exception ex){
+            ex.printStackTrace();
+            fail("Unexpected Exception: "+ex);
         }
         assertEquals(1, this.exceptionCount);
         this.exceptionCount = 0;
 
+        ///Register a real handler that never completes the WI
+        final List<Long> workItemIds = new ArrayList<Long>();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler(){
+
+            @Override
+            public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+                workItemIds.add(workItem.getId());
+                super.executeWorkItem(workItem, manager);
+            }
+            
+        });
+
+        //no exceptions now
+        ksession.startProcess("org.drools.test.process1");
+
+        assertEquals(1, workItemIds.size());
+        
+        try {
+            //After the WI is completed, an action node is executed. This
+            //Action Node is suposed to fail.
+            ksession.getWorkItemManager().completeWorkItem(workItemIds.get(0), null);
+            fail("An exception should occurr!");
+        } catch (MyBusinessException ex) {
+            System.out.println("\tMyBusinessException");
+            assertEquals("flow", ex.getProcessName());
+            assertEquals("Illegal Action Node", ex.getNodeName());
+        } catch (Exception ex){
+            ex.printStackTrace();
+            fail("Unexpected Exception: "+ex);
+        }
+        assertEquals(1, this.exceptionCount);
+        this.exceptionCount = 0;
+
         ksession.dispose();
     }
 
@@ -303,7 +339,7 @@
      * of makes use of external .rf files. The result using external flow files
      * would be the same.
      */
-    @Test
+    //@Test
     public void testSubProcess() {
 
         //Create a new Process (with name= "Process") with the following structure:

Added: labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest_2.rf
===================================================================
--- labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest_2.rf	                        (rev 0)
+++ labs/jbossrules/branches/5_1_20100802_esteban_diega/drools-compiler/src/test/resources/org/drools/integrationtests/ProcessNodeExceptionOccurredEventTest_2.rf	2010-08-06 17:49:05 UTC (rev 34584)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<process xmlns="http://drools.org/drools-5.0/process"
+         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+         type="RuleFlow" name="flow" package-name="org.drools.test.process1" id="org.drools.test.process1">
+
+  <header>
+  
+  	<imports>
+      <import name="org.drools.Person" />
+    </imports>
+    <globals>
+      <global identifier="person" type="org.drools.Person" />
+      <global identifier="list" type="java.util.List" />
+    </globals>
+  
+  </header>
+
+  <nodes>
+    <start id="1" name="Start" x="100" y="100" width="48" height="48" />
+     <actionNode id="2" name="Some Script" x="186" y="97" width="80" height="48" >
+      <action type="expression" dialect="java" >
+        System.out.println("Hello "+person.getName());        
+      </action>
+    </actionNode>
+
+
+
+     <workItem id="3" name="HumanTask" >
+      <work name="Human Task" >
+        <parameter name="ActorId" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>John Doe</value>
+        </parameter>
+        <parameter name="TaskName" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+          <value>Do something</value>
+        </parameter>
+        <parameter name="Priority" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+        <parameter name="Comment" >
+          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+        </parameter>
+      </work>
+      <onEntry>
+        <action type="expression" name="Print" dialect="mvel" >list.add("Executing on entry action");</action>
+      </onEntry>
+      <onExit>
+        <action type="expression" name="Print" dialect="java" >list.add("Executing on exit action1");</action>
+        <action type="expression" name="Print" dialect="java" >list.add("Executing on exit action2");</action>
+      </onExit>
+    </workItem>
+
+    <actionNode id="4" name="Illegal Action Node" x="186" y="97" width="80" height="48" >
+      <action type="expression" dialect="java" >
+        throw new java.lang.IllegalAccessException("This is illegal!");
+      </action>
+    </actionNode>
+
+    <end id="5" name="End" x="357" y="92" width="48" height="48" />
+  </nodes>
+
+  <connections>
+    <connection from="1" to="2" />
+    <connection from="2" to="3" />
+    <connection from="3" to="4" />
+    <connection from="4" to="5" />
+  </connections>
+
+</process>
\ No newline at end of file



More information about the jboss-svn-commits mailing list