[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