[jboss-svn-commits] JBL Code SVN: r15445 - in labs/jbossesb/trunk/product: services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 28 14:49:37 EDT 2007


Author: kevin.conner at jboss.com
Date: 2007-09-28 14:49:36 -0400 (Fri, 28 Sep 2007)
New Revision: 15445

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java
   labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java
Log:
Contextualised jboss rules rule bases: JBESB-704

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java	2007-09-28 18:43:40 UTC (rev 15444)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecyclePriorities.java	2007-09-28 18:49:36 UTC (rev 15445)
@@ -32,6 +32,11 @@
 public final class LifecyclePriorities
 {
     /**
+     * The rule base priority.
+     */
+    public static final int RULE_BASE_PRIORITY = 50000;
+    
+    /**
      * The courier priority.
      */
     public static final int COURIER_PRIORITY = 100000 ;

Modified: labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java	2007-09-28 18:43:40 UTC (rev 15444)
+++ labs/jbossesb/trunk/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.java	2007-09-28 18:49:36 UTC (rev 15445)
@@ -41,6 +41,10 @@
 import org.drools.rule.Package;
 import org.jboss.internal.soa.esb.services.routing.cbr.JBRulesCounter;
 import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.lifecycle.LifecyclePriorities;
+import org.jboss.soa.esb.lifecycle.LifecycleResource;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceFactory;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.services.routing.MessageRouterException;
 import org.jboss.soa.esb.services.routing.cbr.CBRException;
@@ -56,10 +60,27 @@
  */
 public class JBossRulesRouter implements ContentBasedRouter
 {
-	private static Map<String, RuleBase> ruleBases = new ConcurrentHashMap<String, RuleBase>();
-
-	private static Map<String, String> ruleSets = new ConcurrentHashMap<String, String>();
-
+        /**
+         * The lifecycle resource factory.
+         */
+        private static final LifecycleResourceFactory<Map<String, RuleBase>> lifecycleRuleBaseFactory = new LifecycleRuleBaseFactory() ;
+        /**
+         * Lifecycle couriers.
+         */
+        private static final LifecycleResource<Map<String, RuleBase>> lifecycleRuleBases =
+            new LifecycleResource<Map<String,RuleBase>>(lifecycleRuleBaseFactory,
+                    LifecyclePriorities.RULE_BASE_PRIORITY) ;
+        /**
+         * The lifecycle resource factory.
+         */
+        private static final LifecycleResourceFactory<Map<String, String>> lifecycleRuleSetFactory = new LifecycleRuleSetFactory() ;
+        /**
+         * Lifecycle couriers.
+         */
+        private static final LifecycleResource<Map<String, String>> lifecycleRuleSets =
+            new LifecycleResource<Map<String,String>>(lifecycleRuleSetFactory,
+                    LifecyclePriorities.RULE_BASE_PRIORITY) ;
+        
 	private static Logger logger = Logger.getLogger(JBossRulesRouter.class);
 	
 	private JBRulesCounter rulesCounter = null;
@@ -114,6 +135,7 @@
     		String newRuleSet = null;
     		boolean isRulesChanged = false;
     
+                final Map<String, String> ruleSets = lifecycleRuleSets.getLifecycleResource() ;
     		if (ruleReload)
     		{
     			String currentRuleSet = ruleSets.get(ruleSet);
@@ -124,6 +146,7 @@
     				isRulesChanged = true;
     			}
     		}
+    		final Map<String, RuleBase> ruleBases = lifecycleRuleBases.getLifecycleResource() ;
     		RuleBase ruleBase = ruleBases.get(ruleSet);
     		if (ruleBase == null || isRulesChanged)
     		{
@@ -158,6 +181,12 @@
     				"Outgoing Destinations: " + destinations);
             workingMemory.dispose();
             return destinations;
+        } catch (final LifecycleResourceException lre) {
+            if (rulesCounter != null) {
+                    long procTime = System.nanoTime() - startTime;
+                    rulesCounter.update(procTime, ruleSet, JBRulesCounter.RULES_FAILED);
+            }
+            throw new MessageRouterException("Could not load lifecycle data. " + lre.getMessage(), lre);
         } catch (IOException ioe) {
         	if (rulesCounter != null) {
         		long procTime = System.nanoTime() - startTime;
@@ -196,31 +225,43 @@
 		}
 		else
 		{
-			Reader rules = new InputStreamReader(inputStreamDrl);
-            PackageBuilderConfiguration pkgBuilderCfg = new PackageBuilderConfiguration();
-            //pkgBuilderCfg.setCompiler(PackageBuilderConfiguration.JANINO);
-            PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);
-			// this wil parse and compile in one step
-			if (ruleLanguage == null)
-			{
-				builder.addPackageFromDrl(rules);
-			}
-			else
-			{
-				logger.debug("Going to read the language: " + ruleLanguage);
-				InputStream inputStreamDsl = ClassUtil.getResourceAsStream("/" + ruleLanguage, JBossRulesRouter.class);
-				if (inputStreamDsl == null)
-				{
-					logger.error("Could not find ruleLanguage: " + rulesFile);
-				}
-				else
-				{
-					Reader dsl = new InputStreamReader(inputStreamDsl);
-					builder.addPackageFromDrl(rules, dsl);
-				}
-                inputStreamDsl.close();
-			}
-            inputStreamDrl.close();
+	            PackageBuilderConfiguration pkgBuilderCfg = new PackageBuilderConfiguration();
+	            //pkgBuilderCfg.setCompiler(PackageBuilderConfiguration.JANINO);
+	            PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);
+	            try
+	            {
+                        Reader rules = new InputStreamReader(inputStreamDrl);
+                        // this wil parse and compile in one step
+                        if (ruleLanguage == null)
+                        {
+                                builder.addPackageFromDrl(rules);
+                        }
+                        else
+                        {
+                                logger.debug("Going to read the language: " + ruleLanguage);
+                                InputStream inputStreamDsl = ClassUtil.getResourceAsStream("/" + ruleLanguage, JBossRulesRouter.class);
+                                if (inputStreamDsl == null)
+                                {
+                                        logger.error("Could not find ruleLanguage: " + rulesFile);
+                                }
+                                else
+                                {
+                                    try
+                                    {
+                                        Reader dsl = new InputStreamReader(inputStreamDsl);
+                                        builder.addPackageFromDrl(rules, dsl);
+                                    }
+                                    finally
+                                    {
+                                        safeClose(inputStreamDsl);
+                                    }
+                                }
+                        }
+	            }
+	            finally
+	            {
+	                safeClose(inputStreamDrl);
+	            }
 			// get the compiled package (which is serializable)
 			Package pkg = builder.getPackage();
 			// add the package to a rulebase (deploy the rule package).
