[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