[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