@@ -251,28 +292,50 @@
 		}
 		else
 		{
-			String rules = getString(inputStreamDrl);
-            inputStreamDrl.close();
-			String language = "";
-			if (ruleLanguage != null)
-			{
-				logger.debug("Going to hash the language: " + ruleLanguage);
-				InputStream inputStreamDsl = ClassUtil.getResourceAsStream("/" + ruleLanguage, JBossRulesRouter.class);
-				if (inputStreamDsl == null)
-				{
-					logger.error("Could not find language: " + ruleLanguage);
-				}
-				else
-				{
-					language = getString(inputStreamDsl);
-                    inputStreamDsl.close();
-				}
-			}
-			return rules + language;
+		    final String rules ;
+		    try
+		    {
+                        rules = getString(inputStreamDrl);
+		    }
+		    finally
+		    {
+		        safeClose(inputStreamDrl);
+		    }
+                    String language = "";
+                    if (ruleLanguage != null)
+                    {
+                            logger.debug("Going to hash the language: " + ruleLanguage);
+                            InputStream inputStreamDsl = ClassUtil.getResourceAsStream("/" + ruleLanguage, JBossRulesRouter.class);
+                            if (inputStreamDsl == null)
+                            {
+                                    logger.error("Could not find language: " + ruleLanguage);
+                            }
+                            else
+                            {
+                                try
+                                {
+                                    language = getString(inputStreamDsl);
+                                }
+                                finally
+                                {
+                                    safeClose(inputStreamDsl);
+                                }
+                            }
+                    }
+                    return rules + language;
 		}
 
 	}
 
+	private static void safeClose(final InputStream is)
+	{
+	    try
+	    {
+	        is.close() ;
+	    }
+	    catch (final Throwable th) {} // ignore
+	}
+	
 	private static String getString (InputStream in) throws IOException
 	{
 		StringBuffer stringBuffer = new StringBuffer();
@@ -288,4 +351,68 @@
 		rulesCounter = new JBRulesCounter(configTree);
 		rulesCounter.registerMBean();
 	}
+        
+        /**
+         * The lifecycle resource factory for rule sets.
+         * @author kevin
+         */
+        public static class LifecycleRuleBaseFactory implements LifecycleResourceFactory<Map<String, RuleBase>>
+        {
+            /**
+             * 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, RuleBase> createLifecycleResource(final String lifecycleIdentity)
+                throws LifecycleResourceException
+            {
+                return new ConcurrentHashMap<String, RuleBase>() ;
+            }
+        
+            /**
+             * 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, RuleBase> resource,
+                final String lifecycleIdentity)
+                throws LifecycleResourceException
+            {
+            }
+        }
+	
+        /**
+         * The lifecycle resource factory for rule sets.
+         * @author kevin
+         */
+        public static class LifecycleRuleSetFactory implements LifecycleResourceFactory<Map<String, String>>
+        {
+            /**
+             * 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, String> createLifecycleResource(final String lifecycleIdentity)
+                throws LifecycleResourceException
+            {
+                return new ConcurrentHashMap<String, String>() ;
+            }
+        
+            /**
+             * 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, String> resource,
+                final String lifecycleIdentity)
+                throws LifecycleResourceException
+            {
+            }
+        }
 }




More information about the jboss-svn-commits mailing list