[jboss-svn-commits] JBL Code SVN: r8731 - in labs/jbossesb/trunk: product/core/listeners/src/org/jboss/soa/esb/listeners product/core/listeners/src/org/jboss/soa/esb/listeners/message product/core/services/src/org/jboss/internal/soa/esb/services/routing/cbr product/core/services/src/org/jboss/soa/esb/services/routing/cbr product/core/services/tests/src/org/jboss/internal/soa/esb/services/routing/cbr product/core/services/tests/src/org/jboss/soa/esb/services/routing/cbr product/samples/quickstarts/simple_cbr qa/junit/src/org/jboss/soa/esb/listeners/message
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jan 5 20:40:00 EST 2007
Author: kurt.stam at jboss.com
Date: 2007-01-05 20:39:55 -0500 (Fri, 05 Jan 2007)
New Revision: 8731
Modified:
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/ListenerTagNames.java
labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrListener.java
labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java
labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRouter.java
labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java
labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java
labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/jbossesb.xml
labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/readme.txt
labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/message/CbrListenerTest.xml
Log:
JBESB-334 Reloading the rules if they have changed.
Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/ListenerTagNames.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/ListenerTagNames.java 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/ListenerTagNames.java 2007-01-06 01:39:55 UTC (rev 8731)
@@ -66,6 +66,7 @@
/** RuleSet reference (Filename) */
public static final String RULE_SET_TAG = "ruleSet";
public static final String RULE_LANGUAGE_TAG = "ruleLanguage";
+ public static final String RULE_RELOAD_TAG = "ruleReload";
/** Poller tagnames */
public static final String POLL_LATENCY_SECS_TAG = "pollLatencySeconds";
Modified: labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrListener.java
===================================================================
--- labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrListener.java 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/core/listeners/src/org/jboss/soa/esb/listeners/message/CbrListener.java 2007-01-06 01:39:55 UTC (rev 8731)
@@ -53,6 +53,7 @@
protected ContentBasedRouter _cbr;
protected String _ruleSet;
protected String _ruleLanguage;
+ protected boolean _ruleReload;
public CbrListener(ListenerManager controller, ConfigTree config) throws ConfigurationException
{
@@ -71,6 +72,10 @@
throw new ConfigurationException("Required attribute " + ListenerTagNames.RULE_SET_TAG + " not found.");
}
_ruleLanguage =_config.getAttribute(ListenerTagNames.RULE_LANGUAGE_TAG);
+ String ruleReload = _config.getAttribute(ListenerTagNames.RULE_RELOAD_TAG);
+ if (ruleReload!=null && "true".equals(ruleReload)) {
+ _ruleReload = true;
+ }
}
} // ________________________________
@@ -110,7 +115,7 @@
{
if (null!=message) {
_logger.log(Priority.DEBUG, "Sending message to the Content Based Router.");
- Collection<String> destinationServices = _cbr.route(_ruleSet, _ruleLanguage, message);
+ Collection<String> destinationServices = _cbr.route(_ruleSet, _ruleLanguage, _ruleReload, message);
if (Boolean.FALSE.equals(message.getProperties().getProperty(MessageRouter.DELIVER_MESSAGES))) {
message.getProperties().setProperty(MessageRouter.ROUTING_DESTINATION_SERVICE_LIST, destinationServices);
try {
Modified: labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java 2007-01-06 01:39:55 UTC (rev 8731)
@@ -21,6 +21,7 @@
*/
package org.jboss.internal.soa.esb.services.routing.cbr;
+import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
@@ -50,6 +51,7 @@
public class JBossRulesRouter extends ContentBasedRouter
{
private static Map<String,RuleBase> ruleBases=new ConcurrentHashMap<String,RuleBase>();
+ private static Map<String,String> ruleSets=new ConcurrentHashMap<String,String>();
private static Logger logger = Logger.getLogger(JBossRulesRouter.class);
/**
* Route the message, where the routing rules are supplied as part of
@@ -69,8 +71,8 @@
* @param ruleSet - Filename of the drl that will be used.
* @param message - Message that needs routing.
*/
- public List<String> route(String ruleSet, Message message) {
- return route(ruleSet, null, message);
+ public List<String> route(String ruleSet, boolean ruleReload, Message message) {
+ return route(ruleSet, null, ruleReload, message);
}
/**
* Route the message, where the routing rules are supplied as part of
@@ -83,15 +85,29 @@
* @param message - Message that needs routing.
*/
@SuppressWarnings("unchecked")
- public List<String> route(String ruleSet, String ruleLanguage, Message message)
+ public List<String> route(String ruleSet, String ruleLanguage, boolean ruleReload, Message message)
{
List<String> destinationServices = new ArrayList<String>();
try {
+ String newRuleSet=null;
+ boolean isRulesChanged=false;
+
+ if (ruleReload) {
+ String currentRuleSet = ruleSets.get(ruleSet);
+ newRuleSet = getRules(ruleSet, ruleLanguage);
+ if (currentRuleSet==null || !currentRuleSet.equals(newRuleSet)) {
+ isRulesChanged=true;
+ }
+ }
RuleBase ruleBase = ruleBases.get(ruleSet);
- if (ruleBase==null) {
+ if (ruleBase==null || isRulesChanged) {
logger.log(Priority.INFO, "Reading ruleSet from file=" + ruleSet);
ruleBase = readRuleBase(ruleSet, ruleLanguage);
ruleBases.put(ruleSet, ruleBase);
+ if (newRuleSet==null) {
+ newRuleSet = getRules(ruleSet, ruleLanguage);
+ }
+ ruleSets.put(ruleSet, newRuleSet);
}
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
logger.log(Priority.DEBUG, "Obtained message=" + message + " with ruleSet=" + ruleSet);
@@ -120,7 +136,7 @@
private static RuleBase readRuleBase(String rulesFile, String ruleLanguage) throws Exception
{
//read in the rules
- logger.info("Going to read the rule: " + rulesFile);
+ logger.debug("Going to read the rule: " + rulesFile);
InputStream inputStreamDrl = JBossRulesRouter.class.getResourceAsStream( "/" + rulesFile );
Reader rules = new InputStreamReader(inputStreamDrl);
PackageBuilder builder = new PackageBuilder();
@@ -128,7 +144,7 @@
if (ruleLanguage==null) {
builder.addPackageFromDrl(rules);
} else {
- logger.info("Going to read the language: " + ruleLanguage);
+ logger.debug("Going to read the language: " + ruleLanguage);
InputStream inputStreamDsl = JBossRulesRouter.class.getResourceAsStream( "/" + ruleLanguage );
Reader dsl = new InputStreamReader(inputStreamDsl);
builder.addPackageFromDrl(rules, dsl);
@@ -140,4 +156,32 @@
ruleBase.addPackage(pkg);
return ruleBase;
}
+
+ /**
+ * Reading the rules and dsl from files. Note that we may want to allow other ways to
+ * set the rule, but for now it's just files.
+ */
+ private static String getRules(String rulesFile, String ruleLanguage) throws Exception
+ {
+ logger.debug("Going to hash the rule: " + rulesFile);
+ InputStream inputStreamDrl = JBossRulesRouter.class.getResourceAsStream( "/" + rulesFile );
+ String rules = getString(inputStreamDrl);
+ String language = "";
+ if (ruleLanguage!=null) {
+ logger.debug("Going to hash the language: " + ruleLanguage);
+ InputStream inputStreamDsl = JBossRulesRouter.class.getResourceAsStream( "/" + ruleLanguage );
+ language = getString(inputStreamDsl);
+ }
+ return rules + language;
+ }
+
+ private static String getString(InputStream in) throws IOException
+ {
+ StringBuffer stringBuffer = new StringBuffer();
+ byte[] b = new byte[4096];
+ for (int i; (i = in.read(b)) != -1;) {
+ stringBuffer.append(new String(b, 0, i));
+ }
+ return stringBuffer.toString();
+ }
}
Modified: labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRouter.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRouter.java 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRouter.java 2007-01-06 01:39:55 UTC (rev 8731)
@@ -42,7 +42,7 @@
* @param message - Message that needs routing.
* @return
*/
- public abstract List<String> route(String ruleSet, String ruleLanguage, Message message);
+ public abstract List<String> route(String ruleSet, String ruleLanguage, boolean ruleReload, Message message);
/**
* Route a message using a certain ruleSet.
*
@@ -50,5 +50,5 @@
* @param message - Message that needs routing.
* @return
*/
- public abstract List<String> route(String ruleSet, Message message);
+ public abstract List<String> route(String ruleSet, boolean ruleReload, Message message);
}
Modified: labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.java 2007-01-06 01:39:55 UTC (rev 8731)
@@ -57,7 +57,7 @@
message.getAttachment().addItem(new String("TEST ATTACHMENT2"));
JBossRulesRouter jbossRulesRouter = new JBossRulesRouter();
- List<String> destinationServices = jbossRulesRouter.route("JBossESBRules.drl", message);
+ List<String> destinationServices = jbossRulesRouter.route("JBossESBRules.drl", false, message);
assertEquals(destinationServices.iterator().next(),"test_category:Serialized_ServiceDestination");
}
@@ -76,7 +76,7 @@
message.getAttachment().addItem(new String("TEST ATTACHMENT2"));
JBossRulesRouter jbossRulesRouter = new JBossRulesRouter();
- List<String> destinationServices = jbossRulesRouter.route("JBossESBRules.drl", message);
+ List<String> destinationServices = jbossRulesRouter.route("JBossESBRules.drl", false, message);
assertEquals(destinationServices.iterator().next(),"test_category:JBOSS_XMLDestination");
}
Modified: labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/core/services/tests/src/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.java 2007-01-06 01:39:55 UTC (rev 8731)
@@ -61,7 +61,7 @@
message.getProperties().setProperty(MessageRouter.DELIVER_MESSAGES, Boolean.FALSE);
ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter();
- List<String> destinationServices = cbr.route("JBossESBRules.drl",message);
+ List<String> destinationServices = cbr.route("JBossESBRules.drl",false,message);
assertEquals(destinationServices.iterator().next(),"test_category:Serialized_ServiceDestination");
} catch (MessageRouterException e) {
e.printStackTrace();
@@ -86,7 +86,7 @@
message.getProperties().setProperty(MessageRouter.DELIVER_MESSAGES, Boolean.FALSE);
ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter();
- List<String> destinationServices = cbr.route("JBossESBRules.drl",message);
+ List<String> destinationServices = cbr.route("JBossESBRules.drl",false,message);
assertEquals(destinationServices.iterator().next(),"test_category:JBOSS_XMLDestination");
} catch (MessageRouterException e) {
e.printStackTrace();
@@ -110,7 +110,7 @@
message.getProperties().setProperty(MessageRouter.DELIVER_MESSAGES, Boolean.FALSE);
ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter();
- List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",message);
+ List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message);
assertEquals(destinationServices.iterator().next(),"test_category:JBOSS_XML_XPath_Destination");
} catch (MessageRouterException e) {
e.printStackTrace();
@@ -128,7 +128,7 @@
message.getProperties().setProperty(MessageRouter.DELIVER_MESSAGES, Boolean.FALSE);
ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter();
- List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",message);
+ List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message);
assertEquals(destinationServices.iterator().next(),"test_category:JBOSS_XML_XPath_Dave_Destination");
} catch (MessageRouterException e) {
e.printStackTrace();
@@ -146,7 +146,7 @@
message.getProperties().setProperty(MessageRouter.DELIVER_MESSAGES, Boolean.FALSE);
ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter();
- List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",message);
+ List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message);
assertEquals(destinationServices.iterator().next(),"test_category:JBOSS_XML_XPath_GreaterThan_Destination");
} catch (MessageRouterException e) {
e.printStackTrace();
@@ -164,7 +164,7 @@
message.getProperties().setProperty(MessageRouter.DELIVER_MESSAGES, Boolean.FALSE);
ContentBasedRouter cbr = ContentBasedRouterFactory.getRouter();
- List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",message);
+ List<String> destinationServices = cbr.route("JBossESBRules-XPath.drl","XPathLanguage.dsl",false,message);
assertEquals(destinationServices.iterator().next(),"test_category:JBOSS_XML_XPath_LessThan_Destination");
} catch (MessageRouterException e) {
e.printStackTrace();
Modified: labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/jbossesb.xml
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/jbossesb.xml 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/jbossesb.xml 2007-01-06 01:39:55 UTC (rev 8731)
@@ -63,7 +63,8 @@
busidref="quickstartEsbChannel"
maxThreads="1">
<property name="ruleSet" value="MyESBRules-XPath.drl"/>
- <property name="ruleLanguage" value="XPathLanguage.dsl"/>
+ <property name="ruleLanguage" value="XPathLanguage.dsl"/>
+ <property name="ruleReload" value="true"/>
</jms-listener>
</listeners>
</service>
Modified: labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/readme.txt
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/readme.txt 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/product/samples/quickstarts/simple_cbr/readme.txt 2007-01-06 01:39:55 UTC (rev 8731)
@@ -12,7 +12,7 @@
queue/CBRExpressFreeShippingAlert queue
"ant receiveNormal" - in another command window, this process will wait for messages to hit the
queue/CBRNormalShippingAlert queue
-"ant runtest" - in another command window, this process will pick up the SampleOrder.xml and shot it into
+"ant runtest" - in another command window, this process will pick up the SampleOrder.xml and shoot it into
the queue/quickstart_simple_cbr_Request queue which is identified in the esb-config-gateway.xml
Use a text editor to change the "totalAmount" in the order above/below $50 and re-execute ant runtest to
Modified: labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/message/CbrListenerTest.xml
===================================================================
--- labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/message/CbrListenerTest.xml 2007-01-06 00:22:31 UTC (rev 8730)
+++ labs/jbossesb/trunk/qa/junit/src/org/jboss/soa/esb/listeners/message/CbrListenerTest.xml 2007-01-06 01:39:55 UTC (rev 8731)
@@ -1,5 +1,6 @@
<?xml version = "1.0" encoding = "UTF-8"?>
-<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd">
+<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.xsd"
+parameterReloadSecs="10">
<providers>
<jms-provider name="localhost"
@@ -27,7 +28,8 @@
<jms-listener name="XPathContentBasedRouter"
busidref="QueueA"
maxThreads="1">
- <property name="ruleSet" value="JBossESBRules.drl"/>
+ <property name="ruleSet" value="JBossESBRules.drl"/>
+ <property name="ruleReload" value="true"/>
</jms-listener>
</listeners>
</service>
More information about the jboss-svn-commits
mailing list