[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