[jboss-svn-commits] JBL Code SVN: r29746 - in labs/jbossesb/trunk/product/services/jbrules/src: test/java/org/jboss/soa/esb/actions and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 22 06:48:24 EDT 2009


Author: kevin.conner at jboss.com
Date: 2009-10-22 06:48:24 -0400 (Thu, 22 Oct 2009)
New Revision: 29746

Added:
   labs/jbossesb/trunk/product/services/jbrules/src/test/resources/JBossESBStatefulDispose.drl
Modified:
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceCallHelper.java
   labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java
Log:
Fix dispose functionality for stateful rules: JBESB-2887

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java	2009-10-22 10:36:28 UTC (rev 29745)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java	2009-10-22 10:48:24 UTC (rev 29746)
@@ -37,6 +37,7 @@
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.PackageBuilderErrors;
 import org.drools.decisiontable.InputType;
 import org.drools.decisiontable.SpreadsheetCompiler;
 import org.jboss.internal.soa.esb.util.StreamUtils;
@@ -261,6 +262,11 @@
 	
 	private RuleBase getNewRuleBaseWithPackage( final PackageBuilder builder ) throws RuleServiceException, RuleServiceBuilderException
 	{
+		final PackageBuilderErrors errors = builder.getErrors();
+		if ((errors != null) && (errors.size() > 0))
+		{
+			throw new RuleServiceException("Generation raised the following errors: " + errors) ;
+		}
 		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
 		try 
 		{

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceCallHelper.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceCallHelper.java	2009-10-22 10:36:28 UTC (rev 29745)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceCallHelper.java	2009-10-22 10:48:24 UTC (rev 29746)
@@ -277,7 +277,7 @@
     private static boolean getDisposeProperty(final Message message) throws RuleServiceException
     {
         Object dispose = message.getProperties().getProperty(DISPOSE.getTagName());
-        return (dispose != null);
+        return Boolean.TRUE.equals(dispose);
     }
 
     private static void checkDisposePropertyIsSpecified( final Message message ) throws RuleServiceException

Modified: labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java	2009-10-22 10:36:28 UTC (rev 29745)
+++ labs/jbossesb/trunk/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java	2009-10-22 10:48:24 UTC (rev 29746)
@@ -94,6 +94,56 @@
         assertEquals( 2 , counter.getCounter() );
 	}
 
+    @Test
+    public void processStatefulDispose() throws Exception
+    {
+        Message message = createMessageWithOrder( order );
+        ConfigTree configTree = new CBRConfigTreeBuilder( true ).ruleFile( "JBossESBStatefulDispose.drl" ).stateful( true ).messagePaths(messagePathList).build();
+        BusinessRulesProcessor processor = new BusinessRulesProcessor( configTree );
+
+        // process message
+        processor.process( message );
+        assertEquals( 20.0, order.getDiscount(), 0);
+        assertEquals( "20%" ,message.getBody().get("DiscountObject"));
+        Counter counter = (Counter) message.getBody().get("Counter");
+        assertEquals( 1 , counter.getCounter() );
+
+        //  do not dispose after this call
+        message.getBody().remove("Order");
+        message.getProperties().setProperty( RuleServicePropertiesNames.DISPOSE.getTagName(), Boolean.FALSE );
+        message.getProperties().setProperty( RuleServicePropertiesNames.CONTINUE.getTagName(), Boolean.TRUE );
+        message.getBody().add("Counter", new Counter(counter.getCounter()));
+        processor.process( message );
+
+        counter = (Counter) message.getBody().get("Counter");
+        assertEquals( 2 , counter.getCounter() );
+        
+        //  now dispose after this call
+        message.getProperties().setProperty( RuleServicePropertiesNames.DISPOSE.getTagName(), Boolean.TRUE );
+        message.getProperties().setProperty( RuleServicePropertiesNames.CONTINUE.getTagName(), Boolean.TRUE );
+        message.getBody().add("Counter", new Counter(counter.getCounter()));
+        processor.process( message );
+
+        // If this assert fails then the second invocation disposed of the state when it shouldn't have
+        // and this one did not fire any rules.
+        counter = (Counter) message.getBody().get("Counter");
+        assertEquals( 3 , counter.getCounter() );
+        
+        final Order order = new Order();
+        order.setQuantity(20);
+        order.setUnitPrice( new BigDecimal("20.0") );
+        message = createMessageWithOrder( order );
+        
+        message.getProperties().setProperty( RuleServicePropertiesNames.DISPOSE.getTagName(), Boolean.TRUE );
+        message.getProperties().setProperty( RuleServicePropertiesNames.CONTINUE.getTagName(), Boolean.TRUE );
+        processor.process( message );
+
+        assertEquals( 20.0, order.getDiscount(), 0);
+        assertEquals( "20%" ,message.getBody().get("DiscountObject"));
+        counter = (Counter) message.getBody().get("Counter");
+        assertEquals( 1 , counter.getCounter() );
+    }
+
 	@Test ( expected = ActionProcessingException.class )
 	public void shouldThrowIfDisposePropertyIsNotSet() throws ObjectMappingException, ConfigurationException, RegistryException, MessageRouterException, ActionProcessingException
 	{

Added: labs/jbossesb/trunk/product/services/jbrules/src/test/resources/JBossESBStatefulDispose.drl
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/test/resources/JBossESBStatefulDispose.drl	                        (rev 0)
+++ labs/jbossesb/trunk/product/services/jbrules/src/test/resources/JBossESBStatefulDispose.drl	2009-10-22 10:48:24 UTC (rev 29746)
@@ -0,0 +1,34 @@
+package com.jboss.soa.esb.routing.cbr
+
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.internal.soa.esb.services.routing.cbr.Order;
+import org.jboss.soa.esb.actions.Counter;
+
+global Message message;
+
+rule "Initialisation Rule"
+	when
+		m     : Message ()
+		order : Order()
+		Order( discount == 0 )
+ 		not Counter()
+	then 
+		System.out.println("initialisation rule");
+		order.setDiscount( 20 );
+		insert( new Counter(0) );
+		m.getBody().add("DiscountObject","20%");
+end
+
+rule "Continue Rule"
+	when
+		order : Order()
+		$counter : Counter()
+		m     : Message ()
+	then 
+		Integer inc = $counter.getCounter();
+		inc++;
+		$counter.setCounter( inc );
+		System.out.println("Continue rule, counter == " + $counter.getCounter());
+		m.getBody().add( "Counter", $counter );
+end



More information about the jboss-svn-commits mailing list