[jboss-svn-commits] JBL Code SVN: r20458 - in labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src: main/java/org/jboss/internal/soa/esb/services/rules and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jun 13 04:26:03 EDT 2008
Author: beve
Date: 2008-06-13 04:26:03 -0400 (Fri, 13 Jun 2008)
New Revision: 20458
Added:
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
Modified:
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.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/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/services/rules/RuleService.java
labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/resources/log4j.xml
Log:
Modified BusinessRuleProcessor to call RuleService and add a global Message object and not a global destination.
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java 2008-06-13 06:46:09 UTC (rev 20457)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java 2008-06-13 08:26:03 UTC (rev 20458)
@@ -21,7 +21,10 @@
*/
package org.jboss.internal.soa.esb.services.routing.cbr;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.log4j.Logger;
import org.jboss.internal.soa.esb.services.rules.DroolsRuleService;
@@ -149,25 +152,27 @@
boolean stateful = Boolean.valueOf( configTree.getAttribute( "stateful" ) );
boolean dispose = Boolean.valueOf( configTree.getAttribute( "dispose", "true" ) );
+ Map<String,Object> globals = new HashMap<String,Object>();
+ List<String> destinations = new ArrayList<String>();
+ globals.put( "destinations", destinations );
Message routeMessage;
if ( ruleSet.endsWith( ".xls" ) || ruleSet.endsWith( ".csv" ) )
{
if ( stateful )
- routeMessage = ruleService.executeStatefulRulesFromDecisionTable( ruleSet, ruleReload, dispose, message, objectList );
+ routeMessage = ruleService.executeStatefulRulesFromDecisionTable( ruleSet, ruleReload, dispose, message, globals, objectList );
else
- routeMessage = ruleService.executeStatelessRulesFromDecisionTable( ruleSet, ruleReload, message, objectList );
+ routeMessage = ruleService.executeStatelessRulesFromDecisionTable( ruleSet, ruleReload, message, globals, objectList );
}
else
{
if ( stateful )
- routeMessage = ruleService.executeStatefulRules( ruleSet, ruleLanguage, ruleReload, dispose, message, objectList );
+ routeMessage = ruleService.executeStatefulRules( ruleSet, ruleLanguage, ruleReload, dispose, message, globals, objectList );
else
- routeMessage = ruleService.executeStatelessRules( ruleSet, ruleLanguage, ruleReload, message, objectList );
+ routeMessage = ruleService.executeStatelessRules( ruleSet, ruleLanguage, ruleReload, message, globals, objectList );
}
- @SuppressWarnings("unchecked")
- List<String> destinations = (List<String>) routeMessage.getBody().get( "destinations" );
+ routeMessage.getBody().add( "destinations", destinations );
return destinations;
}
catch (final RuleServiceException e)
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-13 06:46:09 UTC (rev 20457)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java 2008-06-13 08:26:03 UTC (rev 20458)
@@ -26,6 +26,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.log4j.Logger;
@@ -106,13 +108,14 @@
final String dsl,
final boolean ruleReload,
Message message,
+ final Map<String,Object> globals,
final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
try {
RuleBase ruleBase = getRuleBaseForFileBasedRules(ruleSet, dsl, ruleReload);
- message = executeStatelessRules(ruleBase, message, objectList);
+ message = executeStatelessRules(ruleBase, message, globals, objectList);
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_SUCCEED );
@@ -143,13 +146,14 @@
final String decisionTable,
final boolean ruleReload,
Message message,
+ final Map<String,Object> globals,
final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
try {
RuleBase ruleBase = getRuleBaseForDecisionTable(decisionTable, ruleReload);
- message = executeStatelessRules(ruleBase, message, objectList);
+ message = executeStatelessRules(ruleBase, message, globals, objectList);
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_SUCCEED );
@@ -177,17 +181,18 @@
public Message executeStatelessRulesFromRuleAgent(
final String ruleAgentProperties,
Message message,
+ final Map<String,Object> globals,
final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
try {
DroolsRuleBaseHelper rbHelper = new DroolsRuleBaseHelper();
- RuleBase ruleBase = rbHelper .loadRuleBaseFromRuleAgent(ruleAgentProperties);
+ RuleBase ruleBase = rbHelper.loadRuleBaseFromRuleAgent(ruleAgentProperties);
final Map<String, RuleBase> ruleBases = lifecycleRuleBases.getLifecycleResource();
if (ruleBase != null) {
ruleBases.put(ruleAgentProperties, ruleBase);
- message = executeStatelessRules(ruleBase, message, objectList);
+ message = executeStatelessRules(ruleBase, message, globals, objectList);
updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_SUCCEED );
}
@@ -233,13 +238,14 @@
final boolean ruleReload,
final boolean dispose,
Message message,
+ final Map<String,Object> globals,
final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
try {
RuleBase ruleBase = getRuleBaseForFileBasedRules(ruleSet, dsl, ruleReload);
- message = executeStatefulRules(ruleBase, dispose, message, objectList);
+ message = executeStatefulRules(ruleBase, dispose, message, globals, objectList);
updateJBRulesCounter( startTime, ruleSet, JBRulesCounter.RULES_SUCCEED);
@@ -268,15 +274,19 @@
*
* @return Message with updated objects.
*/
- public Message executeStatefulRulesFromDecisionTable(String decisionTable,
- boolean ruleReload, boolean dispose, Message message,
- List<Object> objectList) throws RuleServiceException {
+ public Message executeStatefulRulesFromDecisionTable(
+ final String decisionTable,
+ final boolean ruleReload,
+ final boolean dispose,
+ Message message,
+ final Map<String,Object> globals,
+ final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
try {
RuleBase ruleBase = getRuleBaseForDecisionTable(decisionTable, ruleReload);
- message = executeStatefulRules(ruleBase, dispose, message, objectList);
+ message = executeStatefulRules(ruleBase, dispose, message, globals, objectList);
updateJBRulesCounter( startTime, decisionTable, JBRulesCounter.RULES_SUCCEED );
@@ -304,8 +314,11 @@
* @return Message with updated objects.
*/
public Message executeStatefulRulesFromRuleAgent(
- String ruleAgentProperties, boolean dispose, Message message,
- List<Object> objectList) throws RuleServiceException {
+ final String ruleAgentProperties,
+ final boolean dispose,
+ Message message,
+ final Map<String,Object> globals,
+ final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
try {
@@ -316,7 +329,7 @@
if (ruleBase != null) {
ruleBases.put(ruleAgentProperties, ruleBase);
- message = executeStatefulRules(ruleBase, dispose, message, objectList);
+ message = executeStatefulRules(ruleBase, dispose, message, globals, objectList);
updateJBRulesCounter( startTime, ruleAgentProperties, JBRulesCounter.RULES_SUCCEED );
}
@@ -355,6 +368,7 @@
final String rules,
final boolean dispose,
Message message,
+ Map<String,Object> globals,
final List<Object> objectList) throws RuleServiceException {
long startTime = System.nanoTime();
@@ -527,6 +541,8 @@
* @param objectList -
* a list with additional objects (typically pulled from the message)
* to be inserted into working memory
+ * @param globals -
+ * Map of globals variables that should be set in the working memory
*
* @return Message -
* with updated objects.
@@ -535,6 +551,7 @@
protected Message executeStatelessRules(
final RuleBase ruleBase,
final Message message,
+ final Map<String,Object> globals,
final List<Object> objectList) {
StatelessSession workingMemory = ruleBase.newStatelessSession();
@@ -544,15 +561,15 @@
// always add the message to the facts
facts.add(message);
- workingMemory.setGlobal(MESSAGE, message);
+ if ( globals != null )
+ {
+ Set<Entry<String, Object>> entrySet = globals.entrySet();
+ for ( Entry<String, Object> entry : entrySet )
+ workingMemory.setGlobal( entry.getKey(), entry.getValue() );
+ }
- List<String> destinations = new ArrayList<String>();
- workingMemory.setGlobal(DESTINATIONS, destinations);
-
workingMemory.execute(facts);
- message.getBody().add( DESTINATIONS, destinations );
-
return message;
}
@@ -565,6 +582,8 @@
* the rulebase to use
* @param message -
* Message that is updated with the results.
+ * @param globals -
+ * Map of globals variables that should be set in the working memory
* @param objectList -
* a list with additional objects (typically pulled from the message)
* to be inserted into working memory
@@ -575,31 +594,27 @@
final RuleBase ruleBase,
final boolean dispose,
final Message message,
- final List<Object> objectList) {
+ final Map<String,Object> globals,
+ final List<Object> objectList)
+ {
StatefulSession statefulSession = ruleBase.newStatefulSession();
- Map<String,Class> globals = getAllGlobals( ruleBase );
- if ( globals.containsKey( MESSAGE ) )
- statefulSession.setGlobal(MESSAGE, message);
+ if ( globals != null )
+ {
+ Set<Entry<String, Object>> entrySet = globals.entrySet();
+ for ( Entry<String, Object> entry : entrySet )
+ statefulSession.setGlobal( entry.getKey(), entry.getValue() );
+ }
statefulSession.insert( message );
- List<String> destinations = new ArrayList<String>();
- boolean useDestinations = globals.containsKey( DESTINATIONS );
- if ( useDestinations )
- statefulSession.setGlobal( DESTINATIONS, destinations );
-
insertObjectsIntoWorkingMemory( objectList, statefulSession );
statefulSession.fireAllRules();
- if ( useDestinations )
- message.getBody().add( DESTINATIONS, destinations );
-
- if ( dispose ) {
+ if ( dispose )
statefulSession.dispose();
- }
return message;
}
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java 2008-06-13 06:46:09 UTC (rev 20457)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/actions/BusinessRulesProcessor.java 2008-06-13 08:26:03 UTC (rev 20458)
@@ -27,25 +27,39 @@
*/
package org.jboss.soa.esb.actions;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.jboss.internal.soa.esb.services.rules.DroolsRuleService;
+import org.jboss.internal.soa.esb.services.rules.RuleServiceException;
+import org.jboss.internal.soa.esb.services.rules.RuleServiceFactory;
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.mapping.ObjectMappingException;
import org.jboss.soa.esb.services.registry.RegistryException;
import org.jboss.soa.esb.services.routing.MessageRouterException;
+import org.jboss.soa.esb.services.rules.RuleService;
+/**
+ * BusinessRulesProcessor
+ *
+ * @author John Doe
+ * @author <a href="mailto:dbevenius at redhat.com">Daniel Bevenius</a>
+ *
+ */
public class BusinessRulesProcessor extends ContentBasedRouter
{
+ private ConfigTree configTree;
+
public BusinessRulesProcessor(ConfigTree config) throws ConfigurationException, RegistryException, MessageRouterException
{
super(config);
+ this.configTree = config;
}
/**
* Inspect the content of the message using a rule set
- * Router the message to one or more destinations, using the ContentBasedRouter to figure out
- * to which destinations it is going to be routed too.
*
* @param message
* @return Message
@@ -53,16 +67,61 @@
*/
public Message process(Message message) throws ActionProcessingException
{
- try {
+ try
+ {
List<Object> objectList = _mapper.createObjectList(message, _messagePathList);
- _cbr.route(_ruleSet, _ruleLanguage, _ruleReload, message, objectList);
- } catch (ObjectMappingException ome) {
+ executeRulesService( message, objectList );
+ }
+ catch (ObjectMappingException ome)
+ {
throw new ActionProcessingException(ome.getMessage(), ome);
- } catch (MessageRouterException mre) {
+ }
+ catch (MessageRouterException mre)
+ {
throw new ActionProcessingException(mre.getMessage(), mre);
}
return message;
}
+
+ /**
+ *
+ * @param message
+ * @param objectList
+ * @throws MessageRouterException
+ */
+ private void executeRulesService( final Message message, final List<Object> objectList) throws MessageRouterException
+ {
+ try
+ {
+ RuleService ruleService = RuleServiceFactory.getRuleService( DroolsRuleService.class.getName() );
+ ruleService.setConfigTree( configTree );
+
+ boolean stateful = Boolean.valueOf( configTree.getAttribute( "stateful" ) );
+ boolean dispose = Boolean.valueOf( configTree.getAttribute( "dispose", "true" ) );
+
+ Map<String,Object> globals = new HashMap<String,Object>();
+ globals.put( "message", message );
+
+ if ( _ruleSet.endsWith( ".xls" ) || _ruleSet.endsWith( ".csv" ) )
+ {
+ if ( stateful )
+ ruleService.executeStatefulRulesFromDecisionTable( _ruleSet, _ruleReload, dispose, message, globals, objectList );
+ else
+ ruleService.executeStatelessRulesFromDecisionTable( _ruleSet, _ruleReload, message, globals, objectList );
+ }
+ else
+ {
+ if ( stateful )
+ ruleService.executeStatefulRules( _ruleSet, _ruleLanguage, _ruleReload, dispose, message, globals, objectList );
+ else
+ ruleService.executeStatelessRules( _ruleSet, _ruleLanguage, _ruleReload, message, globals, objectList );
+ }
+
+ }
+ catch (final RuleServiceException e)
+ {
+ throw new MessageRouterException(e.getMessage(), e);
+ }
+ }
-
}
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/services/rules/RuleService.java
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/services/rules/RuleService.java 2008-06-13 06:46:09 UTC (rev 20457)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/main/java/org/jboss/soa/esb/services/rules/RuleService.java 2008-06-13 08:26:03 UTC (rev 20458)
@@ -22,6 +22,7 @@
package org.jboss.soa.esb.services.rules;
import java.util.List;
+import java.util.Map;
import org.jboss.internal.soa.esb.services.rules.RuleServiceException;
import org.jboss.soa.esb.helpers.ConfigTree;
@@ -57,7 +58,7 @@
* @return Message with updated objects.
*/
public Message executeStatelessRules(String ruleSet, String dsl,
- boolean ruleReload, Message message, List<Object> objectList)
+ boolean ruleReload, Message message, Map<String,Object> globals, List<Object> objectList)
throws RuleServiceException;
/**
@@ -76,7 +77,7 @@
* @return Message with updated objects.
*/
public Message executeStatelessRulesFromDecisionTable(String decisionTable,
- boolean ruleReload, Message message, List<Object> objectList)
+ boolean ruleReload, Message message, Map<String,Object> globals, List<Object> objectList)
throws RuleServiceException;
/**
@@ -93,7 +94,7 @@
* @return Message with updated objects.
*/
public Message executeStatelessRulesFromRuleAgent(
- String ruleAgentProperties, Message message, List<Object> objectList)
+ String ruleAgentProperties, Message message, Map<String,Object> globals, List<Object> objectList)
throws RuleServiceException;
/**
@@ -117,7 +118,7 @@
* @return Message with updated objects.
*/
public Message executeStatefulRules(String ruleSet, String dsl,
- boolean ruleReload, boolean dispose, Message message,
+ boolean ruleReload, boolean dispose, Message message,Map<String,Object> globals,
List<Object> objectList) throws RuleServiceException;
/**
@@ -138,7 +139,7 @@
* @return Message with updated objects.
*/
public Message executeStatefulRulesFromDecisionTable(String decisionTable,
- boolean ruleReload, boolean dispose, Message message,
+ boolean ruleReload, boolean dispose, Message message, Map<String,Object> globals,
List<Object> objectList) throws RuleServiceException;
/**
@@ -157,7 +158,7 @@
* @return Message with updated objects.
*/
public Message executeStatefulRulesFromRuleAgent(
- String ruleAgentProperties, boolean dispose, Message message,
+ String ruleAgentProperties, boolean dispose, Message message,Map<String,Object> globals,
List<Object> objectList) throws RuleServiceException;
/**
@@ -176,7 +177,7 @@
* @return Message with updated objects.
*/
public Message continueStatefulRulesExecution(String rules,
- boolean dispose, Message message, List<Object> objectList)
+ boolean dispose, Message message,Map<String,Object> globals, List<Object> objectList)
throws RuleServiceException;
}
Added: 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 (rev 0)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleServiceUnitTest.java 2008-06-13 08:26:03 UTC (rev 20458)
@@ -0,0 +1,87 @@
+/*
+ * JBoss, Home of Professional Open Source Copyright 2006, JBoss Inc., and
+ * individual contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of individual
+ * contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.jboss.internal.soa.esb.services.rules;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.RuleBase;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.JUnit4TestAdapter;
+
+/**
+ * Unit test for {@link DroolsRuleService}
+ * <p/>
+ *
+ * @author <a href="mailto:dbevenius at redhat.com">Daniel Bevenius</a>
+ *
+ */
+public class DroolsRuleServiceUnitTest
+{
+ private DroolsRuleService ruleService = new DroolsRuleService();
+
+ private RuleBase ruleBase;
+ private Message message;
+
+ @Test
+ public void executeStatefulRules() throws RuleServiceException
+ {
+ Map<String,Object> globals = new HashMap<String,Object>();
+
+ ArrayList<String> destinations = new ArrayList<String>();
+ globals.put("destinations", destinations );
+ globals.put("message", message );
+
+ message = ruleService.executeStatefulRules( ruleBase, true, message , globals, null );
+ assertTrue( destinations.size() == 1 );
+ }
+
+ @Test
+ public void executeStatelessRules()
+ {
+ Map<String,Object> globals = new HashMap<String,Object>();
+ ArrayList<String> destinations = new ArrayList<String>();
+ globals.put("destinations", destinations );
+ globals.put("message", message );
+ message = ruleService.executeStatelessRules( ruleBase, message , globals, null );
+ assertTrue( destinations.size() == 1 );
+ }
+
+ @Before
+ public void setup() throws RuleServiceException
+ {
+ ruleBase = ruleService.getRuleBaseForFileBasedRules( "JBossESBRules.drl", null, true );
+ message = MessageFactory.getInstance().getMessage();
+ }
+
+ public static junit.framework.Test suite()
+ {
+ return new JUnit4TestAdapter( DroolsRuleServiceUnitTest.class );
+ }
+}
Modified: labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/resources/log4j.xml
===================================================================
--- labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/resources/log4j.xml 2008-06-13 06:46:09 UTC (rev 20457)
+++ labs/jbossesb/workspace/dbevenius/ruleservice/product/services/jbrules/src/test/resources/log4j.xml 2008-06-13 08:26:03 UTC (rev 20458)
@@ -46,8 +46,8 @@
<category name="org.jboss.soa.esb">
<priority value="ERROR"/>
</category>
- <category name="org.jboss.internal.soa.esb">
- <priority value="ERROR"/>
+ <category name="org.jboss.internal.soa.esb.services.rules">
+ <priority value="DEBUG"/>
</category>
<category name="org.apache">
<priority value="ERROR"/>
More information about the jboss-svn-commits
mailing list