[jboss-svn-commits] JBL Code SVN: r16572 - in labs/jbossesb/workspace/jdelong/rs/product/services/jbrules: bin and 40 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 13 21:40:00 EST 2007
Author: jeffdelong
Date: 2007-11-13 21:40:00 -0500 (Tue, 13 Nov 2007)
New Revision: 16572
Added:
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.classpath
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.project
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRoutingRules.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRules.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules-XPath.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRulesNoMatch.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/deployment.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/jboss-esb.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/XPathLanguage.dsl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/cache/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/decisionTable/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/decisionTable/PolicyPricing.xls
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscount.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders2.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders3.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountWithCollections.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/acme.dsl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/approval.dslr
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/log4j.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/BusinessProcessorRoutingUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/BusinessProcessorUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter$LifecycleRuleBaseFactory.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter$LifecycleRuleSetFactory.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/Order.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService$LifecycleRuleBaseFactory.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService$LifecycleRuleSetFactory.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/RuleServiceException.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessor.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/ContentBasedRouter.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/ContentBasedWiretap.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/MessageFilter.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/routing/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/routing/cbr/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Approve.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Customer.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Driver.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/ListenerTagNames.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Order.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Policy.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Rejection.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/RuleService.class
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/brmsdeployedrules.properties
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/cache/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/insurancepolicy.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/package/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/package/org.jboss.soa.esb.services.rules.pkg
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/pricing.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-compiler-4.0.3.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-core-4.0.3.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-decisiontables-4.0.3.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-jsr94-4.0.3.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/mvel14-1.2.10.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/xstream-1.2.2.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceException.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/cache/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/decisionTable/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/decisionTable/PolicyPricing.xls
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscount.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders2.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders3.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountWithCollections.drl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/acme.dsl
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/approval.dslr
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/brmsdeployedrules.properties
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/insurancepolicy.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/pricing.drl
Removed:
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-compiler-4.0.2.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-core-4.0.2.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-decisiontables-4.0.2.jar
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-jsr94-4.0.2.jar
Modified:
labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.java
Log:
initial submission
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.classpath
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.classpath (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.classpath 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/test/resources"/>
+ <classpathentry kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" path="src/test/java"/>
+ <classpathentry kind="var" path="ESB_HOME/jbossesb-rosetta.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+ <classpathentry kind="var" path="ESB_HOME/test-util.jar"/>
+ <classpathentry kind="var" path="LOG4J"/>
+ <classpathentry kind="lib" path="lib/ext/antlr-runtime-3.0.jar"/>
+ <classpathentry kind="lib" path="lib/ext/core-3.2.3.v_686_R32x.jar"/>
+ <classpathentry kind="lib" path="lib/ext/janino-2.5.10.jar"/>
+ <classpathentry kind="lib" path="lib/ext/jsr94-1.1.jar"/>
+ <classpathentry kind="lib" path="lib/ext/jxl-2.4.2.jar"/>
+ <classpathentry kind="lib" path="lib/ext/xpp3_min-1.1.3.4.O.jar"/>
+ <classpathentry kind="lib" path="src/test/resources/ruleAgent/insurancepolicy.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/ext/drools-compiler-4.0.3.jar"/>
+ <classpathentry kind="lib" path="lib/ext/drools-core-4.0.3.jar"/>
+ <classpathentry kind="lib" path="lib/ext/drools-decisiontables-4.0.3.jar"/>
+ <classpathentry kind="lib" path="lib/ext/drools-jsr94-4.0.3.jar"/>
+ <classpathentry kind="lib" path="lib/ext/mvel14-1.2.10.jar"/>
+ <classpathentry kind="lib" path="lib/ext/xstream-1.2.2.jar"/>
+ <classpathentry kind="var" path="ESB_LIB/jbossts-common.jar"/>
+ <classpathentry kind="var" path="ESB_LIB/jbossall-client.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.project
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.project (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/.project 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>jbrules-rs</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRoutingRules.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRoutingRules.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRoutingRules.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,41 @@
+#created on: Oct 30, 2006
+package com.jboss.soa.esb.routing.cbr
+
+#list any import classes here.
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.internal.soa.esb.services.routing.cbr.Order
+
+#declare any global variables here
+global java.util.List destinations;
+
+
+rule "Pricing Rule - low quantity"
+
+ when
+ m : Message ()
+ order : Order( quantity < 10)
+ then
+ System.out.println("low volume");
+ #we can modify the object
+ order.setDiscount(0);
+ #demonstrate that we can add a new object to the message
+ m.getBody().add("DiscountObject","0%");
+ #set the routing destination
+ destinations.add("normal-shipping-destination");
+end
+
+rule "Prioing Rule - high quantity"
+
+ when
+ m : Message ()
+ order : Order( quantity >= 10)
+ then
+ System.out.println("high volume");
+ #we can modify the object
+ order.setDiscount(10);
+ #demonstrate that we can add a new object to the message
+ m.getBody().add("DiscountObject","10%");
+ #sets the routing destination
+ destinations.add("express-shipping-destination");
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRules.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRules.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBPricingRules.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,37 @@
+#created on: Oct 30, 2006
+package com.jboss.soa.esb.routing.cbr
+
+#list any import classes here.
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.internal.soa.esb.services.routing.cbr.Order
+
+#declare any global variables here
+global java.util.List destinations;
+
+
+rule "Pricing Rule - low quantity"
+
+ when
+ m : Message ()
+ order : Order( quantity < 10)
+ then
+ System.out.println("low volume");
+ #we can modify the object
+ order.setDiscount(0);
+ #demonstrate that we can add a new object to the message
+ m.getBody().add("DiscountObject","0%");
+end
+
+rule "Prioing Rule - high quantity"
+
+ when
+ m : Message ()
+ order : Order( quantity >= 10)
+ then
+ System.out.println("high volume");
+ #we can modify the object
+ order.setDiscount(10);
+ #demonstrate that we can add a new object to the message
+ m.getBody().add("DiscountObject","10%");
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules-XPath.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules-XPath.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules-XPath.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,47 @@
+#created on: Nov 8, 2006
+package com.jboss.soa.esb.routing.cbr
+
+#list any import classes here.
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageType;
+
+expander XPathLanguage.dsl
+
+#declare any global variables here
+global java.util.List destinations;
+
+rule "Routing Rule using XPATH match"
+
+ when
+ xpathMatch "/jbossesb"
+ then
+ Log : "XPath Matched";
+ Destination : "XML_XPath_Destination";
+end
+
+rule "Routing Rule using XPATH equals"
+
+ when
+ xpathEquals "/Dave", "rocks"
+ then
+ Log : "XPath Equals";
+ Destination : "XML_XPath_Dave_Destination";
+end
+
+rule "Routing Rule using XPATH greater than"
+
+ when
+ xpathGreaterThan "/price", "1.00"
+ then
+ Log : "XPath Greater Then";
+ Destination : "XML_XPath_GreaterThan_Destination";
+end
+
+rule "Routing Rule using XPATH less than"
+
+ when
+ xpathLessThan "/price", "1.00"
+ then
+ Log : "XPath Less Then";
+ Destination : "XML_XPath_LessThan_Destination";
+end
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRules.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,29 @@
+#created on: Oct 30, 2006
+package com.jboss.soa.esb.routing.cbr
+
+#list any import classes here.
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageType;
+
+#declare any global variables here
+global java.util.List destinations;
+
+
+rule "Routing Rule - Serialized based message"
+
+ when
+ Message( type == MessageType.JAVA_SERIALIZED)
+ then
+ System.out.println("Serialized");
+ destinations.add("serialized-destination");
+
+end
+
+rule "Routing Rule - XML based message"
+
+ when
+ Message( type == MessageType.JBOSS_XML)
+ then
+ System.out.println("JBoss_XML");
+ destinations.add("xml-destination");
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRulesNoMatch.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRulesNoMatch.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/JBossESBRulesNoMatch.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,29 @@
+#created on: Oct 30, 2006
+package com.jboss.soa.esb.routing.cbr
+
+#list any import classes here.
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageType;
+
+#declare any global variables here
+global java.util.List destinations;
+
+
+rule "Routing Rule - Serialized based message"
+
+ when
+ Message( type == "MyType")
+ then
+ System.out.println("MyType");
+ destinations.add("mytype-destination");
+
+end
+
+rule "Routing Rule - XML based message"
+
+ when
+ Message( type == MessageType.JBOSS_XML)
+ then
+ System.out.println("JBoss_XML");
+ destinations.add("xml-destination");
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/deployment.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/deployment.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/deployment.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jbossesb-deployment>
+ <depends>jboss.esb:deployment=jbossesb.esb</depends>
+</jbossesb-deployment>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/jboss-esb.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/jboss-esb.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/META-INF/jboss-esb.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +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.1.xsd" parameterReloadSecs="5">
+ <!--
+ jbossesb internal rule based services
+ -->
+</jbossesb>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/XPathLanguage.dsl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/XPathLanguage.dsl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/XPathLanguage.dsl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,7 @@
+#JBossESB Content Based Routing using XPath DSL
+[when]xpathMatch "{xpath}"=msg : Message( type == MessageType.JBOSS_XML ) and eval( org.jboss.internal.soa.esb.services.routing.cbr.DslHelper.xmlContentMatches(msg, "{xpath}") )
+[when]xpathEquals "{xpath}", "{value}"=msg : Message( type == MessageType.JBOSS_XML ) and eval( org.jboss.internal.soa.esb.services.routing.cbr.DslHelper.xmlContentEquals(msg, "{xpath}", "{value}") )
+[when]xpathGreaterThan "{xpath}", "{value}"=msg : Message( type == MessageType.JBOSS_XML ) and eval( org.jboss.internal.soa.esb.services.routing.cbr.DslHelper.xmlContentGreaterThan(msg, "{xpath}", "{value}") )
+[when]xpathLessThan "{xpath}", "{value}"=msg : Message( type == MessageType.JBOSS_XML ) and eval( org.jboss.internal.soa.esb.services.routing.cbr.DslHelper.xmlContentLessThan(msg, "{xpath}", "{value}") )
+[then]Log : "{message}"=System.out.println("{message}");
+[then]Destination : "{message}"=destinations.add("{message}");
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/decisionTable/PolicyPricing.xls
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/decisionTable/PolicyPricing.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscount.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscount.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscount.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,34 @@
+#created on: Oct 23, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+rule "Pricing Rule - low quantity"
+
+ when
+ order : Order( quantity < 10)
+ then
+ System.out.println("low volume");
+ #we can modify the object
+ order.setDiscount(0);
+ #demonstrate that we can add a new object to the message
+ message.getBody().add("DiscountObject"+ order.getOrderId(),"0%");
+
+end
+
+rule "Prioing Rule - high quantity"
+
+ when
+ order : Order( quantity >= 10)
+ then
+ System.out.println("high volume");
+ #we can modify the object
+ order.setDiscount(10);
+ #demonstrate that we can add a new object to the message
+ message.getBody().add("DiscountObject"+order.getOrderId(),"10%");
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,28 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Customer;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+
+rule "Apply 10% discount if totalPrice of all orders is over 100"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer()
+ $i : Number(intValue >= 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+ then
+ $c.setDiscount( 10 );
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i );
+ message.getBody().add("Customer", $c);
+ System.out.println( "Message has a Customer " + message.getBody().get("Customer").toString() );
+end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders2.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders2.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders2.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,69 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Customer;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+
+rule "Apply 10% discount if totalPrice of all orders is over 1000"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer(discount == 0)
+ $o : Order(customer == $c, discount == 0)
+ $i : Number(intValue >= 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+
+ then
+ #$c.setDiscount(10);
+ $o.setDiscount(10);
+ System.out.println("set discount on order " + $o.getOrderId());
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i + " and a discount" );
+ #message.getBody().add("Customer", $c);
+ #System.out.println( "Message has a Customer " + message.getBody().get("Customer").toString() );
+ # System.out.println( "Message has a Customer " + message.getBody().get("CustomerWithDiscount").toString() );
+ #update ($c);
+end
+
+rule "Apply -10% discount if totalPrice of all orders is less than 1000"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer(discount == 0)
+ $o : Order(customer == $c, discount == 0)
+ $i : Number(intValue < 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+
+ then
+ #System.out.println("The totalOrder value for order: " + $o.getOrderId() + " is: " + $o.getTotalPrice());
+ $o.setDiscount(-10);
+ #$c.setDiscount(10);
+ System.out.println("set negative discount on order " + $o.getOrderId());
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i + " and no discount" );
+ # message.getBody().add("CustomerWithDiscount", $c);
+ # message.getBody().add("Customer", $c);
+ #System.out.println( "Message has a Customer " + message.getBody().get("Customer").toString() );
+ # System.out.println( "Message has a Customer " + message.getBody().get("CustomerWithDiscount").toString() );
+ # update ($o);
+end
+
+#rule "apply discount to order"
+# no-loop true
+# when
+# $c : Customer(discount > 0)
+# $o : Order(discount == 0)
+# then
+# $o.setDiscount($c.getDiscount());
+# System.out.println("set discount on order " + $o.getOrderId());
+# update ($o);
+#end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders3.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders3.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountOnMultipleOrders3.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,54 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Customer;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+
+rule "Apply 10% discount if totalPrice of all orders is over 1000"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer()
+ $i : Number(intValue >= 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+ then
+ $c.setDiscount(10);
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i + " and a discount" );
+
+end
+
+rule "Retract order if totalPrice of all orders is less than 1000"
+ no-loop true
+ salience 0
+ when
+ $c : Customer(discount == 0)
+ $o : Order(customer == $c, discount == 0)
+ $i : Number(intValue < 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+
+ then
+ retract($0):
+end
+
+rule "apply discount to order"
+ no-loop true
+ salience -50
+ when
+ $c : Customer(discount > 0)
+ $o : Order(customer == $c, discount == 0)
+ then
+ $o.setDiscount($c.getDiscount());
+ System.out.println("set discount on order " + $o.getOrderId());
+ update ($o);
+end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountWithCollections.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountWithCollections.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/drl/OrderDiscountWithCollections.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,62 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+rule "Pricing Rule - create array for results"
+ # we use an array because it make the JUnit test easier to implement
+ # since we can control which order is in which position of the array
+ # for comparison purposes.
+ salience 20
+ when
+ orderCount : Integer() from accumulate( Order(),
+ init( int x = 0; ),
+ action( x++; ),
+ result( new Integer(x) ) );
+ then
+ System.out.println("the number of inserted orders is: " + orderCount);
+ insert (new Order[orderCount]);
+end
+
+rule "Pricing Rule - low quantity"
+
+ when
+ updatedOrders : Order[]()
+ order : Order( quantity < 10)
+ then
+ System.out.println("low volume");
+ # we can modify the object
+ order.setDiscount(0);
+ # we can add a new object to the message
+ message.getBody().add("DiscountObject"+ order.getOrderId(),"0%");
+ updatedOrders[order.getOrderId() - 1] = order;
+end
+
+rule "Prioing Rule - high quantity"
+
+ when
+ updatedOrders : Order[]()
+ order : Order( quantity >= 10)
+ then
+ System.out.println("high volume");
+ # we can modify the object
+ order.setDiscount(10);
+ # we can add a new object to the message
+ message.getBody().add("DiscountObject"+order.getOrderId(),"10%");
+ updatedOrders[order.getOrderId() - 1] = order;
+end
+
+rule "Pricing Rule - add array to message"
+ salience -20
+ when
+ updatedOrders : Order[]()
+ then
+ message.getBody().add("UpdatedOrders", updatedOrders);
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/acme.dsl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/acme.dsl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/acme.dsl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,14 @@
+[condition][$driver]There is a Driver=$driver : Driver()
+[condition][$driver]- age less than {age} years old=age < {age}
+[condition][$driver]- age greater than {age} years old=age > {age}
+[condition][$driver]- has had more than {number} prior claims=priorClaims > {number}
+[condition][$driver]- has a location risk profile of '{risk}'=locationRiskProfile == "{risk}"
+[condition][$driver]- age is at least {age}=age >= {age}
+[condition][$driver]- age is between {lower} and {upper} years old=age >= {lower}, age <= {upper}
+[condition][$driver]- has had exactly {number} prior claims=priorClaims == {number}
+[condition][]Policy has a driver=Policy(driver == $driver)
+[condition][]Policy type is '{type}'=Policy(type == "{type}")
+[consequence][]Reject Policy with explanation : '{reason}'=message.getBody().add("Rejection", new Rejection("{reason}"));
+[condition][]Policy has not been rejected=not Rejection()
+[consequence][]Approve Policy with the reason : '{reason}'=message.getBody().add("Approve", new Approve("{reason}"));
+[consequence][]logRule=System.out.println("the rule that executed is: " + drools.getRule());
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/approval.dslr
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/approval.dslr (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/dsl/approval.dslr 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,110 @@
+#created on: Oct 23, 2007
+package org.jboss.soa.esb.services.rules
+
+expander acme.dsl
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Driver;
+import org.jboss.soa.esb.services.rules.Policy;
+import org.jboss.soa.esb.services.rules.Rejection;
+import org.jboss.soa.esb.services.rules.Approve;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+#
+# These rules are mostly "negative" in the sense that
+# a driver has to not be rejected. There is
+# one rule that allows immediate approval however.
+#
+
+rule "Driver has had too many accidents"
+ when
+ There is a Driver
+ - has had more than 3 prior claims
+ then
+ Reject Policy with explanation : 'Too many accidents'
+ logRule
+
+end
+
+rule "Driver is underage"
+ when
+ There is a Driver
+ - age less than 18 years old
+ then
+ Reject Policy with explanation : 'Driver is underage. Try another insurer'
+ logRule
+end
+
+rule "Driver is in marginal age"
+ when
+ There is a Driver
+ - age is between 18 and 24 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+ then
+ Reject Policy with explanation : 'No accidents allowed if in marginal age group'
+ logRule
+end
+
+rule "Driver in unsafe area for marginal age"
+ when
+ Policy type is 'COMPREHENSIVE'
+ There is a Driver
+ - age less than 25 years old
+ - has a location risk profile of 'HIGH'
+ then
+ Reject Policy with explanation : 'Marginal age driver in high risk area'
+ logRule
+end
+
+rule "Driver in unsafe area with priors"
+ when
+ There is a Driver
+ - has a location risk profile of 'MED'
+ - age less than 25 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+
+ then
+ Reject Policy with explanation : 'Driver in that area is too risky - given past accidents and age.'
+ logRule
+end
+
+rule "Driver unsafe for third party"
+ when
+ Policy type is 'THIRD_PARTY'
+ There is a Driver
+ - has had more than 2 prior claims
+ then
+ Reject Policy with explanation : 'Too many priors for third party'
+ logRule
+
+end
+
+rule "Driver in bad area for theft"
+ when
+ Policy type is 'FIRE_THEFT'
+ There is a Driver
+ - has a location risk profile of 'HIGH'
+ then
+ Reject Policy with explanation : 'Unsafe area for theft'
+ logRule
+end
+
+rule "Quick approval - safe driver, any policy type"
+ when
+
+ There is a Driver
+ - age is at least 30
+ - has had exactly 0 prior claims
+ Policy has a driver
+ Policy has not been rejected
+
+ then
+ Approve Policy with the reason : 'Driver is safe and mature.'
+ logRule
+end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/log4j.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/log4j.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/log4j.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!-- -->
+<!-- Log4j Configuration -->
+<!-- -->
+<!-- ===================================================================== -->
+
+<!-- $Id: log4j.xml,v 1.26.2.5 2005/09/15 09:31:02 dimitris Exp $ -->
+
+<!--
+ | For more configuration infromation and examples see the Jakarta Log4j
+ | owebsite: http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+ <!-- ============================== -->
+ <!-- Append messages to the console -->
+ <!-- ============================== -->
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ <param name="Target" value="System.out"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t][%c{1}] %m%n"/>
+ </layout>
+ </appender>
+
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+
+ <category name="org.jbpm">
+ <priority value="INFO"/>
+ </category>
+ <category name="org.hibernate">
+ <priority value="ERROR"/>
+ </category>
+ <category name="org.jboss">
+ <priority value="WARN"/>
+ </category>
+ <category name="org.jboss.soa.esb">
+ <priority value="ERROR"/>
+ </category>
+ <category name="org.jboss.internal.soa.esb">
+ <priority value="ERROR"/>
+ </category>
+ <category name="org.apache">
+ <priority value="ERROR"/>
+ </category>
+ <category name="org.jboss.soa.esb.services.jbpm">
+ <priority value="DEBUG"/>
+ </category>
+ <!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <appender-ref ref="CONSOLE"/>
+ </root>
+
+</log4j:configuration>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedRouterUnitTest.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,23 @@
+<testActions>
+ <action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="WrongDestinion"
+ ruleSet="JBossESBRules.drl"
+ >
+ <route-to destination-name="serialized" service-category="test" service-name="java" />
+ <route-to destination-name="xml" service-category="test" service-name="xml" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="Correct"
+ ruleSet="JBossESBRules.drl"
+ >
+ <route-to destination-name="serialized-destination" service-category="test" service-name="java" />
+ <route-to destination-name="xml-destination" service-category="test" service-name="xml" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="MyType"
+ ruleSet="JBossESBRulesNoMatch.drl"
+ >
+ <route-to destination-name="mytype-destination" service-category="test" service-name="mytype" />
+ <route-to destination-name="xml-destination" service-category="test" service-name="xml" />
+ </action>
+
+</testActions>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/ContentBasedWiretapUnitTest.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,23 @@
+<testActions>
+ <action class="org.jboss.soa.esb.actions.ContentBasedWiretap" name="WrongDestinion"
+ ruleSet="JBossESBRules.drl"
+ >
+ <route-to destination-name="serialized" service-category="test" service-name="java" />
+ <route-to destination-name="xml" service-category="test" service-name="xml" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.ContentBasedWiretap" name="Correct"
+ ruleSet="JBossESBRules.drl"
+ >
+ <route-to destination-name="serialized-destination" service-category="test" service-name="java" />
+ <route-to destination-name="xml-destination" service-category="test" service-name="xml" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.ContentBasedWiretap" name="MyType"
+ ruleSet="JBossESBRulesNoMatch.drl"
+ >
+ <route-to destination-name="mytype-destination" service-category="test" service-name="mytype" />
+ <route-to destination-name="xml-destination" service-category="test" service-name="xml" />
+ </action>
+
+</testActions>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/jbrules/actions/MessageFilterUnitTest.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,23 @@
+<testActions>
+ <action class="org.jboss.soa.esb.actions.MessageFilter" name="WrongDestinion"
+ ruleSet="JBossESBRules.drl"
+ >
+ <route-to destination-name="serialized" service-category="test" service-name="java" />
+ <route-to destination-name="xml" service-category="test" service-name="xml" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.MessageFilter" name="Correct"
+ ruleSet="JBossESBRules.drl"
+ >
+ <route-to destination-name="serialized-destination" service-category="test" service-name="java" />
+ <route-to destination-name="xml-destination" service-category="test" service-name="xml" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.MessageFilter" name="MyType"
+ ruleSet="JBossESBRulesNoMatch.drl"
+ >
+ <route-to destination-name="mytype-destination" service-category="test" service-name="mytype" />
+ <route-to destination-name="xml-destination" service-category="test" service-name="xml" />
+ </action>
+
+</testActions>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/BusinessProcessorRoutingUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/BusinessProcessorRoutingUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/BusinessProcessorUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/BusinessProcessorUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/DslHelper.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter$LifecycleRuleBaseFactory.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter$LifecycleRuleBaseFactory.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter$LifecycleRuleSetFactory.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter$LifecycleRuleSetFactory.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouter.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/JBossRulesRouterUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/Order.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/routing/cbr/Order.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService$LifecycleRuleBaseFactory.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService$LifecycleRuleBaseFactory.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService$LifecycleRuleSetFactory.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService$LifecycleRuleSetFactory.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/RuleServiceException.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/RuleServiceException.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessor.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessor.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,124 @@
+<testActions>
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountRuleService"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false" >
+
+ <object-path esb="body.Order" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountRuleServiceStateful"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Order" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountMultipleRuleService"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false" >
+
+ <object-path esb="body.Order1" />
+ <object-path esb="body.Order2" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountMultipleRuleServiceStateful"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Order1" />
+ <object-path esb="body.Order2" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountCollectionsRuleService"
+ ruleSet="drl/OrderDiscountWithCollections.drl"
+ ruleReload="false" >
+
+ <object-path esb="body.Orders" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountCollectionsRuleServiceStateful"
+ ruleSet="drl/OrderDiscountWithCollections.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Orders" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyPricingRuleService"
+ decisionTable="decisionTable/PolicyPricing.xls"
+ ruleReload="false" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyPricingRuleServiceStateful"
+ decisionTable="decisionTable/PolicyPricing.xls"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyApprovalRuleService"
+ ruleSet="dsl/approval.dslr"
+ ruleLanguage="dsl/acme.dsl"
+ ruleReload="false" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyApprovalRuleServiceStateful"
+ ruleSet="dsl/approval.dslr"
+ ruleLanguage="dsl/acme.dsl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="RuleAgentPolicyService"
+ ruleAgentProperties="ruleAgent/brmsdeployedrules.properties"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="RuleAgentPolicyServiceStateful"
+ ruleAgentProperties="ruleAgent/brmsdeployedrules.properties"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountServiceStatefulContinuation"
+ ruleSet="drl/OrderDiscountOnMultipleOrders.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Customer" />
+ <object-path esb="body.Order" />
+ </action>
+
+
+</testActions>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/ContentBasedRouter.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/ContentBasedRouter.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/ContentBasedWiretap.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/ContentBasedWiretap.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/MessageFilter.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/actions/MessageFilter.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/routing/cbr/ContentBasedRoutingUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Approve.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Approve.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Customer.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Customer.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Driver.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Driver.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/ListenerTagNames.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/ListenerTagNames.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Order.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Order.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Policy.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Policy.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Rejection.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/Rejection.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/RuleService.class
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/org/jboss/soa/esb/services/rules/RuleService.class
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/brmsdeployedrules.properties
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/brmsdeployedrules.properties (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/brmsdeployedrules.properties 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,11 @@
+newInstance=true
+
+file=/shared/workspace/ruleservice/product/services/jbrules/src/test/resources/ruleAgent/package/org.jboss.soa.esb.services.rules.pkg
+#dir=/shared/workspace/ruleservice/product/services/jbrules/src/test/resources/ruleAgent/package
+
+
+#url=http://localhost:8080/drools-jbrms/org.drools.brms.JBRMS/package/org.jboss.soa.esb.services.rules/LATEST
+#localCacheDir=/shared/workspace/ruleservice/product/services/jbrules/src/test/resources/ruleAgent/cache
+poll=30
+
+name=insuranceconfig
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/insurancepolicy.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/insurancepolicy.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/package/org.jboss.soa.esb.services.rules.pkg
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/package/org.jboss.soa.esb.services.rules.pkg
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/pricing.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/pricing.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/bin/ruleAgent/pricing.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,63 @@
+#created on: Aug 23, 2006
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Driver;
+import org.jboss.soa.esb.services.rules.Policy;
+
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+rule "Safe Youth"
+
+ when
+ #conditions
+ Driver(age >= 18, age <= 24, locationRiskProfile == "LOW", priorClaims == 0)
+ policy: Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(450);
+ System.out.println("Safe Youth - pay 450");
+
+end
+
+rule "Risky Youth"
+
+ when
+ #conditions
+ Driver(age >= 18, age <= 24, locationRiskProfile == "LOW", priorClaims >= 1)
+ policy : Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(700);
+ System.out.println("Risky Youth - pay 700");
+
+end
+
+rule "Safe Adult"
+
+ when
+ #conditions
+ Driver(age > 24, locationRiskProfile == "LOW", priorClaims == 0)
+ policy: Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(120);
+ System.out.println("Safe adult - pay 120");
+
+end
+
+rule "Risky Adult"
+
+ when
+ #conditions
+ Driver(age > 24, locationRiskProfile == "LOW", priorClaims >= 1)
+ policy: Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(300);
+ System.out.println("Risky adult - pay 300");
+
+end
\ No newline at end of file
Deleted: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-compiler-4.0.2.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-compiler-4.0.3.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-compiler-4.0.3.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-core-4.0.2.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-core-4.0.3.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-core-4.0.3.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-decisiontables-4.0.2.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-decisiontables-4.0.3.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-decisiontables-4.0.3.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-jsr94-4.0.2.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-jsr94-4.0.3.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/drools-jsr94-4.0.3.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/mvel14-1.2.10.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/mvel14-1.2.10.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/xstream-1.2.2.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/lib/ext/xstream-1.2.2.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.java 2007-11-13 20:55:47 UTC (rev 16571)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/routing/cbr/JBRulesCounter.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -256,7 +256,7 @@
/**
* Register this MBean with JBoss.
*/
- protected void registerMBean() {
+ public void registerMBean() {
MBeanServer mbeanServer = null;
try {
mbeanServer = MBeanServerLocator.locateJBoss();
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleBaseHelper.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,225 @@
+/*
+ * 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 java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+
+import org.apache.log4j.Logger;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.agent.RuleAgent;
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.decisiontable.InputType;
+import org.drools.decisiontable.SpreadsheetCompiler;
+import org.drools.rule.Package;
+import org.jboss.soa.esb.util.ClassUtil;
+
+/**
+ * A helper class, it returns rulebases based on various methods of creating them
+ *
+ * @author jdelong at redhat.com
+ *
+ */
+public class DroolsRuleBaseHelper {
+
+ private static Logger logger = Logger.getLogger(DroolsRuleBaseHelper.class);
+
+ /**
+ * Creates a rulebase using rules and dsl from files. Note the dsl may be null.
+ */
+ public RuleBase createRuleBaseFromRuleFiles(String ruleFile, String dsl)
+ throws DroolsParserException, IOException, RuleServiceException {
+ // read in the rules
+ logger.debug("Going to create a rulebase from the ruleFile: "
+ + ruleFile);
+ InputStream rulesInputStream = getRulesInputStream(ruleFile);
+
+ if (rulesInputStream == null) {
+ logger.error("Could not find ruleFile: " + ruleFile);
+ return null;
+ } else {
+ Reader ruleReader = getRulesReader(rulesInputStream);
+
+ PackageBuilderConfiguration pkgBuilderCfg = new PackageBuilderConfiguration();
+ //pkgBuilderCfg.setCompiler(PackageBuilderConfiguration.JANINO);
+ PackageBuilder builder = new PackageBuilder(pkgBuilderCfg);
+ try {
+ if (dsl == null) {
+ builder.addPackageFromDrl(ruleReader);
+ } else {
+ logger.debug("Going to read the dsl: " + dsl);
+ InputStream dslInputStream = getRulesInputStream(dsl);
+ Reader dslReader = getRulesReader(dslInputStream);
+ if (dslReader == null) {
+ logger.error("Could not find dsl: " + ruleFile);
+ } else {
+ try {
+ builder.addPackageFromDrl(ruleReader, dslReader);
+ } finally {
+ safeClose(dslInputStream);
+ }
+ }
+ }
+ } finally {
+ safeClose(rulesInputStream);
+ }
+
+ // get the compiled package (which is serializable)
+ Package pkg = builder.getPackage();
+ // add the package to a rulebase
+ try {
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+ return ruleBase;
+ } catch (Exception ex) {
+ throw new RuleServiceException(ex.getMessage(), ex);
+ }
+ }
+ }
+
+ /**
+ * Reading the rules and dsl from files and returning as a string
+ * to compare them for changes. Note the dsl may be null.
+ */
+ public String getRulesAsString(String ruleFile, String dsl)
+ throws IOException {
+ logger.debug("Going to hash the rule: " + ruleFile);
+ InputStream rulesInputStream = getRulesInputStream(ruleFile);
+ if (rulesInputStream == null) {
+ logger.error("Could not find ruleFile: " + ruleFile);
+ return null;
+ } else {
+ final String rules;
+ try {
+ rules = getString(rulesInputStream);
+ } finally {
+ safeClose(rulesInputStream);
+ }
+ String language = "";
+ if (dsl != null) {
+ logger.debug("Going to hash the language: " + dsl);
+ InputStream dslInputStream = getRulesInputStream(dsl);
+ if (dslInputStream == null) {
+ logger.error("Could not find language: " + dsl);
+ } else {
+ try {
+ language = getString(dslInputStream);
+ } finally {
+ safeClose(dslInputStream);
+ }
+ }
+ }
+ return rules + language;
+ }
+
+ }
+
+ private Reader getRulesReader(InputStream inputStream) {
+ return new InputStreamReader(inputStream);
+ }
+
+ private InputStream getRulesInputStream(String rulesFile) {
+ return ClassUtil.getResourceAsStream("/" + rulesFile,
+ DroolsRuleBaseHelper.class);
+ }
+
+ /**
+ * Reading the rules and dsl from files. Note the dsl may be null.
+ */
+ public RuleBase createRuleBaseFromDecisionTable(String decisionTable)
+ throws DroolsParserException, IOException, RuleServiceException {
+ logger.debug("Going to read the decisionTable: " + decisionTable);
+ String drl = getSpreadsheetRules(decisionTable);
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl(new StringReader(drl));
+ try {
+ //add the package to a rulebase (deploy the rule package).
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(builder.getPackage());
+ return ruleBase;
+ } catch (Exception ex) {
+ throw new RuleServiceException(ex.getMessage(), ex);
+ }
+ }
+
+ /**
+ * Reading the decision table and creating a drl
+ */
+ public String getSpreadsheetRules(String decisionTable) {
+ logger.debug("Going to read the decisionTable: " + decisionTable);
+ String drl;
+ InputStream inputStreamDT = ClassUtil.getResourceAsStream("/"
+ + decisionTable, DroolsRuleBaseHelper.class);
+ if (inputStreamDT == null) {
+ logger.error("Could not find decisionTable: " + decisionTable);
+ return null;
+ } else {
+ SpreadsheetCompiler compiler = new SpreadsheetCompiler();
+
+ try {
+ drl = compiler.compile(inputStreamDT, InputType.XLS);
+ logger.debug("Compiled the decsionTable to a drl: " + drl);
+ } finally {
+ safeClose(inputStreamDT);
+ }
+ return drl;
+ }
+
+ }
+
+ /**
+ * This shows how rules are loaded up from a deployed package.
+ */
+ public RuleBase loadRuleBaseFromRuleAgent(String ruleAgentProperties)
+ throws IOException, Exception {
+
+ logger.debug("Going to read the ruleAgentProperties: "
+ + ruleAgentProperties);
+ RuleAgent agent = RuleAgent.newRuleAgent("/" + ruleAgentProperties);
+ RuleBase rb = agent.getRuleBase();
+
+ return rb;
+ }
+
+ 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();
+ byte[] b = new byte[4096];
+ for (int i; (i = in.read(b)) != -1;) {
+ stringBuffer.append(new String(b, 0, i));
+ }
+ return stringBuffer.toString();
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/DroolsRuleService.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,783 @@
+/*
+ * 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 java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.Level;
+import org.drools.RuleBase;
+import org.drools.StatefulSession;
+import org.drools.StatelessSession;
+import org.drools.compiler.DroolsParserException;
+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.rules.RuleService;
+
+/**
+ * The Implementation of a rule engine interface for rules services. Here we use
+ * JBossRules (aka Drools). We keep a HashMap of stateful session working
+ * memories.
+ *
+ * @author jdelong at redhat.com
+ *
+ */
+public class DroolsRuleService implements RuleService {
+
+ /**
+ * 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(DroolsRuleService.class);
+
+ private JBRulesCounter rulesCounter = null;
+
+ /**
+ * Execute rules using a certain ruleSet and domain specific language using
+ * the Stateless rule engine API
+ *
+ * @param ruleSet -
+ * String reference to a file which contains a ruleSet.
+ * @param dsl -
+ * String reference to a file which contains a custom rule
+ * language definition
+ * @param ruleReload -
+ * if set to true, a ruleSet update should result in reloading
+ * the ruleSet.
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList -
+ * a list with additional objects (typically pulled from the
+ * message) to be inserted into working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message executeStatelessRules(String ruleSet, String dsl,
+ boolean ruleReload, Message message, List<Object> objectList)
+ throws RuleServiceException
+
+ {
+ long startTime = System.nanoTime();
+
+ try {
+ RuleBase ruleBase = getRuleBaseForFileBasedRules(ruleSet, dsl,
+ ruleReload);
+ message = executeStatelessRules(ruleBase, message, objectList);
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+
+ return message;
+
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ }
+ }
+
+ /**
+ * Execute rules from a decision table using the Stateless rule engine API
+ *
+ * @param decisionTable -
+ * String reference to a file which contains a spreadsheet of rules
+ * @param ruleReload -
+ * if set to true, a ruleSet update should result in reloading
+ * the ruleSet.
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList - a list with additional objects (typically pulled from the message) to be inserted into
+ * working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message executeStatelessRulesFromDecisionTable(String decisionTable,
+ boolean ruleReload, Message message, List<Object> objectList)
+ throws RuleServiceException {
+ long startTime = System.nanoTime();
+
+ try {
+ RuleBase ruleBase = getRuleBaseForDecisionTable(decisionTable,
+ ruleReload);
+ message = executeStatelessRules(ruleBase, message, objectList);
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+
+ return message;
+
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ }
+ }
+
+ /**
+ * Execute rules using a rule package retrieved via the Rule Agent from a URL of local file system
+ * using the Stateless rule engine API
+ *
+ * @param ruleAgentProperties -
+ * String reference to a file which contains properties used by the RuleAgent to locate a rule package.
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList - a list with additional objects (typically pulled from the message) to be inserted into
+ * working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message executeStatelessRulesFromRuleAgent(
+ String ruleAgentProperties, Message message, List<Object> objectList)
+ throws RuleServiceException {
+ long startTime = System.nanoTime();
+ try {
+ DroolsRuleBaseHelper rbHelper = new DroolsRuleBaseHelper();
+ RuleBase ruleBase = rbHelper
+ .loadRuleBaseFromRuleAgent(ruleAgentProperties);
+ final Map<String, RuleBase> ruleBases = lifecycleRuleBases
+ .getLifecycleResource();
+ if (ruleBase != null) {
+ ruleBases.put(ruleAgentProperties, ruleBase);
+
+ message = executeStatelessRules(ruleBase, message, objectList);
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+ }
+
+ return message;
+
+ } catch (IOException ioe) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException(
+ "Could not read the ruleAgentProperties. "
+ + ioe.getMessage(), ioe);
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ } catch (Exception e) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException(
+ "RuleAgent could not get the RuleBase. " + e.getMessage(),
+ e);
+ }
+
+ }
+
+ /**
+ * Execute rules using a certain ruleSet and domain specific language using the Stateful rule engine API
+ *
+ * @param ruleSet -
+ * String reference to a file which contains a ruleSet.
+ * @param domainSpecificLanguage -
+ * String reference to a file which contains a custom rule
+ * language definition
+ * @param ruleReload -
+ * if set to true, a ruleSet update should result in reloading
+ * the ruleSet.
+ * @param dispose -
+ * if set to true, working memory will be disposed after the rules are fired
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList - a list with additional objects (typically pulled from the message) to be inserted into
+ * working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message executeStatefulRules(String ruleSet, String dsl,
+ boolean ruleReload, boolean dispose, Message message,
+ List<Object> objectList) throws RuleServiceException {
+ long startTime = System.nanoTime();
+
+ try {
+ RuleBase ruleBase = getRuleBaseForFileBasedRules(ruleSet, dsl,
+ ruleReload);
+ message = executeStatefulRules(ruleBase, dispose, message,
+ objectList);
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+
+ return message;
+
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ }
+ }
+
+ /**
+ * Execute rules from a decision table using the Stateful rule engine API
+ *
+ * @param decisionTable -
+ * String reference to a file which contains a spreadsheet of rules
+ * @param ruleReload -
+ * if set to true, a ruleSet update should result in reloading
+ * the ruleSet.
+ * @param dispose -
+ * if set to true, working memory will be disposed after the rules are fired
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList - a list with additional objects (typically pulled from the message) to be inserted into
+ * working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message executeStatefulRulesFromDecisionTable(String decisionTable,
+ boolean ruleReload, boolean dispose, Message message,
+ List<Object> objectList) throws RuleServiceException {
+ long startTime = System.nanoTime();
+
+ try {
+ RuleBase ruleBase = getRuleBaseForDecisionTable(decisionTable,
+ ruleReload);
+ message = executeStatefulRules(ruleBase, dispose, message,
+ objectList);
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+
+ return message;
+
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ }
+ }
+
+ /**
+ * Execute rules using a rule package retrieved via the Rule Agent from a URL of local file system
+ * using the Stateful rule engine API
+ *
+ * @param ruleAgentProperties -
+ * String reference to a file which contains properties used by the RuleAgent to locate a rule package.
+ * @param dispose -
+ * if set to true, working memory will be disposed after the rules are fired
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList - a list with additional objects (typically pulled from the message) to be inserted into
+ * working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message executeStatefulRulesFromRuleAgent(
+ String ruleAgentProperties, boolean dispose, Message message,
+ List<Object> objectList) throws RuleServiceException {
+ long startTime = System.nanoTime();
+ try {
+ DroolsRuleBaseHelper rbHelper = new DroolsRuleBaseHelper();
+ RuleBase ruleBase = rbHelper
+ .loadRuleBaseFromRuleAgent(ruleAgentProperties);
+
+ final Map<String, RuleBase> ruleBases = lifecycleRuleBases
+ .getLifecycleResource();
+ if (ruleBase != null) {
+ ruleBases.put(ruleAgentProperties, ruleBase);
+
+ message = executeStatefulRules(ruleBase, dispose, message,
+ objectList);
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+ }
+
+ return message;
+
+ } catch (IOException ioe) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException(
+ "Could not read the ruleAgentProperties. "
+ + ioe.getMessage(), ioe);
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ } catch (Exception e) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleAgentProperties,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException(
+ "RuleAgent could not get the RuleBase. " + e.getMessage(),
+ e);
+ }
+
+ }
+
+ /**
+ * Continue executing rules where the working memory already exists.
+ *
+ * @param rules -
+ * String reference to a file, either the drl file, the decision table,
+ * or the ruleAgentProperties. This is used to find the ruleBase.
+ * @param dispose -
+ * if set to true, working memory will be disposed after the rules are fired
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList - a list with additional objects (typically pulled from the message) to be inserted into
+ * working memory
+ *
+ * @return Message with updated objects.
+ */
+ public Message continueStatefulRulesExecution(String rules,
+ boolean dispose, Message message, List<Object> objectList)
+ throws RuleServiceException {
+ long startTime = System.nanoTime();
+ try {
+ final Map<String, RuleBase> ruleBases = lifecycleRuleBases
+ .getLifecycleResource();
+
+ RuleBase ruleBase = ruleBases.get(rules);
+ StatefulSession[] workingMemories = ruleBase.getStatefulSessions();
+ // there should only be one created from this ruleBase?
+ StatefulSession workingMemory = workingMemories[0];
+ logger
+ .log(Level.DEBUG, "Executing rules with RuleBase="
+ + ruleBase);
+
+ workingMemory.setGlobal("message", message);
+
+ if (objectList != null) {
+ for (Object object : objectList) {
+ workingMemory.insert(object);
+ }
+ }
+
+ // workingMemory.insert(message);
+ logger.log(Level.DEBUG, "Fire the JBossRules Engine");
+ workingMemory.fireAllRules();
+
+ logger.log(Level.DEBUG, "Updated message: " + message);
+
+ if (dispose) {
+ workingMemory.dispose();
+ }
+
+ long procTime = System.nanoTime() - startTime;
+ if (rulesCounter != null) {
+ rulesCounter.update(procTime, rules,
+ JBRulesCounter.RULES_SUCCEED);
+ }
+
+ return message;
+
+ } catch (Exception e) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, rules,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException(
+ "Could not continue rule execution. " + e.getMessage(), e);
+ }
+ }
+
+ /**
+ * Determine if file based rules need reloading and return the rulebase
+ *
+ * @param ruleSet -
+ * String reference to a file which contains a ruleSet.
+ * @param dsl -
+ * String reference to a file which contains a custom rule language
+ * definition
+ * @param ruleReload -
+ * if set to true, a ruleSet update should result in reloading the
+ * ruleSet.
+ *
+ * @return Message with updated objects.
+ */
+ protected RuleBase getRuleBaseForFileBasedRules(String ruleSet, String dsl,
+ boolean ruleReload) throws RuleServiceException {
+ long startTime = System.nanoTime();
+ try {
+ DroolsRuleBaseHelper rbHelper = new DroolsRuleBaseHelper();
+
+ String newRuleSet = null;
+ boolean isRulesChanged = false;
+
+ final Map<String, String> ruleSets = lifecycleRuleSets
+ .getLifecycleResource();
+ if (ruleReload) {
+ String currentRuleSet = ruleSets.get(ruleSet);
+ newRuleSet = rbHelper.getRulesAsString(ruleSet, dsl);
+ if (currentRuleSet == null
+ || !currentRuleSet.equals(newRuleSet)) {
+ isRulesChanged = true;
+ }
+
+ }
+ final Map<String, RuleBase> ruleBases = lifecycleRuleBases
+ .getLifecycleResource();
+ RuleBase ruleBase = ruleBases.get(ruleSet);
+ if (ruleBase == null || isRulesChanged) {
+ logger.log(Level.DEBUG, "Reading ruleSet from file=" + ruleSet);
+ ruleBase = rbHelper.createRuleBaseFromRuleFiles(ruleSet, dsl);
+ if (ruleBase != null)
+ ruleBases.put(ruleSet, ruleBase);
+ if (newRuleSet == null) {
+ newRuleSet = rbHelper.getRulesAsString(ruleSet, dsl);
+ }
+ if (ruleSet != null)
+ ruleSets.put(ruleSet, newRuleSet);
+ }
+
+ // this should really be a RULES_COMPILED status, and processing time should be compilationTime
+ // long procTime = System.nanoTime() - startTime;
+ // if (rulesCounter != null) {
+ // rulesCounter.update(procTime, ruleSet, JBRulesCounter.RULES_SUCCEED);
+ // }
+
+ return ruleBase;
+
+ } catch (final LifecycleResourceException lre) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not load lifecycle data. "
+ + lre.getMessage(), lre);
+ } catch (IOException ioe) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not read the rules. "
+ + ioe.getMessage(), ioe);
+ } catch (DroolsParserException dpe) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + dpe.getMessage(), dpe);
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, ruleSet,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ }
+
+ }
+
+ /**
+ * Determine if decision table need reloading and return the rulebase
+ *
+ * @param ruleSet -
+ * String reference to a file which contains a ruleSet.
+ * @param dsl -
+ * String reference to a file which contains a custom rule language
+ * definition
+ * @param ruleReload -
+ * if set to true, a ruleSet update should result in reloading the
+ * ruleSet.
+ *
+ * @return Message with updated objects.
+ */
+ protected RuleBase getRuleBaseForDecisionTable(String decisionTable,
+ boolean ruleReload) throws RuleServiceException {
+ long startTime = System.nanoTime();
+ try {
+ DroolsRuleBaseHelper rbHelper = new DroolsRuleBaseHelper();
+ RuleBase ruleBase;
+ if (ruleReload) {
+ String drl = rbHelper.getSpreadsheetRules(decisionTable);
+ ruleBase = getRuleBaseForFileBasedRules(drl, null, ruleReload);
+ } else {
+ ruleBase = rbHelper
+ .createRuleBaseFromDecisionTable(decisionTable);
+ }
+ // this should really be a RULES_COMPILED status, and processing time should be compilationTime
+ // long procTime = System.nanoTime() - startTime;
+ // if (rulesCounter != null) {
+ // rulesCounter.update(procTime, ruleSet, JBRulesCounter.RULES_SUCCEED);
+ // }
+ return ruleBase;
+
+ } catch (IOException ioe) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not read the rules. "
+ + ioe.getMessage(), ioe);
+ } catch (DroolsParserException dpe) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + dpe.getMessage(), dpe);
+ } catch (RuleServiceException ree) {
+ if (rulesCounter != null) {
+ long procTime = System.nanoTime() - startTime;
+ rulesCounter.update(procTime, decisionTable,
+ JBRulesCounter.RULES_FAILED);
+ }
+ throw new RuleServiceException("Could not parse the rules. "
+ + ree.getMessage(), ree);
+ }
+ }
+
+ /**
+ * Execute rules using using the Stateless API
+ *
+ * @param rulebase -
+ * the rulebase to use
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList -
+ * a list with additional objects (typically pulled from the message)
+ * to be inserted into working memory
+ *
+ * @return Message with updated objects.
+ */
+ @SuppressWarnings("unchecked")
+ protected Message executeStatelessRules(RuleBase ruleBase, Message message,
+ List<Object> objectList) {
+ StatelessSession workingMemory = ruleBase.newStatelessSession();
+ logger.log(Level.DEBUG, "Executing rules with RuleBase=" + ruleBase);
+
+ List<Object> facts = new ArrayList(objectList);
+ workingMemory.setGlobal("message", message);
+ logger.log(Level.DEBUG, "Fire the Drools Rules Engine");
+ workingMemory.execute(facts);
+
+ return message;
+ }
+
+ /**
+ * Execute rules using using the Stateful API
+ *
+ * @param rulebase -
+ * the rulebase to use
+ * @param message -
+ * Message that is updated with the results.
+ * @param objectList -
+ * a list with additional objects (typically pulled from the message)
+ * to be inserted into working memory
+ *
+ * @return Message with updated objects.
+ */
+ protected Message executeStatefulRules(RuleBase ruleBase, boolean dispose,
+ Message message, List<Object> objectList) {
+
+ StatefulSession workingMemory = ruleBase.newStatefulSession();
+ logger.log(Level.DEBUG, "Executing rules with RuleBase=" + ruleBase);
+
+ workingMemory.setGlobal("message", message);
+
+ if (objectList != null) {
+ for (Object object : objectList) {
+ workingMemory.insert(object);
+ }
+ }
+
+ logger.log(Level.DEBUG, "Fire the JBossRules Engine");
+ workingMemory.fireAllRules();
+
+ logger.log(Level.DEBUG, "Updated message: " + message);
+
+ if (dispose) {
+ workingMemory.dispose();
+ }
+ return message;
+ }
+
+ public void setConfigTree(ConfigTree configTree) {
+ 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 {
+ }
+ }
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceException.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceException.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceException.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,46 @@
+/*
+ * 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;
+
+/**
+ * @author jdelong at redhat.com
+ *
+ */
+public class RuleServiceException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ public RuleServiceException() {
+ super();
+ }
+
+ public RuleServiceException(String msg) {
+ super(msg);
+ }
+
+ public RuleServiceException(Throwable cause) {
+ super(cause);
+ }
+
+ public RuleServiceException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/main/java/org/jboss/internal/soa/esb/services/rules/RuleServiceFactory.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,62 @@
+/*
+* 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 org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.jboss.soa.esb.services.rules.RuleService;
+import org.jboss.soa.esb.util.ClassUtil;
+/**
+ * Returns an instance of the RuleService.
+ *
+ * @author jdelong at redhat.com
+ *
+ */
+public class RuleServiceFactory {
+ private static Logger logger = Logger.getLogger(RuleServiceFactory.class);
+
+ /**
+ * This factory returns a ruleService
+ *
+ * @author jdelong at redhat.com
+ *
+ */
+ public static RuleService getRuleService(String className)
+ throws RuleServiceException {
+ RuleService rs = null;
+ logger.log(Level.DEBUG, "Going to load " + className);
+ try {
+ // instruct class loader to load the RuleService Implementation
+ Class rsClass = ClassUtil.forName(className,
+ RuleServiceFactory.class);
+ // Try to get an instance of the RS
+ rs = (RuleService) rsClass.newInstance();
+ } catch (ClassNotFoundException cnfex) {
+ throw new RuleServiceException("RuleService Implementation="
+ + className + " not found", cnfex);
+ } catch (Exception e) {
+ throw new RuleServiceException(className + " invocation problem. "
+ + e.getLocalizedMessage(), e);
+ }
+ return rs;
+ }
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,722 @@
+/*
+ * 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.soa.esb.actions;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.net.URI;
+
+import org.jboss.internal.soa.esb.couriers.MockCourier;
+import org.jboss.internal.soa.esb.couriers.MockCourierFactory;
+import org.jboss.internal.soa.esb.services.registry.MockRegistry;
+import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.testutils.FileUtil;
+import org.jboss.soa.esb.util.ClassUtil;
+
+import org.jboss.internal.soa.esb.services.rules.RuleServiceException;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.actions.BusinessRulesProcessor;
+import org.jboss.soa.esb.services.registry.RegistryException;
+
+import org.jboss.soa.esb.services.rules.Approve;
+import org.jboss.soa.esb.services.rules.Customer;
+import org.jboss.soa.esb.services.rules.Driver;
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Policy;
+
+import org.apache.log4j.Logger;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import junit.framework.JUnit4TestAdapter;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+
+/**
+ *
+ * @author jdelong at redhat.com
+ *
+ */
+public class BusinessRulesProcessorUnitTest
+{
+ static Logger _logger = Logger.getLogger(BusinessRulesProcessorUnitTest.class);
+
+
+ // messages for the tests
+ Message message;
+ Message message1;
+ Message message2;
+ Message message3;
+ Message message4;
+ Message message5;
+ Message message6;
+ Message message7;
+
+ // facts
+ Order order;
+ Order order1;
+ Order order2;
+ Order order3;
+ Order order4;
+ Order order5;
+ Order order6;
+ Order order7;
+
+ Customer customer = new Customer( "mark", 0 );
+
+
+ List<Order> orders = new ArrayList();
+
+ Driver driver = new Driver();
+ Policy policy = new Policy();
+
+ ConfigTree confTree;
+
+
+ private static EPR epr;
+ private static EPR eprS;
+ private static EPR epr1;
+ private static EPR epr1S;
+ private static EPR epr2;
+ private static EPR epr2S;
+ private static EPR epr3;
+ private static EPR epr3S;
+ private static EPR epr4;
+ private static EPR epr4S;
+ private static EPR epr5;
+ private static EPR epr5S;
+ private static EPR epr6;
+// private static EPR epr7;
+
+ private static MockCourier courier;
+ private static MockCourier courierS;
+ private static MockCourier courier1;
+ private static MockCourier courier1S;
+ private static MockCourier courier2;
+ private static MockCourier courier2S;
+ private static MockCourier courier3;
+ private static MockCourier courier3S;
+ private static MockCourier courier4;
+ private static MockCourier courier4S;
+ private static MockCourier courier5;
+ private static MockCourier courier5S;
+ private static MockCourier courier6;
+// private static MockCourier courier7;
+
+ private static ConfigTree[] actions;
+
+
+ @BeforeClass
+ public static void setUpEPRsandCouriers() throws Exception {
+ MockCourierFactory.install();
+ MockRegistry.install();
+ // epr and courier for drl tests
+ epr = new EPR(new URI("orderDiscount"));
+ courier = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountRuleService", epr, courier);
+ eprS = new EPR(new URI("orderDiscountStateful"));
+ courierS = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountRuleServiceStateful", eprS, courierS);
+
+
+ // epr and courier for drl and multiple orders tests
+ epr1 = new EPR(new URI("orderDiscountMultiple"));
+ courier1 = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountMultipleRuleService", epr1, courier1);
+ epr1S = new EPR(new URI("orderDiscountMultiple"));
+ courier1S = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountMultipleRuleServiceStateful", epr1S, courier1S);
+
+
+ // epr and courier for drl and order collection tests
+ epr2 = new EPR(new URI("orderDiscountCollections"));
+ courier2 = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountCollectionsRuleService", epr2, courier2);
+ epr2S = new EPR(new URI("orderDiscountCollectionsStateful"));
+ courier2S = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountCollectionsRuleServiceStateful", epr2S, courier2S);
+
+
+ // epr and courier for decision table, dsl, and ruleAgent tests
+ epr3 = new EPR(new URI("policyPricing"));
+ courier3 = new MockCourier(true);
+ MockRegistry.register("test", "PolicyPricingRuleService", epr3, courier3);
+ epr3S = new EPR(new URI("policyPricingStateful"));
+ courier3S = new MockCourier(true);
+ MockRegistry.register("test", "PolicyPricingRuleServiceStateful", epr3S, courier3S);
+
+ epr4 = new EPR(new URI("policyApproval"));
+ courier4 = new MockCourier(true);
+ MockRegistry.register("test", "PolicyApprovalRuleService", epr4, courier4);
+ epr4S = new EPR(new URI("policyApprovalStateful"));
+ courier4S = new MockCourier(true);
+ MockRegistry.register("test", "PolicyApprovalRuleServiceStateful", epr4S, courier4S);
+
+
+ epr5 = new EPR(new URI("ruleAgentPolicy"));
+ courier5 = new MockCourier(true);
+ MockRegistry.register("test", "RuleAgenttPolicyService", epr5, courier5);
+ epr5S = new EPR(new URI("ruleAgentPolicyStateful"));
+ courier5S = new MockCourier(true);
+ MockRegistry.register("test", "RuleAgentPolicyStateful", epr5S, courier5S);
+
+
+ epr6 = new EPR(new URI("statefulContinuation"));
+ courier6 = new MockCourier(true);
+ MockRegistry.register("test", "OrderDiscountServiceStatefulContinuation", epr6, courier6);
+
+
+ InputStream in = ClassUtil.getResourceAsStream("BusinessRulesProcessorUnitTest.xml", BusinessRulesProcessorUnitTest.class);
+ String xml = FileUtil.readStream(in);
+ actions = ConfigTree.fromXml(xml).getChildren("action");
+
+
+
+ }
+
+
+ @Before
+ public void setupMessagesAndFacts() {
+
+ // message and facts for drl tests
+ message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order = new Order();
+ order.setOrderId(0);
+ order.setQuantity(20);
+ order.setUnitPrice(new Float("20.0"));
+ message.getBody().add("Order", order);
+
+ // message and facts for drl and multiple orders tests
+ message1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order1 = new Order();
+ order1.setOrderId(1);
+ order1.setQuantity(20);
+ order1.setUnitPrice(new Float("50.0"));
+ message1.getBody().add("Order1", order1);
+ order2 = new Order();
+ order2.setOrderId(2);
+ order2.setQuantity(5);
+ order2.setUnitPrice(new Float("50.0"));
+ message1.getBody().add("Order2", order2);
+
+ // message and facts for drl and collections tests
+ message2 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order3 = new Order();
+ order3.setOrderId(3);
+ order3.setQuantity(9);
+ order3.setUnitPrice(new Float("50.0"));
+
+ order4 = new Order();
+ order4.setOrderId(4);
+ order4.setQuantity(25);
+ order4.setUnitPrice(new Float("50.0"));
+
+ orders.add(order1);
+ orders.add(order2);
+ orders.add(order3);
+ orders.add(order4);
+
+ message2.getBody().add("Orders", orders);
+
+
+ // message and facts for decision table, dsl, and ruleAgent tests
+ message3 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ driver = new Driver();
+ policy = new Policy();
+ driver.setAge(30);
+ policy.setDriver(driver);
+ message3.getBody().add("Driver", driver);
+ message3.getBody().add("Policy", policy);
+
+ // message and facts for stateful continuation tests
+ // new message with just customer
+ message4 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ message4.getBody().add("Customer", customer);
+ message4.getProperties().setProperty("dispose", false);
+
+ //new message and order
+ message5 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order5 = new Order();
+ order5.setOrderId(5);
+ order5.setQuantity(5);
+ order5.setUnitPrice(new Float("50.0"));
+ order5.setTotalPrice(order5.calculateTotalPrice());
+ order5.setCustomer(customer);
+ message5.getBody().add("Order", order5);
+ message5.getProperties().setProperty("dispose", false);
+ message5.getProperties().setProperty("continue", true);
+
+
+ message6 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order6 = new Order();
+ order6.setOrderId(6);
+ order6.setQuantity(10);
+ order6.setUnitPrice(new Float("80.0"));
+ order6.setTotalPrice(order6.calculateTotalPrice());
+ order6.setCustomer(customer);
+ message6.getBody().add("Order", order6);
+ message6.getProperties().setProperty("dispose", false);
+ message6.getProperties().setProperty("continue", true);
+
+ message7 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order7 = new Order();
+ order7.setOrderId(7);
+ order7.setQuantity(5);
+ order7.setUnitPrice(new Float("60.0"));
+ order7.setTotalPrice(order7.calculateTotalPrice());
+ order7.setCustomer(customer);
+ message7.getBody().add("Order", order7);
+ message7.getProperties().setProperty("dispose", true);
+ message7.getProperties().setProperty("continue", true);
+
+
+ }
+
+
+ @Test
+ public void drlStateless()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[0]);
+ brp.process(message);
+
+ assertEquals(order.getDiscount(),10.0);
+ assertEquals("10%",message.getBody().get("DiscountObject0"));
+ System.out.println("test BRP drlStateless passed");
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStateful()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[1]);
+ message.getProperties().setProperty("dispose", true);
+ brp.process(message);
+
+ assertEquals(order.getDiscount(),10.0);
+ assertEquals("10%",message.getBody().get("DiscountObject0"));
+ Order orderFromMessage = (Order) message.getBody().get("Order");
+ assertEquals(orderFromMessage.getDiscount(),10.0);
+ System.out.println("test BRP drlStateful passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+ @Test
+ public void drlStatelessMultipleObjects()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[2]);
+ brp.process(message1);
+
+ assertEquals(order1.getDiscount(),10.0);
+ assertEquals(order2.getDiscount(),0.0);
+ assertEquals("10%",message1.getBody().get("DiscountObject1"));
+ assertEquals("0%",message1.getBody().get("DiscountObject2"));
+ Order order1FromMessage = (Order) message1.getBody().get("Order1");
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ Order order2FromMessage = (Order) message1.getBody().get("Order2");
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ System.out.println("test BRP drlStatelessMultipleObjects passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStatefulMultipleObjects()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[3]);
+ brp.process(message1);
+
+ assertEquals(order1.getDiscount(),10.0);
+ assertEquals(order2.getDiscount(),0.0);
+ assertEquals("10%",message1.getBody().get("DiscountObject1"));
+ assertEquals("0%",message1.getBody().get("DiscountObject2"));
+ Order order1FromMessage = (Order) message1.getBody().get("Order1");
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ Order order2FromMessage = (Order) message1.getBody().get("Order2");
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ System.out.println("test BRP drlStatefulMultipleObjects passed");
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+
+ }
+
+
+ @Test
+ public void drlStatelessCollection()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[4]);
+ brp.process(message2);
+
+ assertEquals("10%",message2.getBody().get("DiscountObject1"));
+ assertEquals("0%",message2.getBody().get("DiscountObject2"));
+ assertEquals("0%",message2.getBody().get("DiscountObject3"));
+ assertEquals("10%",message2.getBody().get("DiscountObject4"));
+ // use arrays because we can control which element is where
+ // making it easy to compare in this test case
+ Order[] updatedOrders = (Order[]) message2.getBody().get("UpdatedOrders");
+ Order order1FromMessage = (Order) updatedOrders[0];
+ Order order2FromMessage = (Order) updatedOrders[1];
+ Order order3FromMessage = (Order) updatedOrders[2];
+ Order order4FromMessage = (Order) updatedOrders[3];
+
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ assertEquals(order3FromMessage.getDiscount(),0.0);
+ assertEquals(order4FromMessage.getDiscount(),10.0);
+ System.out.println("test BRP drlStatelessCollections passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+
+ }
+
+
+ @Test
+ public void drlStatelfulCollection()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[5]);
+ brp.process(message2);
+
+ assertEquals("10%",message2.getBody().get("DiscountObject1"));
+ assertEquals("0%",message2.getBody().get("DiscountObject2"));
+ assertEquals("0%",message2.getBody().get("DiscountObject3"));
+ assertEquals("10%",message2.getBody().get("DiscountObject4"));
+ // use arrays because we can control which element is where
+ // making it easy to compare in this test case
+ Order[] updatedOrders = (Order[]) message2.getBody().get("UpdatedOrders");
+ Order order1FromMessage = (Order) updatedOrders[0];
+ Order order2FromMessage = (Order) updatedOrders[1];
+ Order order3FromMessage = (Order) updatedOrders[2];
+ Order order4FromMessage = (Order) updatedOrders[3];
+
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ assertEquals(order3FromMessage.getDiscount(),0.0);
+ assertEquals(order4FromMessage.getDiscount(),10.0);
+ System.out.println("test BRP drlStatelessCollections passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+
+ }
+
+
+ @Test
+ public void decisionTableStateless()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[6]);
+ brp.process(message3);
+
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test BRP decisionTableStateless passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+ @Test
+ public void decisionTableStateful()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[7]);
+ brp.process(message3);
+
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test BRP decisionTableStateful passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void dslStateless()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[8]);
+ brp.process(message3);
+
+ Approve approveFromMessage = (Approve) message3.getBody().get("Approve");
+ assertEquals(approveFromMessage.getReason(), "Driver is safe and mature.");
+ System.out.println("test BRP dslStateless passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void dslStateful()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[9]);
+ brp.process(message3);
+
+ Approve approveFromMessage = (Approve) message3.getBody().get("Approve");
+ assertEquals(approveFromMessage.getReason(), "Driver is safe and mature.");
+ System.out.println("test BRP dslStateful passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+ @Test
+ public void ruleAgentStateless()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[10]);
+ brp.process(message3);
+
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test BRP ruleAgentStateless passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void ruleAgentStateful()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[11]);
+ brp.process(message3);
+
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test BRP ruleAgentStateful passed");
+
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStatefulOverTime()
+ {
+ try {
+ BusinessRulesProcessor brp = new BusinessRulesProcessor(actions[12]);
+ brp.process(message4);
+
+ brp.process(message5);
+ Customer customerFromMessage5 = (Customer) message5.getBody().get("Customer");
+ assertNull(customerFromMessage5);
+
+ brp.process(message6);
+ Customer customerFromMessage6 = (Customer) message6.getBody().get("Customer");
+ assertEquals(customerFromMessage6.getDiscount(), 10);
+
+ brp.process(message7);
+ Customer customerFromMessage7 = (Customer) message7.getBody().get("Customer");
+ assertEquals(customerFromMessage7.getDiscount(), 10);
+
+ System.out.println("test BRP drlStateful with continuation passed");
+
+ } catch (ConfigurationException ce) {
+ System.out.println("Caught ConfigurationException" + ce.getMessage());
+ assertTrue(false);
+ } catch (RegistryException re) {
+ System.out.println("Caught RegistryException" + re.getMessage());
+ assertTrue(false);
+ } catch (RuleServiceException rse) {
+ System.out.println("Caught RuleServiceException" + rse.getMessage());
+ assertTrue(false);
+ } catch (ActionProcessingException ape) {
+ System.out.println("Caught ActionProcessingException" + ape.getMessage());
+ assertTrue(false);
+ }
+ }
+
+
+
+ public static junit.framework.Test suite() {
+ return new JUnit4TestAdapter(BusinessRulesProcessorUnitTest.class);
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/actions/BusinessRulesProcessorUnitTest.xml 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,124 @@
+<testActions>
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountRuleService"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false" >
+
+ <object-path esb="body.Order" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountRuleServiceStateful"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Order" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountMultipleRuleService"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false" >
+
+ <object-path esb="body.Order1" />
+ <object-path esb="body.Order2" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountMultipleRuleServiceStateful"
+ ruleSet="drl/OrderDiscount.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Order1" />
+ <object-path esb="body.Order2" />
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountCollectionsRuleService"
+ ruleSet="drl/OrderDiscountWithCollections.drl"
+ ruleReload="false" >
+
+ <object-path esb="body.Orders" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountCollectionsRuleServiceStateful"
+ ruleSet="drl/OrderDiscountWithCollections.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Orders" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyPricingRuleService"
+ decisionTable="decisionTable/PolicyPricing.xls"
+ ruleReload="false" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyPricingRuleServiceStateful"
+ decisionTable="decisionTable/PolicyPricing.xls"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyApprovalRuleService"
+ ruleSet="dsl/approval.dslr"
+ ruleLanguage="dsl/acme.dsl"
+ ruleReload="false" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="PolicyApprovalRuleServiceStateful"
+ ruleSet="dsl/approval.dslr"
+ ruleLanguage="dsl/acme.dsl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="RuleAgentPolicyService"
+ ruleAgentProperties="ruleAgent/brmsdeployedrules.properties"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="RuleAgentPolicyServiceStateful"
+ ruleAgentProperties="ruleAgent/brmsdeployedrules.properties"
+ stateful="true" >
+
+ <object-path esb="body.Driver" />
+ <object-path esb="body.Policy" />
+
+ </action>
+
+
+ <action class="org.jboss.soa.esb.actions.BusinessRulesProcessor" name="OrderDiscountServiceStatefulContinuation"
+ ruleSet="drl/OrderDiscountOnMultipleOrders.drl"
+ ruleReload="false"
+ stateful="true" >
+
+ <object-path esb="body.Customer" />
+ <object-path esb="body.Order" />
+ </action>
+
+
+</testActions>
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Approve.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,28 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * This is a simple fact class to mark something as approved.
+ * @author Michael Neale
+ *
+ */
+public class Approve implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private String reason;
+
+ public Approve(String reason) {
+ this.reason = reason;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Customer.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,56 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package org.jboss.soa.esb.services.rules;
+
+/**
+ * @author
+ */
+public class Customer implements java.io.Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private String name;
+
+ private int discount;
+
+ public Customer(String name,
+ int discount) {
+ this.name = name;
+ this.discount = discount;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getDiscount() {
+ return discount;
+ }
+
+ public void setDiscount(int discount) {
+ this.discount = discount;
+ }
+
+
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Driver.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,44 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * This represents obviously a driver who is applying for an insurance Policy.
+ * @author Michael Neale
+ *
+ */
+public class Driver implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+ private String name = "Mr Joe Blogs";
+ private Integer age = new Integer(30);
+ private Integer priorClaims = new Integer(0);
+ private String locationRiskProfile = "LOW";
+
+ public Integer getAge() {
+ return age;
+ }
+ public void setAge(Integer age) {
+ this.age = age;
+ }
+ public String getLocationRiskProfile() {
+ return locationRiskProfile;
+ }
+ public void setLocationRiskProfile(String locationRiskProfile) {
+ this.locationRiskProfile = locationRiskProfile;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public Integer getPriorClaims() {
+ return priorClaims;
+ }
+ public void setPriorClaims(Integer priorClaims) {
+ this.priorClaims = priorClaims;
+ }
+
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/DroolsRuleServiceUnitTest.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,662 @@
+/*
+ * 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.soa.esb.services.rules;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.jboss.internal.soa.esb.services.rules.DroolsRuleService;
+import org.jboss.internal.soa.esb.services.rules.RuleServiceException;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.message.format.MessageType;
+import org.jboss.soa.esb.message.mapping.ObjectMapper;
+import org.jboss.soa.esb.message.mapping.ObjectMappingException;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ * @author jdelong at redhat.com
+ *
+ */
+public class DroolsRuleServiceUnitTest
+{
+
+ Message message;
+ Message message1;
+ Message message2;
+ Message message3;
+ Message message4;
+ Message message5;
+ Message message6;
+ Message message7;
+ Message message8;
+ Message message9;
+ Message message10;
+
+ Order order;
+ Order order1;
+ Order order2;
+ Order order3;
+ Order order4;
+ Order order5;
+ Order order6;
+ Order order7;
+ Order order8;
+ Order order9;
+ Order order10;
+
+ Customer customer = new Customer( "mark", 0 );
+ Customer customer1 = new Customer( "michael", 0 );
+ Customer customer2 = new Customer( "tirelli", 0 );
+
+
+ List<Order> orders = new ArrayList();
+
+ List<Object> objectList;
+ List<Object> objectList1;
+ List<Object> objectList2;
+ List<Object> objectList3;
+ List<Object> objectList4;
+ List<Object> objectList5;
+ List<Object> objectList6;
+ List<Object> objectList7;
+ List<Object> objectList8;
+ List<Object> objectList9;
+ List<Object> objectList10;
+
+ Driver driver = new Driver();
+ Policy policy = new Policy();
+
+
+ @Before
+ public void setUpSingleOrder()
+ {
+ try {
+ //new message and order
+ message = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order = new Order();
+ order.setOrderId(0);
+ order.setQuantity(20);
+ order.setUnitPrice(new Float("20.0"));
+ message.getBody().add("Order", order);
+
+ // extract the order from the message, so the drools can process it
+ List<String> messagePathList = new ArrayList<String>();
+ messagePathList.add("body.Order");
+ ObjectMapper mapper = new ObjectMapper();
+ objectList = mapper.createObjectList(message, messagePathList);
+ } catch (ObjectMappingException ome) {
+ System.out.println("Caught ObjectMappingException" + ome.getMessage());
+ }
+ }
+
+
+ @Before
+ public void setUpMultipleOrders()
+ {
+ try {
+ //new message and orders
+ message1 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order1 = new Order();
+ order1.setOrderId(1);
+ order1.setQuantity(20);
+ order1.setUnitPrice(new Float("50.0"));
+ message1.getBody().add("Order1", order1);
+
+ order2 = new Order();
+ order2.setOrderId(2);
+ order2.setQuantity(5);
+ order2.setUnitPrice(new Float("50.0"));
+ message1.getBody().add("Order2", order2);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList = new ArrayList<String>();
+ messagePathList.add("body.Order1");
+ messagePathList.add("body.Order2");
+ ObjectMapper mapper = new ObjectMapper();
+ objectList1 = mapper.createObjectList(message1, messagePathList);
+ //System.out.println("objectList1 has " + objectList1.size() + " elements: " + objectList1.toString());
+ } catch (ObjectMappingException ome) {
+ System.out.println("Caught ObjectMappingException" + ome.getMessage());
+ }
+ }
+
+
+ @Before
+ public void setUpOrderCollection()
+ {
+ try {
+ //new messages
+ message2 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order1 = new Order();
+ order1.setOrderId(1);
+ order1.setQuantity(20);
+ order1.setUnitPrice(new Float("50.0"));
+
+ order2 = new Order();
+ order2.setOrderId(2);
+ order2.setQuantity(5);
+ order2.setUnitPrice(new Float("50.0"));
+
+ order3 = new Order();
+ order3.setOrderId(3);
+ order3.setQuantity(9);
+ order3.setUnitPrice(new Float("50.0"));
+
+ order4 = new Order();
+ order4.setOrderId(4);
+ order4.setQuantity(25);
+ order4.setUnitPrice(new Float("50.0"));
+
+ orders.add(order1);
+ orders.add(order2);
+ orders.add(order3);
+ orders.add(order4);
+
+ message2.getBody().add("Orders", orders);
+
+
+ // extract the order from the message, so the drools can process it
+ List<String> messagePathList = new ArrayList<String>();
+ messagePathList.add("body.Orders");
+ ObjectMapper mapper = new ObjectMapper();
+ objectList2 = mapper.createObjectList(message2, messagePathList);
+ // System.out.println("objectList2 has " + objectList2.size() + " elements: " + objectList2.toString());
+ } catch (ObjectMappingException ome) {
+ System.out.println("Caught ObjectMappingException" + ome.getMessage());
+ }
+
+ }
+
+
+ @Test
+ public void drlStateless() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatelessRules("drl/OrderDiscount.drl", null, false, message, objectList);
+ assertEquals(order.getDiscount(),10.0);
+ assertEquals("10%",message.getBody().get("DiscountObject0"));
+ System.out.println("test drlStateless passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStateful() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRules("drl/OrderDiscount.drl", null, false, true, message, objectList);
+ assertEquals(order.getDiscount(),10.0);
+ assertEquals("10%",message.getBody().get("DiscountObject0"));
+ Order orderFromMessage = (Order) message.getBody().get("Order");
+ assertEquals(orderFromMessage.getDiscount(),10.0);
+ System.out.println("test drlStateful passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStatelessMultipleObjects() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatelessRules("drl/OrderDiscount.drl", null, false, message1, objectList1);
+ assertEquals(order1.getDiscount(),10.0);
+ assertEquals(order2.getDiscount(),0.0);
+ assertEquals("10%",message1.getBody().get("DiscountObject1"));
+ assertEquals("0%",message1.getBody().get("DiscountObject2"));
+ Order order1FromMessage = (Order) message1.getBody().get("Order1");
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ Order order2FromMessage = (Order) message1.getBody().get("Order2");
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ System.out.println("test drlStatelessMultipleObjects passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStatefulMultipleObjects() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRules("drl/OrderDiscount.drl", null, false, true, message1, objectList1);
+ assertEquals(order1.getDiscount(),10.0);
+ assertEquals(order2.getDiscount(),0.0);
+ assertEquals("10%",message1.getBody().get("DiscountObject1"));
+ assertEquals("0%",message1.getBody().get("DiscountObject2"));
+ Order order1FromMessage = (Order) message1.getBody().get("Order1");
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ Order order2FromMessage = (Order) message1.getBody().get("Order2");
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ System.out.println("test drlStatefulMultipleObjects passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void drlStatelfulCollection() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRules("drl/OrderDiscountWithCollections.drl", null, false, true, message2, objectList2);
+ assertEquals("10%",message2.getBody().get("DiscountObject1"));
+ assertEquals("0%",message2.getBody().get("DiscountObject2"));
+ assertEquals("0%",message2.getBody().get("DiscountObject3"));
+ assertEquals("10%",message2.getBody().get("DiscountObject4"));
+ // use arrays because we can control which element is where
+ // making it easy to compare in this test case
+ Order[] updatedOrders = (Order[]) message2.getBody().get("UpdatedOrders");
+ Order order1FromMessage = (Order) updatedOrders[0];
+ Order order2FromMessage = (Order) updatedOrders[1];
+ Order order3FromMessage = (Order) updatedOrders[2];
+ Order order4FromMessage = (Order) updatedOrders[3];
+
+ assertEquals(order1FromMessage.getDiscount(),10.0);
+ assertEquals(order2FromMessage.getDiscount(),0.0);
+ assertEquals(order3FromMessage.getDiscount(),0.0);
+ assertEquals(order4FromMessage.getDiscount(),10.0);
+ System.out.println("test drlStatefulCollections passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Before
+ public void setUpInsurance()
+ {
+ try {
+ //new messages
+ message3 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ driver = new Driver();
+ policy = new Policy();
+ driver.setAge(30);
+ policy.setDriver(driver);
+ message3.getBody().add("Driver", driver);
+ message3.getBody().add("Policy", policy);
+
+ // extract the order from the message, so the drools can process it
+ List<String> messagePathList = new ArrayList<String>();
+ messagePathList.add("body.Driver");
+ messagePathList.add("body.Policy");
+ ObjectMapper mapper = new ObjectMapper();
+ objectList3 = mapper.createObjectList(message3, messagePathList);
+ } catch (ObjectMappingException ome) {
+ System.out.println("Caught ObjectMappingException" + ome.getMessage());
+ }
+ }
+
+
+ @Test
+ public void decisionTableStateless() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatelessRulesFromDecisionTable("decisionTable/PolicyPricing.xls",false, message3, objectList3);
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test decisionTableStateless passed");
+
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void decisionTableStateful() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRulesFromDecisionTable("decisionTable/PolicyPricing.xls",false, true, message3, objectList3);
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test decisionTableStateful passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void dslStateless() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatelessRules("dsl/approval.dslr", "dsl/acme.dsl", false, message3, objectList3);
+ //Rejection rejectionFromMessage = (Rejection) message3.getBody().get("Rejection");
+ Approve approveFromMessage = (Approve) message3.getBody().get("Approve");
+ assertEquals(approveFromMessage.getReason(), "Driver is safe and mature.");
+ System.out.println("test dslStateless passed");
+
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void dslStateful() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRules("dsl/approval.dslr", "dsl/acme.dsl", false, true, message3, objectList3);
+ // Rejection rejectionFromMessage = (Rejection) message3.getBody().get("Rejection");
+ Approve approveFromMessage = (Approve) message3.getBody().get("Approve");
+ assertEquals(approveFromMessage.getReason(), "Driver is safe and mature.");
+ System.out.println("test dslStateful passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void ruleAgentStateless() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatelessRulesFromRuleAgent("ruleAgent/brmsdeployedrules.properties", message3, objectList3);
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test ruleAgentStateful passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Test
+ public void ruleAgentStateful() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRulesFromRuleAgent("ruleAgent/brmsdeployedrules.properties", true, message3, objectList3);
+ Policy policyFromMessage = (Policy) message3.getBody().get("Policy");
+ assertEquals(policyFromMessage.getBasePrice(),120);
+ System.out.println("test ruleAgentStateful passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ @Before
+ public void setUpMultipleOrdersForStatefulOverTime()
+ {
+ try {
+ //new message with just customer
+ message4 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ message4.getBody().add("Customer", customer);
+
+ // extract the customer from the message, so drools can process it
+ List<String> messagePathList4 = new ArrayList<String>();
+ messagePathList4.add("body.Customer");
+ ObjectMapper mapper4 = new ObjectMapper();
+ objectList4 = mapper4.createObjectList(message4, messagePathList4);
+ //System.out.println("objectList4 has " + objectList4.size() + " elements: " + objectList4.toString());
+
+
+ //new message and orders
+ message5 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order5 = new Order();
+ order5.setOrderId(5);
+ order5.setQuantity(5);
+ order5.setUnitPrice(new Float("50.0"));
+ order5.setTotalPrice(order5.calculateTotalPrice());
+ order5.setCustomer(customer);
+ message5.getBody().add("Order", order5);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList5 = new ArrayList<String>();
+ messagePathList5.add("body.Order");
+ messagePathList5.add("body.Customer");
+ ObjectMapper mapper5 = new ObjectMapper();
+ objectList5 = mapper5.createObjectList(message5, messagePathList5);
+ //System.out.println("objectList5 has " + objectList5.size() + " elements: " + objectList5.toString());
+
+ message6 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order6 = new Order();
+ order6.setOrderId(6);
+ order6.setQuantity(10);
+ order6.setUnitPrice(new Float("80.0"));
+ order6.setTotalPrice(order6.calculateTotalPrice());
+ order6.setCustomer(customer);
+ message6.getBody().add("Order", order6);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList6 = new ArrayList<String>();
+ messagePathList6.add("body.Order");
+ ObjectMapper mapper6 = new ObjectMapper();
+ objectList6 = mapper6.createObjectList(message6, messagePathList6);
+ //System.out.println("objectList6 has " + objectList6.size() + " elements: " + objectList6.toString());
+
+ message7 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order7 = new Order();
+ order7.setOrderId(7);
+ order7.setQuantity(5);
+ order7.setUnitPrice(new Float("60.0"));
+ order7.setTotalPrice(order7.calculateTotalPrice());
+ order7.setCustomer(customer1);
+ message7.getBody().add("Order", order7);
+ message7.getBody().add("Customer", customer1);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList7 = new ArrayList<String>();
+ messagePathList7.add("body.Order");
+ messagePathList7.add("body.Customer");
+ ObjectMapper mapper7 = new ObjectMapper();
+ objectList7 = mapper7.createObjectList(message7, messagePathList7);
+ //System.out.println("objectList7 has " + objectList7.size() + " elements: " + objectList7.toString());
+
+ message8 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order8 = new Order();
+ order8.setOrderId(8);
+ order8.setQuantity(5);
+ order8.setUnitPrice(new Float("60.0"));
+ order8.setTotalPrice(order8.calculateTotalPrice());
+ order8.setCustomer(customer);
+ message8.getBody().add("Order", order8);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList8 = new ArrayList<String>();
+ messagePathList8.add("body.Order");
+ ObjectMapper mapper8 = new ObjectMapper();
+ objectList8 = mapper8.createObjectList(message8, messagePathList8);
+ //System.out.println("objectList8 has " + objectList8.size() + " elements: " + objectList8.toString());
+
+ message9 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order9 = new Order();
+ order9.setOrderId(9);
+ order9.setQuantity(20);
+ order9.setUnitPrice(new Float("60.0"));
+ order9.setTotalPrice(order9.calculateTotalPrice());
+ order9.setCustomer(customer1);
+ message9.getBody().add("Order", order9);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList9 = new ArrayList<String>();
+ messagePathList9.add("body.Order");
+ ObjectMapper mapper9 = new ObjectMapper();
+ objectList9 = mapper9.createObjectList(message9, messagePathList9);
+ //System.out.println("objectList9 has " + objectList9.size() + " elements: " + objectList9.toString());
+
+ message10 = MessageFactory.getInstance().getMessage(MessageType.JAVA_SERIALIZED);
+ order10 = new Order();
+ order10.setOrderId(10);
+ order10.setQuantity(30);
+ order10.setUnitPrice(new Float("60.0"));
+ order10.setTotalPrice(order10.calculateTotalPrice());
+ order10.setCustomer(customer2);
+ message10.getBody().add("Order", order10);
+ message10.getBody().add("Customer", customer2);
+
+ // extract the order from the message, so drools can process it
+ List<String> messagePathList10 = new ArrayList<String>();
+ messagePathList10.add("body.Order");
+ messagePathList10.add("body.Customer");
+ ObjectMapper mapper10 = new ObjectMapper();
+ objectList10 = mapper10.createObjectList(message10, messagePathList10);
+ //System.out.println("objectList10 has " + objectList10.size() + " elements: " + objectList10.toString());
+
+ } catch (ObjectMappingException ome) {
+ System.out.println("Caught ObjectMappingException" + ome.getMessage());
+ }
+ }
+
+ @Test
+ public void drlStatefulOverTime() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRules("drl/OrderDiscountOnMultipleOrders.drl", null, false, false, message4, objectList4);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message5, objectList5);
+ Customer customerFromMessage5 = (Customer) message5.getBody().get("Customer");
+ assertNull(customerFromMessage5);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message6, objectList6);
+ Customer customerFromMessage6 = (Customer) message6.getBody().get("Customer");
+ assertEquals(customerFromMessage6.getDiscount(), 10);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message7, objectList7);
+ Customer customerFromMessage7 = (Customer) message7.getBody().get("Customer");
+ assertEquals(customerFromMessage7.getDiscount(), 0);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message8, objectList8);
+ Customer customerFromMessage8 = (Customer) message8.getBody().get("Customer");
+ assertEquals(customerFromMessage8.getDiscount(), 10);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", false, message9, objectList9);
+ Customer customerFromMessage9 = (Customer) message9.getBody().get("Customer");
+ assertEquals(customerFromMessage9.getDiscount(), 10);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders.drl", true, message10, objectList10);
+ Customer customerFromMessage10 = (Customer) message10.getBody().get("Customer");
+ assertEquals(customerFromMessage10.getDiscount(), 10);
+
+ System.out.println("test drlStateful with continuation passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+ @Test
+ public void drlStatefulOverTime2() throws ObjectMappingException
+ {
+ DroolsRuleService droolsRuleService = new DroolsRuleService();
+ try {
+ droolsRuleService.executeStatefulRules("drl/OrderDiscountOnMultipleOrders2.drl", null, false, false, message4, objectList4);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders2.drl", false, message5, objectList5);
+ Customer customerFromMessage5 = (Customer) message5.getBody().get("Customer");
+ assertNull(customerFromMessage5);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders2.drl", false, message6, objectList6);
+ Order orderFromMessage6 = (Order) message6.getBody().get("Order");
+ assertEquals(orderFromMessage6.getDiscount(), 10.0);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders2.drl", false, message7, objectList7);
+ Order orderFromMessage7 = (Order) message7.getBody().get("Order");
+ assertEquals(orderFromMessage7.getDiscount(), -10.0);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders2.drl", false, message8, objectList8);
+ Order orderFromMessage8 = (Order) message8.getBody().get("Order");
+ assertEquals(orderFromMessage8.getDiscount(), 10.0);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders2.drl", false, message9, objectList9);
+ Order orderFromMessage9 = (Order) message9.getBody().get("Order");
+ assertEquals(orderFromMessage9.getDiscount(), 10.0);
+
+ droolsRuleService.continueStatefulRulesExecution("drl/OrderDiscountOnMultipleOrders2.drl", true, message10, objectList10);
+ Order orderFromMessage10 = (Order) message10.getBody().get("Order");
+ assertEquals(orderFromMessage10.getDiscount(), 10.0);
+
+ System.out.println("test drlStateful with continuation passed");
+
+ } catch (RuleServiceException rse) {
+ System.out.println("Exception was thrown.");
+ rse.printStackTrace();
+ assertTrue(false);
+ }
+ }
+
+
+ public static junit.framework.Test suite() {
+ return new JUnit4TestAdapter(DroolsRuleServiceUnitTest.class);
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Order.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,81 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * 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,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2007
+ */
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author kstam
+ *
+ */
+public class Order implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+ private int orderId;
+ private int quantity;
+ private Float unitPrice;
+ private double discount;
+ private Float totalPrice;
+ private Customer customer;
+
+ public double getDiscount() {
+ return discount;
+ }
+ public void setDiscount(double discount) {
+ this.discount = discount;
+ }
+ public int getQuantity() {
+ return quantity;
+ }
+ public void setQuantity(int quantity) {
+ this.quantity = quantity;
+ }
+ public Float getTotalPrice() {
+ this.totalPrice = calculateTotalPrice();
+ return totalPrice;
+ }
+ public void setTotalPrice(Float totalPrice) {
+ this.totalPrice = totalPrice;
+ }
+ public Float getUnitPrice() {
+ return unitPrice;
+ }
+ public void setUnitPrice(Float unitPrice) {
+ this.unitPrice = unitPrice;
+ }
+ public int getOrderId() {
+ return orderId;
+ }
+ public void setOrderId(int orderId) {
+ this.orderId = orderId;
+ }
+ public Customer getCustomer() {
+ return customer;
+ }
+ public void setCustomer(Customer customer) {
+ this.customer = customer;
+ }
+
+ public Float calculateTotalPrice() {
+ return quantity * unitPrice;
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Policy.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,59 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ * This represents a policy that a driver is applying for.
+ *
+ * Obviously in the real world, there are actuaries to mess things up, but lets just pretend there is
+ * some simple base price and discount that we can calculate with relatively simple rules !
+ *
+ * @author Michael Neale
+ */
+public class Policy implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+ private String type = "COMPREHENSIVE";
+ private boolean approved = false;
+ private int discountPercent = 0;
+ private int basePrice;
+ private Driver driver;
+
+ public boolean isApproved() {
+ return approved;
+ }
+ public void setApproved(boolean approved) {
+ this.approved = approved;
+ }
+ public int getDiscountPercent() {
+ return discountPercent;
+ }
+ public void setDiscountPercent(int discountPercent) {
+ this.discountPercent = discountPercent;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void applyDiscount(int discount) {
+ discountPercent += discount;
+ }
+ public int getBasePrice() {
+ return basePrice;
+ }
+ public void setBasePrice(int basePrice) {
+ this.basePrice = basePrice;
+ }
+ public Driver getDriver() {
+ return driver;
+ }
+ public void setDriver(Driver driver) {
+ this.driver = driver;
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/java/org/jboss/soa/esb/services/rules/Rejection.java 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,27 @@
+package org.jboss.soa.esb.services.rules;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author Michael Neale
+ */
+public class Rejection implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ private String reason;
+
+ public Rejection(String reason) {
+ this.reason = reason;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+}
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/cache/http%3A%2F%2Flocalhost%3A8080%2Fdrools-jbrms%2Forg.drools.brms.JBRMS%2Fpackage%2Forg.jboss.soa.esb.services.rules%2FLATEST
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/decisionTable/PolicyPricing.xls
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/decisionTable/PolicyPricing.xls
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscount.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscount.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscount.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,34 @@
+#created on: Oct 23, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+rule "Pricing Rule - low quantity"
+
+ when
+ order : Order( quantity < 10)
+ then
+ System.out.println("low volume");
+ #we can modify the object
+ order.setDiscount(0);
+ #demonstrate that we can add a new object to the message
+ message.getBody().add("DiscountObject"+ order.getOrderId(),"0%");
+
+end
+
+rule "Prioing Rule - high quantity"
+
+ when
+ order : Order( quantity >= 10)
+ then
+ System.out.println("high volume");
+ #we can modify the object
+ order.setDiscount(10);
+ #demonstrate that we can add a new object to the message
+ message.getBody().add("DiscountObject"+order.getOrderId(),"10%");
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,28 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Customer;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+
+rule "Apply 10% discount if totalPrice of all orders is over 100"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer()
+ $i : Number(intValue >= 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+ then
+ $c.setDiscount( 10 );
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i );
+ message.getBody().add("Customer", $c);
+ System.out.println( "Message has a Customer " + message.getBody().get("Customer").toString() );
+end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders2.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders2.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders2.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,69 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Customer;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+
+rule "Apply 10% discount if totalPrice of all orders is over 1000"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer(discount == 0)
+ $o : Order(customer == $c, discount == 0)
+ $i : Number(intValue >= 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+
+ then
+ #$c.setDiscount(10);
+ $o.setDiscount(10);
+ System.out.println("set discount on order " + $o.getOrderId());
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i + " and a discount" );
+ #message.getBody().add("Customer", $c);
+ #System.out.println( "Message has a Customer " + message.getBody().get("Customer").toString() );
+ # System.out.println( "Message has a Customer " + message.getBody().get("CustomerWithDiscount").toString() );
+ #update ($c);
+end
+
+rule "Apply -10% discount if totalPrice of all orders is less than 1000"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer(discount == 0)
+ $o : Order(customer == $c, discount == 0)
+ $i : Number(intValue < 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+
+ then
+ #System.out.println("The totalOrder value for order: " + $o.getOrderId() + " is: " + $o.getTotalPrice());
+ $o.setDiscount(-10);
+ #$c.setDiscount(10);
+ System.out.println("set negative discount on order " + $o.getOrderId());
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i + " and no discount" );
+ # message.getBody().add("CustomerWithDiscount", $c);
+ # message.getBody().add("Customer", $c);
+ #System.out.println( "Message has a Customer " + message.getBody().get("Customer").toString() );
+ # System.out.println( "Message has a Customer " + message.getBody().get("CustomerWithDiscount").toString() );
+ # update ($o);
+end
+
+#rule "apply discount to order"
+# no-loop true
+# when
+# $c : Customer(discount > 0)
+# $o : Order(discount == 0)
+# then
+# $o.setDiscount($c.getDiscount());
+# System.out.println("set discount on order " + $o.getOrderId());
+# update ($o);
+#end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders3.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders3.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountOnMultipleOrders3.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,54 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+import org.jboss.soa.esb.services.rules.Customer;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+
+rule "Apply 10% discount if totalPrice of all orders is over 1000"
+ no-loop true
+ dialect "java"
+ when
+ $c : Customer()
+ $i : Number(intValue >= 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+ then
+ $c.setDiscount(10);
+ System.out.println( "Customer " + $c.getName() + " now has a shopping total of " + $i + " and a discount" );
+
+end
+
+rule "Retract order if totalPrice of all orders is less than 1000"
+ no-loop true
+ salience 0
+ when
+ $c : Customer(discount == 0)
+ $o : Order(customer == $c, discount == 0)
+ $i : Number(intValue < 1000) from accumulate ( Order( customer == $c, $totalPrice : totalPrice),
+ sum( $totalPrice ) );
+
+
+ then
+ retract($0):
+end
+
+rule "apply discount to order"
+ no-loop true
+ salience -50
+ when
+ $c : Customer(discount > 0)
+ $o : Order(customer == $c, discount == 0)
+ then
+ $o.setDiscount($c.getDiscount());
+ System.out.println("set discount on order " + $o.getOrderId());
+ update ($o);
+end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountWithCollections.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountWithCollections.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/drl/OrderDiscountWithCollections.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,62 @@
+#created on: Oct 22, 2007
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Order;
+
+import java.util.Arrays;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+rule "Pricing Rule - create array for results"
+ # we use an array because it make the JUnit test easier to implement
+ # since we can control which order is in which position of the array
+ # for comparison purposes.
+ salience 20
+ when
+ orderCount : Integer() from accumulate( Order(),
+ init( int x = 0; ),
+ action( x++; ),
+ result( new Integer(x) ) );
+ then
+ System.out.println("the number of inserted orders is: " + orderCount);
+ insert (new Order[orderCount]);
+end
+
+rule "Pricing Rule - low quantity"
+
+ when
+ updatedOrders : Order[]()
+ order : Order( quantity < 10)
+ then
+ System.out.println("low volume");
+ # we can modify the object
+ order.setDiscount(0);
+ # we can add a new object to the message
+ message.getBody().add("DiscountObject"+ order.getOrderId(),"0%");
+ updatedOrders[order.getOrderId() - 1] = order;
+end
+
+rule "Prioing Rule - high quantity"
+
+ when
+ updatedOrders : Order[]()
+ order : Order( quantity >= 10)
+ then
+ System.out.println("high volume");
+ # we can modify the object
+ order.setDiscount(10);
+ # we can add a new object to the message
+ message.getBody().add("DiscountObject"+order.getOrderId(),"10%");
+ updatedOrders[order.getOrderId() - 1] = order;
+end
+
+rule "Pricing Rule - add array to message"
+ salience -20
+ when
+ updatedOrders : Order[]()
+ then
+ message.getBody().add("UpdatedOrders", updatedOrders);
+end
\ No newline at end of file
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/acme.dsl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/acme.dsl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/acme.dsl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,14 @@
+[condition][$driver]There is a Driver=$driver : Driver()
+[condition][$driver]- age less than {age} years old=age < {age}
+[condition][$driver]- age greater than {age} years old=age > {age}
+[condition][$driver]- has had more than {number} prior claims=priorClaims > {number}
+[condition][$driver]- has a location risk profile of '{risk}'=locationRiskProfile == "{risk}"
+[condition][$driver]- age is at least {age}=age >= {age}
+[condition][$driver]- age is between {lower} and {upper} years old=age >= {lower}, age <= {upper}
+[condition][$driver]- has had exactly {number} prior claims=priorClaims == {number}
+[condition][]Policy has a driver=Policy(driver == $driver)
+[condition][]Policy type is '{type}'=Policy(type == "{type}")
+[consequence][]Reject Policy with explanation : '{reason}'=message.getBody().add("Rejection", new Rejection("{reason}"));
+[condition][]Policy has not been rejected=not Rejection()
+[consequence][]Approve Policy with the reason : '{reason}'=message.getBody().add("Approve", new Approve("{reason}"));
+[consequence][]logRule=System.out.println("the rule that executed is: " + drools.getRule());
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/approval.dslr
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/approval.dslr (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/dsl/approval.dslr 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,110 @@
+#created on: Oct 23, 2007
+package org.jboss.soa.esb.services.rules
+
+expander acme.dsl
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Driver;
+import org.jboss.soa.esb.services.rules.Policy;
+import org.jboss.soa.esb.services.rules.Rejection;
+import org.jboss.soa.esb.services.rules.Approve;
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+#
+# These rules are mostly "negative" in the sense that
+# a driver has to not be rejected. There is
+# one rule that allows immediate approval however.
+#
+
+rule "Driver has had too many accidents"
+ when
+ There is a Driver
+ - has had more than 3 prior claims
+ then
+ Reject Policy with explanation : 'Too many accidents'
+ logRule
+
+end
+
+rule "Driver is underage"
+ when
+ There is a Driver
+ - age less than 18 years old
+ then
+ Reject Policy with explanation : 'Driver is underage. Try another insurer'
+ logRule
+end
+
+rule "Driver is in marginal age"
+ when
+ There is a Driver
+ - age is between 18 and 24 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+ then
+ Reject Policy with explanation : 'No accidents allowed if in marginal age group'
+ logRule
+end
+
+rule "Driver in unsafe area for marginal age"
+ when
+ Policy type is 'COMPREHENSIVE'
+ There is a Driver
+ - age less than 25 years old
+ - has a location risk profile of 'HIGH'
+ then
+ Reject Policy with explanation : 'Marginal age driver in high risk area'
+ logRule
+end
+
+rule "Driver in unsafe area with priors"
+ when
+ There is a Driver
+ - has a location risk profile of 'MED'
+ - age less than 25 years old
+ - has had more than 1 prior claims
+ Policy type is 'COMPREHENSIVE'
+
+ then
+ Reject Policy with explanation : 'Driver in that area is too risky - given past accidents and age.'
+ logRule
+end
+
+rule "Driver unsafe for third party"
+ when
+ Policy type is 'THIRD_PARTY'
+ There is a Driver
+ - has had more than 2 prior claims
+ then
+ Reject Policy with explanation : 'Too many priors for third party'
+ logRule
+
+end
+
+rule "Driver in bad area for theft"
+ when
+ Policy type is 'FIRE_THEFT'
+ There is a Driver
+ - has a location risk profile of 'HIGH'
+ then
+ Reject Policy with explanation : 'Unsafe area for theft'
+ logRule
+end
+
+rule "Quick approval - safe driver, any policy type"
+ when
+
+ There is a Driver
+ - age is at least 30
+ - has had exactly 0 prior claims
+ Policy has a driver
+ Policy has not been rejected
+
+ then
+ Approve Policy with the reason : 'Driver is safe and mature.'
+ logRule
+end
+
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/brmsdeployedrules.properties
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/brmsdeployedrules.properties (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/brmsdeployedrules.properties 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,11 @@
+newInstance=true
+
+file=/shared/workspace/ruleservice/product/services/jbrules/src/test/resources/ruleAgent/package/org.jboss.soa.esb.services.rules.pkg
+#dir=/shared/workspace/ruleservice/product/services/jbrules/src/test/resources/ruleAgent/package
+
+
+#url=http://localhost:8080/drools-jbrms/org.drools.brms.JBRMS/package/org.jboss.soa.esb.services.rules/LATEST
+#localCacheDir=/shared/workspace/ruleservice/product/services/jbrules/src/test/resources/ruleAgent/cache
+poll=30
+
+name=insuranceconfig
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/insurancepolicy.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/insurancepolicy.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/pricing.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/pricing.drl (rev 0)
+++ labs/jbossesb/workspace/jdelong/rs/product/services/jbrules/src/test/resources/ruleAgent/pricing.drl 2007-11-14 02:40:00 UTC (rev 16572)
@@ -0,0 +1,63 @@
+#created on: Aug 23, 2006
+package org.jboss.soa.esb.services.rules
+
+#list any import classes here.
+import org.jboss.soa.esb.services.rules.Driver;
+import org.jboss.soa.esb.services.rules.Policy;
+
+
+#declare any global variables here
+global org.jboss.soa.esb.message.Message message;
+
+
+rule "Safe Youth"
+
+ when
+ #conditions
+ Driver(age >= 18, age <= 24, locationRiskProfile == "LOW", priorClaims == 0)
+ policy: Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(450);
+ System.out.println("Safe Youth - pay 450");
+
+end
+
+rule "Risky Youth"
+
+ when
+ #conditions
+ Driver(age >= 18, age <= 24, locationRiskProfile == "LOW", priorClaims >= 1)
+ policy : Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(700);
+ System.out.println("Risky Youth - pay 700");
+
+end
+
+rule "Safe Adult"
+
+ when
+ #conditions
+ Driver(age > 24, locationRiskProfile == "LOW", priorClaims == 0)
+ policy: Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(120);
+ System.out.println("Safe adult - pay 120");
+
+end
+
+rule "Risky Adult"
+
+ when
+ #conditions
+ Driver(age > 24, locationRiskProfile == "LOW", priorClaims >= 1)
+ policy: Policy(type == "COMPREHENSIVE")
+ then
+ #actions
+ policy.setBasePrice(300);
+ System.out.println("Risky adult - pay 300");
+
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list