[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