[jboss-svn-commits] JBL Code SVN: r16714 - in labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful: src/org/jboss/soa/esb/samples/quickstart/businessrules and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 20 23:49:24 EST 2007
Author: jeffdelong
Date: 2007-11-20 23:49:24 -0500 (Tue, 20 Nov 2007)
New Revision: 16714
Modified:
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/OrderDiscountOnMultipleOrders.drl
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder2.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder3.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/build.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/deployment.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbm-queue-service.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbmq-queue-service.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jboss-esb.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/readme.txt
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/smooks-res.xml
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/SetupMessage.java
labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/test/SendJMSMessage.java
Log:
Initial submission of stateful quickstart
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/OrderDiscountOnMultipleOrders.drl
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/OrderDiscountOnMultipleOrders.drl 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/OrderDiscountOnMultipleOrders.drl 2007-11-21 04:49:24 UTC (rev 16714)
@@ -14,25 +14,24 @@
-rule "Apply 10% discount if totalPrice of all orders is over 100"
- no-loop true
+rule "Apply 10% discount to customer if totalPrice of all their orders is over 100"
+ dialect "mvel"
when
$c : Customer()
- $i : Number(intValue >= 100) from accumulate ( OrderHeader( customer == $c, $totalAmount : totalAmount),
+ $i : Number(intValue >= 100) from accumulate ( OrderHeader( customer.userName == $c.userName, $totalAmount : totalAmount),
sum( $totalAmount ) )
then
- #System.out.println("The totalOrder value for order: " + order.getOrderId() + " is: " + $totalAmount
$c.setOrderDiscount( 10 );
System.out.println( "Customer " + $c.getUserName() + " now has a shopping total of " + $i );
end
-rule "apply discount to order"
- no-loop true
+rule "apply customer discount to latest order"
when
- $c : Customer(orderDiscount > 0)
- $o : OrderHeader(customer == $c, orderDiscount == 0)
+ $c : Customer()
+ $o : OrderHeader(customer.userName == $c.userName)
then
- $o.setOrderDiscount($c.getOrderDiscount());
- System.out.println("set discount on order " + $o.getOrderId());
- retract ($o);
-end
\ No newline at end of file
+ $o.setOrderDiscount($c.getOrderDiscount());
+ System.out.println("set discount of " + $o.getOrderDiscount() +
+ " on order " + $o.getOrderId() +
+ " for customer " + $c.getUserName());
+end
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder2.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder2.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder2.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -1,4 +1,4 @@
-<Order orderId="2" orderDate="Wed Nov 15 13:45:28 EST 2006" statusCode="0"
+<Order orderId="2" orderDate="Wed Nov 15 13:45:28 EST 2006" statusCode="1"
netAmount="59.97" totalAmount="64.92" tax="4.95">
<Customer userName="user1" firstName="Harry" lastName="Fletcher" state="SD"/>
<OrderLines>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder3.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder3.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/SampleOrder3.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -1,4 +1,4 @@
-<Order orderId="3" orderDate="Wed Nov 15 13:45:28 EST 2006" statusCode="0"
+<Order orderId="3" orderDate="Wed Nov 15 13:45:28 EST 2006" statusCode="2"
netAmount="59.97" totalAmount="64.92" tax="4.95">
<Customer userName="user1" firstName="Harry" lastName="Fletcher" state="SD"/>
<OrderLines>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/build.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/build.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/build.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -1,11 +1,11 @@
-<project name="Quickstart_business_rules_service" default="run" basedir=".">
+<project name="Quickstart_business_ruleservice_stateful" default="run" basedir=".">
<description>
${ant.project.name}
${line.separator}
</description>
- <property name="additional.deploys" value="MyBusinessRulesDiscount.drl MyBusinessRules.drl MyRoutingRules.drl smooks-res.xml"/>
+ <property name="additional.deploys" value="OrderDiscountOnMultipleOrders.drl smooks-res.xml"/>
<!-- Import the base Ant build script... -->
<import file="../conf/base-build.xml"/>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/deployment.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/deployment.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/deployment.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -4,7 +4,4 @@
<depends>jboss.esb:deployment=smooks.esb</depends>
<depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_Request_GW</depends>
<depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_Request_ESB</depends>
- <depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_ConciergeManager</depends>
- <depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_DistributionManager</depends>
- <depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_BasicShipping</depends>
</jbossesb-deployment>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbm-queue-service.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbm-queue-service.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbm-queue-service.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -12,22 +12,4 @@
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
- <mbean code="org.jboss.jms.server.destination.QueueService"
- name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_ConciergeManager"
- xmbean-dd="xmdesc/Queue-xmbean.xml">
- <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
- <depends>jboss.messaging:service=PostOffice</depends>
- </mbean>
- <mbean code="org.jboss.jms.server.destination.QueueService"
- name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_DistributionManager"
- xmbean-dd="xmdesc/Queue-xmbean.xml">
- <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
- <depends>jboss.messaging:service=PostOffice</depends>
- </mbean>
- <mbean code="org.jboss.jms.server.destination.QueueService"
- name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_BasicShipping"
- xmbean-dd="xmdesc/Queue-xmbean.xml">
- <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
- <depends>jboss.messaging:service=PostOffice</depends>
- </mbean>
- </server>
+</server>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbmq-queue-service.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbmq-queue-service.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jbmq-queue-service.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -12,22 +12,4 @@
jboss.mq:service=DestinationManager
</depends>
</mbean>
- <mbean code="org.jboss.mq.server.jmx.Queue"
- name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_ConciergeManager">
- <depends optional-attribute-name="DestinationManager">
- jboss.mq:service=DestinationManager
- </depends>
- </mbean>
- <mbean code="org.jboss.mq.server.jmx.Queue"
- name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_DistributionManager">
- <depends optional-attribute-name="DestinationManager">
- jboss.mq:service=DestinationManager
- </depends>
- </mbean>
- <mbean code="org.jboss.mq.server.jmx.Queue"
- name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_Business_Rules_BasicShipping">
- <depends optional-attribute-name="DestinationManager">
- jboss.mq:service=DestinationManager
- </depends>
- </mbean>
</server>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jboss-esb.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jboss-esb.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/jboss-esb.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -21,8 +21,8 @@
<services>
- <service category="Business_RulesServices"
- name="Business_Rules_Service" description="The main entry point">
+ <service category="OrderServices"
+ name="OrderDiscountService" description="Calculates a discount based on past orders">
<listeners>
<!-- Gateway -->
<jms-listener name="TheGateway"
@@ -31,13 +31,11 @@
busidref="quickstartEsbChannel" maxThreads="1">
</jms-listener>
</listeners>
- <actions>
- <!--
- <action name="print-before" class="org.jboss.soa.esb.actions.SystemPrintln">
+ <actions mep="OneWay">
+ <action name="print-before" class="org.jboss.soa.esb.actions.SystemPrintln">
<property name="message" value="Message before transformation" />
- </action>
- -->
-
+ </action>
+
<action name="transform"
class="org.jboss.soa.esb.actions.converters.SmooksTransformer">
<property name="resource-config"
@@ -46,29 +44,28 @@
<action name="fixUpMessage"
class="org.jboss.soa.esb.samples.quickstart.businessrules.SetupMessage">
- <property name="status" value="60" /><!-- status was not in order XML -->
- </action>
+ </action>
- <!-- Use the BRP to calculate the order discount -->
+ <!-- Use the BRP to calculate the order discount -->
<action
class="org.jboss.soa.esb.actions.BusinessRulesProcessor"
- name="BRP2">
+ name="OrderDiscountBasedOnCustomerHistory">
<property name="ruleSet"
- value="MyBusinessRulesDiscount.drl" />
- <property name="ruleReload" value="true" />
- <property name="stateful" value="stateful" />
+ value="OrderDiscountOnMultipleOrders.drl" />
+ <property name="ruleReload" value="false" />
+ <property name="stateful" value="true" />
<property name="object-paths">
<object-path esb="body.TheOrderHeader" />
<object-path esb="body.TheCustomer" />
</property>
</action>
- <action name="reviewMessage2"
+ <action name="reviewMessage"
class="org.jboss.soa.esb.samples.quickstart.businessrules.ReviewMessage">
<property name="stuff" value="After Order Discount"/>
- </action>
+ </action>
+ </actions>
-
</service>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/readme.txt
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/readme.txt 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/readme.txt 2007-11-21 04:49:24 UTC (rev 16714)
@@ -2,11 +2,12 @@
=========
Demonstrates the use of the BusinessRulesProcessor which allows for
modification of the POJOs attached to an ESB Message. The example uses Rules
- to calculate the priority associated with an inbound order for later routing,
- plus it calculates the discount percentage associated with an order.
+ to calculate the discount of an inbound order based on the customer's past
+ history of orders. As such it is an example of a stateful rule service.
- Make sure you have run simple_cbr, transformation_XML2POJO and fun_cbr
- quickstarts as their principles are used in this more complex example.
+ Make sure you have run simple_cbr, transformation_XML2POJO, fun_cbr, and
+ business_rules_service quickstarts as their principles are used in this
+ more complex example.
Running this quickstart:
========================
@@ -37,11 +38,17 @@
What to look at in this Quickstart:
===================================
- Review the 3 different .drl files to see the distinction between business
- rules used for calculation/validation and rules used for routing.
+ Look at the jboss-esb.xml and notice how the stateful="true" is set on the
+ BusinessRulesProcessor action of the OrderDiscountService. Review the
+ OrderDiscountOnMultipleOrders.drl file to see how accumulation works.
- The customer status is actually set in the jboss-esb.xml via the SetupMessage
- action since it is not provided with the inbound XML. You don't want a
- customer to determine their status. In a real world situation, another
- system would be integrated via an action/service, that first calculates the
- customer's status (frequent flier, volume of previous purchases, etc.)
\ No newline at end of file
+ Stateful rule services must be told via message properties when to continue with
+ the current stateful session and when to dispose of it. This is accomplished via
+ the SetupMessage action based on the orderStatus provided with the inbound XML.
+
+ Because there is no persistence in this example, the customer object created from
+ each XML message is actually a different Java object (even though the values are
+ all the same). These are separately inserted into the stateful session, and the
+ rules treat them as different objects. A real life implementation would detect
+ that the customer already existed, and only insert one customer object into the
+ engine stateful session.
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/smooks-res.xml
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/smooks-res.xml 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/smooks-res.xml 2007-11-21 04:49:24 UTC (rev 16714)
@@ -46,9 +46,9 @@
</param>
</resource-config>
- <resource-config selector="order orderlines orderline">
+ <!--resource-config selector="order orderlines orderline">
<resource>/org/jboss/soa/esb/dvdstore/orderitem.st</resource>
- </resource-config>
+ </resource-config-->
<resource-config selector="decoder:LongDate">
<resource>org.milyn.javabean.decoders.CalendarDecoder</resource>
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/SetupMessage.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/SetupMessage.java 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/SetupMessage.java 2007-11-21 04:49:24 UTC (rev 16714)
@@ -38,19 +38,35 @@
if(transformedBeans != null) {
OrderHeader header = (OrderHeader) transformedBeans.get("orderHeader");
Customer customer = (Customer) transformedBeans.get("customer");
- customer.setStatus(status); // demo purposes, passed in from the jboss-esb.xml
- message.getBody().add("TheOrderHeader",header);
- message.getBody().add("TheCustomer",customer);
+ message.getBody().add("TheOrderHeader", header);
+ message.getBody().add("TheCustomer", customer);
+
+ status = header.getStatusCode();
+
+ if (status == 0 ) {
+ message.getProperties().setProperty("dispose", false);
+ message.getProperties().setProperty("continue", false);
+
+ }
+
+ if (status == 1 ) {
+ message.getProperties().setProperty("dispose", false);
+ message.getProperties().setProperty("continue", true);
+ }
+
+ if (status == 2 ) {
+ message.getProperties().setProperty("dispose", true);
+ message.getProperties().setProperty("continue", true);
+ }
+
logger.info("Moved the transformed Order Header and Customer");
}
- message.getProperties().setProperty("dispose", false);
- message.getProperties().setProperty("continue", true);
return message;
}
public SetupMessage(ConfigTree configTree) {
- status = Integer.parseInt(configTree.getAttribute("status"));
+ // status = Integer.parseInt(configTree.getAttribute("status"));
}
}
Modified: labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/test/SendJMSMessage.java
===================================================================
--- labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/test/SendJMSMessage.java 2007-11-21 04:47:28 UTC (rev 16713)
+++ labs/jbossesb/workspace/jdelong/ruleservice/product/samples/quickstarts/business_ruleservice_stateful/src/org/jboss/soa/esb/samples/quickstart/businessrules/test/SendJMSMessage.java 2007-11-21 04:49:24 UTC (rev 16714)
@@ -104,7 +104,7 @@
System.out.println("---------------------------------------------");
sm.sendAMessage(fileContent);
- fileContent = sm.readAsciiFile("SampleOrder3.xml");
+ fileContent = sm.readAsciiFile("SampleOrder2.xml");
System.out.println("---------------------------------------------");
System.out.println(fileContent);
System.out.println("---------------------------------------------");
More information about the jboss-svn-commits
mailing list