[jboss-svn-commits] JBL Code SVN: r20688 - in labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src: test/java/org/jboss/internal/soa/esb/services/rules and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jun 23 04:23:29 EDT 2008
Author: beve
Date: 2008-06-23 04:23:28 -0400 (Mon, 23 Jun 2008)
New Revision: 20688
Modified:
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
Log:
Added a few more tests.
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java 2008-06-23 00:28:21 UTC (rev 20687)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java 2008-06-23 08:23:28 UTC (rev 20688)
@@ -28,6 +28,7 @@
import java.io.Reader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
+import java.util.Properties;
import org.apache.log4j.Logger;
import org.drools.RuleBase;
@@ -38,12 +39,12 @@
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
-import org.drools.rule.Package;
import org.jboss.internal.soa.esb.util.StreamUtils;
import org.jboss.soa.esb.util.ClassUtil;
/**
* A helper class, it returns rulebases based on various methods of creating them.
+ * <p/>
*
* @author jdelong at redhat.com
* @author <a href="mailto:dbevenius at redhat.com">Daniel Bevenius</a>
@@ -58,7 +59,7 @@
/**
* Factory method that returns an instance of this class.
* </p>
- * The current implemenations returns a new instance of this
+ * The current implementation returns a new instance of this
* class for every call.
*
* @return {@link DroolsRuleBaseHelper}
@@ -88,17 +89,16 @@
public RuleBase createRuleBaseFromRuleFiles(
final String ruleFile,
final String dsl)
- throws DroolsParserException, IOException, RuleServiceException
+ throws DroolsParserException, IOException, RuleServiceException, RuleServiceBuilderException
{
assertNotNull( ruleFile, "ruleFile" );
- logger.debug("Going to create a rulebase from the ruleFile: " + ruleFile);
// read in the rules
- InputStream rulesInputStream = getRulesInputStream(ruleFile);
+ InputStream rulesInputStream = getRulesInputStream( ruleFile );
- Reader ruleReader = getRulesReader(rulesInputStream);
+ Reader ruleReader = getRulesReader( rulesInputStream );
- PackageBuilder builder = new PackageBuilder(new PackageBuilderConfiguration());
+ PackageBuilder builder = new PackageBuilder( new PackageBuilderConfiguration() );
try
{
if ( dsl == null )
@@ -107,12 +107,11 @@
}
else
{
- logger.debug("Going to read the dsl: " + dsl);
InputStream dslInputStream = getRulesInputStream( dsl );
Reader dslReader = getRulesReader( dslInputStream );
if ( dslReader == null )
{
- logger.error("Could not find dsl: " + ruleFile);
+ logger.error("Could not find dsl file [" + dsl + "]");
}
else
{
@@ -132,20 +131,10 @@
safeClose(rulesInputStream);
}
- // get the compiled package (which is serializable)
- Package pkg = builder.getPackage();
- // add the package to a rulebase
- try
- {
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
- return ruleBase;
- }
- catch (final Exception ex)
- {
- throw new RuleServiceException(ex.getMessage(), ex);
- }
+ return getNewRuleBaseWithPackage( builder );
}
+
+
/**
* Reads the rules and dsl from files and returning as a string
@@ -174,9 +163,6 @@
return dsl == null ? rules : rules + getFileContents( dsl );
}
-
-
-
/**
* Reading the rules from a decision table.
* <p/>
@@ -191,25 +177,14 @@
*/
public RuleBase createRuleBaseFromDecisionTable(
final String decisionTable)
- throws DroolsParserException, IOException, RuleServiceException
+ throws DroolsParserException, IOException, RuleServiceException, RuleServiceBuilderException
{
assertNotNull( decisionTable, "decisionTable" );
- logger.debug("Going to read the decisionTable: " + decisionTable);
- String drl = getSpreadsheetRules(decisionTable);
+ final String drl = getSpreadsheetRules(decisionTable);
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new StringReader(drl) );
- try
- {
- //add the package to a rulebase (deploy the rule package).
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(builder.getPackage());
- return ruleBase;
- }
- catch (Exception ex)
- {
- throw new RuleServiceException(ex.getMessage(), ex);
- }
+ return getNewRuleBaseWithPackage( builder );
}
/**
@@ -219,21 +194,15 @@
*/
public String getSpreadsheetRules(final String decisionTable) throws RuleServiceException
{
- logger.debug("Going to read the decisionTable: " + decisionTable);
- String drl;
InputStream inputStreamDT = getRulesInputStream(decisionTable);
- SpreadsheetCompiler compiler = new SpreadsheetCompiler();
-
try
{
- drl = compiler.compile(inputStreamDT, InputType.XLS);
- logger.debug("Compiled the decsionTable to a drl: " + drl);
+ return new SpreadsheetCompiler().compile(inputStreamDT, InputType.XLS);
}
finally
{
safeClose(inputStreamDT);
}
- return drl;
}
/**
@@ -241,22 +210,30 @@
*/
public RuleBase loadRuleBaseFromRuleAgent(final String ruleAgentProperties) throws IOException, Exception
{
- logger.debug("Going to read the ruleAgentProperties: " + ruleAgentProperties);
- RuleAgent agent = RuleAgent.newRuleAgent("/" + ruleAgentProperties);
- RuleBase rb = agent.getRuleBase();
-
- return rb;
+ return RuleAgent.newRuleAgent( "/" + ruleAgentProperties ).getRuleBase();
}
+ public RuleBase loadRuleBaseFromRuleAgent(final Properties ruleAgentProperties) throws IOException, Exception
+ {
+ return RuleAgent.newRuleAgent( ruleAgentProperties ).getRuleBase();
+ }
+
+ /**
+ * This shows how rules are loaded up from a deployed package.
+ */
+ public RuleAgent createRuleAgent(final String ruleAgentProperties) throws IOException, Exception
+ {
+ return RuleAgent.newRuleAgent( "/" + ruleAgentProperties );
+ }
+
private String getFileContents( final String fileName ) throws RuleServiceException
{
InputStream inputStream = getRulesInputStream( fileName );
- final String fileContents;
try
{
- fileContents = StreamUtils.readStreamString( inputStream, "UTF-8" );
+ return StreamUtils.readStreamString( inputStream, "UTF-8" );
}
- catch (UnsupportedEncodingException e)
+ catch ( final UnsupportedEncodingException e)
{
throw new RuleServiceException("Could not read from file [" + fileName + "].", e);
}
@@ -264,14 +241,13 @@
{
safeClose( inputStream );
}
- return fileContents;
}
// private instance methods
private Reader getRulesReader(final InputStream inputStream)
{
- return new InputStreamReader(inputStream);
+ return new InputStreamReader( inputStream );
}
private InputStream getRulesInputStream(final String rulesFile) throws RuleServiceException
@@ -283,6 +259,27 @@
return resourceAsStream;
}
+ private RuleBase getNewRuleBaseWithPackage( final PackageBuilder builder ) throws RuleServiceException, RuleServiceBuilderException
+ {
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ try
+ {
+ ruleBase.addPackage( builder.getPackage() );
+ }
+ catch (final Exception ex)
+ // need to catch Exception as RuleBase.addPackage throws it
+ {
+ throw new RuleServiceException(ex.getMessage(), ex);
+ }
+
+ if ( builder.hasErrors() )
+ {
+ throw new RuleServiceBuilderException( "PackageBuilder generated errors: ", builder.getErrors() );
+ }
+
+ return ruleBase;
+ }
+
// private static methods
private static void safeClose( final InputStream is )
@@ -303,6 +300,4 @@
throw new NullPointerException("[" + argumentName + "] argument must not be null");
}
-
-
}
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java 2008-06-23 00:28:21 UTC (rev 20687)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java 2008-06-23 08:23:28 UTC (rev 20688)
@@ -33,6 +33,7 @@
import org.drools.StatefulSession;
import org.drools.StatelessSession;
import org.drools.WorkingMemory;
+import org.drools.agent.RuleAgent;
import org.drools.compiler.DroolsParserException;
import org.jboss.internal.soa.esb.assertion.AssertArgument;
import org.jboss.internal.soa.esb.services.routing.cbr.JBRulesCounter;
@@ -52,18 +53,26 @@
* @author <a href="mailto:dbevenius at redhat.com">Daniel Bevenius</a>
*
*/
-public class DroolsRuleService implements RuleService {
+public class DroolsRuleService implements RuleService
+{
/**
* The lifecycle resource factory for RuleBases.
*/
private static final LifecycleResourceFactory<Map<String, RuleBase>> lifecycleRuleBaseFactory = new LifecycleRuleBaseFactory();
+
+ private static final LifecycleResourceFactory<Map<String, RuleAgent>> lifecycleRuleAgentFactory = new LifecycleRuleAgentFactory();
/**
- * The lifecycle resource bule bases.
+ * The lifecycle resource rule bases.
*/
private static final LifecycleResource<Map<String, RuleBase>> lifecycleRuleBases = new LifecycleResource<Map<String, RuleBase>>(
lifecycleRuleBaseFactory, LifecyclePriorities.RULE_BASE_PRIORITY);
/**
+ * RuleAgents cache
+ */
+ private static final LifecycleResource<Map<String, RuleAgent>> lifecycleRuleAgents = new LifecycleResource<Map<String, RuleAgent>>(
+ lifecycleRuleAgentFactory, LifecyclePriorities.RULE_BASE_PRIORITY);
+ /**
* The lifecycle resource rule sets.
*/
private static final LifecycleResourceFactory<Map<String, String>> lifecycleRuleSetFactory = new LifecycleRuleSetFactory();
@@ -119,10 +128,10 @@
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_SUCCEED );
}
- catch (RuleServiceException ree)
+ catch (RuleServiceException e)
{
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + ree.getMessage(), ree);
+ throw e;
}
return message;
}
@@ -155,18 +164,19 @@
final long startTime = System.nanoTime();
- try {
- RuleBase ruleBase = getRuleBaseForDecisionTable(decisionTable, ruleReload);
- message = executeStatelessRules(ruleBase, message, globals, objectList);
+ try
+ {
+ RuleBase ruleBase = getRuleBaseForDecisionTable( decisionTable, ruleReload );
+ message = executeStatelessRules( ruleBase, message, globals, objectList );
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_SUCCEED );
-
- return message;
-
- } catch (RuleServiceException ree) {
+ }
+ catch (RuleServiceException e)
+ {
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + ree.getMessage(), ree);
+ throw e;
}
+ return message;
}
/**
@@ -195,36 +205,26 @@
final long startTime = System.nanoTime();
try
{
- DroolsRuleBaseHelper rbHelper = DroolsRuleBaseHelper.getInstance();
- RuleBase ruleBase = rbHelper.loadRuleBaseFromRuleAgent(ruleAgentProperties);
- final Map<String, RuleBase> ruleBases = lifecycleRuleBases.getLifecycleResource();
- if (ruleBase != null)
- {
- ruleBases.put(ruleAgentProperties, ruleBase);
-
- message = executeStatelessRules(ruleBase, message, globals, objectList);
-
- updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_SUCCEED );
- }
-
- return message;
-
+ final RuleBase ruleBase = getRuleBaseForRuleAgent( ruleAgentProperties ) ;
+ message = executeStatelessRules(ruleBase, message, globals, objectList);
+ updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_SUCCEED );
}
- catch (IOException e)
+ catch ( final IOException e)
{
updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException( "Could not read the ruleAgentProperties. " + e.getMessage(), e);
+ throw new RuleServiceException( "Could not read the ruleAgentProperties file [" + ruleAgentProperties + "]", e);
}
- catch (RuleServiceException e)
+ catch ( final RuleServiceException e)
{
updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw e;
}
- catch (Exception e)
+ catch ( final Exception e)
{
updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_FAILED );
throw new RuleServiceException( "RuleAgent could not get the RuleBase. " + e.getMessage(), e);
}
+ return message;
}
/**
@@ -261,15 +261,15 @@
try
{
- RuleBase ruleBase = getRuleBaseForFileBasedRules(ruleSet, dsl, ruleReload);
- message = executeStatefulRules(ruleBase, false, message, globals, objectList);
+ RuleBase ruleBase = getRuleBaseForFileBasedRules( ruleSet, dsl, ruleReload );
+ message = executeStatefulRules( ruleBase, false, message, globals, objectList );
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_SUCCEED);
}
- catch (RuleServiceException e)
+ catch (final RuleServiceException e)
{
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw e;
}
return message;
}
@@ -312,7 +312,7 @@
catch (RuleServiceException e)
{
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw e;
}
return message;
}
@@ -343,18 +343,11 @@
final long startTime = System.nanoTime();
try
{
- DroolsRuleBaseHelper rbHelper = DroolsRuleBaseHelper.getInstance();
- RuleBase ruleBase = rbHelper.loadRuleBaseFromRuleAgent(ruleAgentProperties);
+ final RuleBase ruleBase = getRuleBaseForRuleAgent( ruleAgentProperties ) ;
+
+ message = executeStatefulRules(ruleBase, false, message, globals, objectList);
- final Map<String, RuleBase> ruleBases = lifecycleRuleBases.getLifecycleResource();
- if (ruleBase != null)
- {
- ruleBases.put(ruleAgentProperties, ruleBase);
-
- message = executeStatefulRules(ruleBase, false, message, globals, objectList);
-
- updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_SUCCEED );
- }
+ updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_SUCCEED );
}
catch (IOException e)
{
@@ -364,7 +357,7 @@
catch (RuleServiceException e)
{
updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw e;
}
catch (Exception e)
{
@@ -373,6 +366,8 @@
}
return message;
}
+
+
/**
* Continue executing rules where the working memory already exists.
@@ -405,20 +400,18 @@
try
{
final Map<String, RuleBase> ruleBases = lifecycleRuleBases.getLifecycleResource();
- final RuleBase ruleBase = ruleBases.get(rules);
+ final RuleBase ruleBase = ruleBases.get( rules );
- message = executeStatefulRules(ruleBase, dispose, message, globals, objectList);
+ message = executeStatefulRules( ruleBase, dispose, message, globals, objectList );
updateJBRulesCounter( startTime, rules, JBRulesCounter.RULES_SUCCEED );
-
- return message;
-
}
catch (Exception e)
{
updateJBRulesCounter( startTime, rules, JBRulesCounter.RULES_FAILED );
throw new RuleServiceException( "Could not continue rule execution. " + e.getMessage(), e);
}
+ return message;
}
public void setConfigTree( final ConfigTree configTree )
@@ -427,6 +420,8 @@
rulesCounter.registerMBean();
}
+ // private methods
+
private void updateJBRulesCounter( final long startTime , final String rules, final String result )
{
if (rulesCounter != null)
@@ -436,6 +431,8 @@
}
}
+ // package protected methods
+
/**
* Determine if file based rules need reloading and return the rulebase
*
@@ -455,7 +452,6 @@
final String dsl,
final boolean ruleReload) throws RuleServiceException
{
-
final long startTime = System.nanoTime();
try
@@ -476,7 +472,7 @@
}
}
final Map<String, RuleBase> ruleBases = lifecycleRuleBases.getLifecycleResource();
- RuleBase ruleBase = ruleBases.get(ruleSet);
+ RuleBase ruleBase = ruleBases.get( ruleSet );
if ( ruleBase == null || isRulesChanged )
{
ruleBase = rbHelper.createRuleBaseFromRuleFiles(ruleSet, dsl);
@@ -509,18 +505,15 @@
catch (final RuleServiceException e)
{
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw e;
}
}
/**
* Determine if decision table need reloading and return the rulebase
*
- * @param ruleSet -
- * String reference to a file which contains a ruleSet.
- * @param dsl -
- * String reference to a file which contains a custom rule language
- * definition
+ * @param decisionTable -
+ * String reference to a file which contains a decision table.
* @param ruleReload -
* if set to true, a ruleSet update should result in reloading the
* ruleSet.
@@ -535,32 +528,36 @@
try
{
DroolsRuleBaseHelper rbHelper = DroolsRuleBaseHelper.getInstance();
- RuleBase ruleBase;
- if ( ruleReload )
+ RuleBase ruleBase = getCachedRuleBases().get( decisionTable );
+ if ( ruleReload || ruleBase == null )
{
- String drl = rbHelper.getSpreadsheetRules(decisionTable);
- ruleBase = getRuleBaseForFileBasedRules(drl, null, ruleReload);
+ ruleBase = rbHelper.createRuleBaseFromDecisionTable(decisionTable);
+ getCachedRuleBases().put( decisionTable, ruleBase );
}
else
{
- ruleBase = rbHelper.createRuleBaseFromDecisionTable(decisionTable);
+ ruleBase = getRuleBaseForFileBasedRules( decisionTable, null, ruleReload );
}
return ruleBase;
}
catch (IOException e)
{
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not read the rules. " + e.getMessage(), e);
+ throw new RuleServiceException("Could not read the rules from [" + decisionTable + "]", e);
}
catch (DroolsParserException e)
{
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw new RuleServiceException("Could not parse the rules in [" + decisionTable + "]", e);
}
catch (RuleServiceException e)
{
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_FAILED );
- throw new RuleServiceException("Could not parse the rules. " + e.getMessage(), e);
+ throw e;
+ } catch (LifecycleResourceException e)
+ {
+ updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_FAILED );
+ throw new RuleServiceException("Caught a LifecycleResourceException :", e);
}
}
@@ -702,6 +699,32 @@
}
}
+ RuleBase getRuleBaseForRuleAgent( final String ruleAgentProperties ) throws IOException, Exception
+ {
+ Map<String, RuleAgent> ruleAgents = getCachedRuleAgents();
+ RuleAgent ruleAgent = ruleAgents.get( ruleAgentProperties );
+ if ( ruleAgent == null )
+ {
+ ruleAgent = DroolsRuleBaseHelper.getInstance().createRuleAgent( ruleAgentProperties );
+ ruleAgents.put( ruleAgentProperties, ruleAgent );
+ }
+
+ RuleBase currentRuleBase = ruleAgent.getRuleBase();
+ // always update the cache as the rulebase might have been updated.
+ getCachedRuleBases().put( ruleAgentProperties, currentRuleBase );
+ return currentRuleBase;
+ }
+
+ Map<String, RuleAgent> getCachedRuleAgents() throws LifecycleResourceException
+ {
+ return lifecycleRuleAgents.getLifecycleResource();
+ }
+
+ Map<String, RuleBase> getCachedRuleBases() throws LifecycleResourceException
+ {
+ return lifecycleRuleBases.getLifecycleResource();
+ }
+
/**
* The lifecycle resource factory for rule sets.
*
@@ -746,6 +769,40 @@
// NoOp
}
}
+
+ public static class LifecycleRuleAgentFactory implements LifecycleResourceFactory<Map<String, RuleAgent>> {
+ /**
+ * Create a resource object which will be associated with the
+ * specified lifecycle identity.
+ *
+ * @param lifecycleIdentity
+ * The associated lifecycle identity.
+ * @return The lifecycle resource
+ * @throws LifecycleResourceException
+ * for errors during construction.
+ */
+ public Map<String, RuleAgent> createLifecycleResource( final String lifecycleIdentity) throws LifecycleResourceException
+ {
+ return new ConcurrentHashMap<String, RuleAgent>();
+ }
+
+ /**
+ * Destroy a resource object which is associated with the specified
+ * lifecycle identity.
+ *
+ * @param resource
+ * The lifecycle resource.
+ * @param lifecycleIdentity
+ * The associated lifecycle identity.
+ * @return The lifecycle resource.
+ * @throws LifecycleResourceException
+ * for errors during destroy.
+ */
+ public void destroyLifecycleResource( final Map<String, RuleAgent> resource, final String lifecycleIdentity) throws LifecycleResourceException
+ {
+ // NoOp
+ }
+ }
/**
* The lifecycle resource factory for rule sets.
@@ -793,6 +850,4 @@
}
}
-
-
}
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleServiceUnitTest.java 2008-06-23 00:28:21 UTC (rev 20687)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleServiceUnitTest.java 2008-06-23 08:23:28 UTC (rev 20688)
@@ -22,8 +22,7 @@
package org.jboss.internal.soa.esb.services.rules;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -34,8 +33,10 @@
import junit.framework.JUnit4TestAdapter;
import org.drools.RuleBase;
+import org.drools.agent.RuleAgent;
import org.jboss.internal.soa.esb.services.routing.cbr.Order;
import org.jboss.soa.esb.actions.Counter;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.format.MessageFactory;
import org.jboss.soa.esb.message.format.MessageType;
@@ -63,28 +64,68 @@
private ArrayList<String> messagePathList;
@Test
- public void executeStatefulRules() throws RuleServiceException
+ public void executeStatelessRules()
{
Map<String,Object> globals = getGlobalsWithDestAndMessage();
- message = ruleService.executeStatefulRules( ruleBase, true, message , globals, null );
+ message = ruleService.executeStatelessRules( ruleBase, message , globals, null );
ArrayList<String> destinations = getDistinations( globals );
assertTrue( destinations.size() == 1 );
}
@Test
- public void executeStatefulRulesDrl() throws RuleServiceException
+ public void executeStatelessRulesFromDecisionTableReload() throws RuleServiceException
{
+ Map<String,Object> globals = getGlobalsWithDest();
+ final String decisionTable = "RuleBaseHelper.xls";
+ message = ruleService.executeStatelessRulesFromDecisionTable( decisionTable, true, message, globals, null );
+ ArrayList<String> destinations = getDistinations( globals );
+ assertTrue( destinations.size() == 1 );
+ }
+
+ @Test
+ public void executeStatelessRulesFromDecisionTable() throws RuleServiceException
+ {
+ Map<String,Object> globals = getGlobalsWithDest();
+ final String decisionTable = "RuleBaseHelper.xls";
+ message = ruleService.executeStatelessRulesFromDecisionTable( decisionTable, false, message, globals, null );
+ ArrayList<String> destinations = getDistinations( globals );
+ assertTrue( destinations.size() == 1 );
+ }
+
+ @Test
+ public void executeStatfulRulesFromDecisionTableReload() throws RuleServiceException
+ {
+ Map<String,Object> globals = getGlobalsWithDest();
+ final String decisionTable = "RuleBaseHelper.xls";
+ message = ruleService.executeStatefulRulesFromDecisionTable( decisionTable, true, message, globals, null );
+ ArrayList<String> destinations = getDistinations( globals );
+ assertTrue( destinations.size() == 1 );
+ }
+
+ @Test
+ public void executeStatfulRulesFromDecisionTable() throws RuleServiceException
+ {
+ Map<String,Object> globals = getGlobalsWithDest();
+ final String decisionTable = "RuleBaseHelper.xls";
+ message = ruleService.executeStatefulRulesFromDecisionTable( decisionTable, false, message, globals, null );
+ ArrayList<String> destinations = getDistinations( globals );
+ assertTrue( destinations.size() == 1 );
+ }
+
+ @Test
+ public void executeStatefulRules() throws RuleServiceException
+ {
Map<String,Object> globals = getGlobalsWithDestAndMessage();
- message = ruleService.executeStatefulRules( "JBossESBRules.drl", null, true, message, globals, null );
+ message = ruleService.executeStatefulRules( ruleBase, true, message , globals, null );
ArrayList<String> destinations = getDistinations( globals );
assertTrue( destinations.size() == 1 );
}
@Test
- public void executeStatelessRules()
+ public void executeStatefulRulesDrl() throws RuleServiceException
{
Map<String,Object> globals = getGlobalsWithDestAndMessage();
- message = ruleService.executeStatelessRules( ruleBase, message , globals, null );
+ message = ruleService.executeStatefulRules( "JBossESBRules.drl", null, true, message, globals, null );
ArrayList<String> destinations = getDistinations( globals );
assertTrue( destinations.size() == 1 );
}
@@ -107,14 +148,11 @@
// process message again with a counter instance
objectList = new ObjectMapper().createObjectList(message, messagePathList);
- //message = ruleService.executeStatefulRules( "JBossESBPricingRulesStateful.drl", null, false, false, message, globals, objectList );
message = ruleService.continueStatefulRulesExecution( "JBossESBPricingRulesStateful.drl", true, message, globals, objectList );
Counter counter = (Counter) message.getBody().get("Counter");
- System.out.println(counter.getCounter());
assertEquals( 2 , counter.getCounter() );
-
}
/*
@@ -134,11 +172,38 @@
ArrayList<String> destinations = getDistinations( globals );
assertTrue( destinations.size() == 1 );
- // execute a second time. This should reuse the same session
message = ruleService.executeStatefulRules( ruleBase, true, message , globals, null );
- assertTrue( "Should have added a second destination to the existing global", destinations.size() == 2 );
+ assertTrue( destinations.size() == 2 );
}
+ /*
+ Commented out for the same reason as the previous test.
+ @Test
+ */
+ public void executeStatefulRulesCheckCached() throws RuleServiceException, LifecycleResourceException
+ {
+ ruleService.getCachedRuleBases().clear();
+ final String ruleAgentProperites = "RuleBaseHelper.properties";
+ Map<String,Object> globals = getGlobalsWithDest();
+ ruleService.executeStatefulRulesFromRuleAgent( ruleAgentProperites, message , globals, null );
+
+ Map<String, RuleAgent> ruleAgents = ruleService.getCachedRuleAgents();
+ assertEquals( 1, ruleAgents.size() );
+ RuleAgent ruleAgent = ruleAgents.get( ruleAgentProperites );
+ assertNotNull( ruleAgent );
+
+ RuleBase rBase = ruleAgent.getRuleBase();
+ assertEquals ( rBase, ruleService.getCachedRuleBases().get( ruleAgentProperites ) );
+
+ for ( int i = 0 ; i < 10 ; i++ )
+ ruleService.executeStatefulRulesFromRuleAgent( ruleAgentProperites, message , globals, null );
+
+ assertEquals( 1, ruleAgents.size() );
+ assertEquals( 1, ruleService.getCachedRuleBases().size() );
+ assertEquals ( rBase, ruleService.getCachedRuleBases().get( ruleAgentProperites ) );
+ }
+
+
// Test setup methods
@Before
@@ -171,10 +236,8 @@
private Map<String,Object> getGlobalsWithDestAndMessage()
{
- Map<String,Object> globals = new HashMap<String,Object>();
- ArrayList<String> destinations = new ArrayList<String>();
- globals.put("destinations", destinations );
- globals.put("message", message );
+ Map<String,Object> globals = getGlobalsWithDest();
+ globals.putAll( getGlobalsWithMessage( message ));
return globals;
}
More information about the jboss-svn-commits
mailing list