[jboss-svn-commits] JBL Code SVN: r29250 - in labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main: java/org/drools/examples/broker/model and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 8 10:50:52 EDT 2009
Author: tirelli
Date: 2009-09-08 10:50:51 -0400 (Tue, 08 Sep 2009)
New Revision: 29250
Added:
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl
Modified:
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf
Log:
Improving fusion broker example
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java 2009-09-08 14:50:51 UTC (rev 29250)
@@ -31,6 +31,8 @@
import org.drools.examples.broker.model.StockTick;
import org.drools.examples.broker.ui.BrokerWindow;
import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
@@ -40,7 +42,7 @@
* @author etirelli
*/
public class Broker implements EventReceiver, BrokerServices {
- private static final String[] ASSET_FILES = { "/broker.drl", "/position.drl", "/position.rf" };
+ private static final String[] ASSET_FILES = { "/broker.drl", "/notify.drl", "/position.rf", "/position.drl" };
private BrokerWindow window;
private CompanyRegistry companies;
@@ -66,6 +68,7 @@
this.session.fireAllRules();
window.updateCompany( company.getSymbol() );
window.updateTick( tick );
+
} catch ( Exception e ) {
System.err.println("=============================================================");
System.err.println("Unexpected exception caught: "+e.getMessage() );
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Main.java 2009-09-08 14:50:51 UTC (rev 29250)
@@ -47,7 +47,7 @@
CompanyRegistry registry = new CompanyRegistry();
BrokerWindow window = new BrokerWindow( registry.getCompanies() );
window.show();
- Thread.currentThread().sleep( 10000 );
+ //Thread.sleep( 10000 );
Broker broker = new Broker( window, registry );
TimerService clock = new JDKTimerService(1);
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/model/PortfolioAction.java 2009-09-08 14:50:51 UTC (rev 29250)
@@ -56,8 +56,11 @@
this.quant = quant;
}
+ @Override
+ public String toString() {
+ return "PortfolioAction( "+action+" "+symbol+" "+quant+ " )";
+ }
-
}
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/BrokerWindow.java 2009-09-08 14:50:51 UTC (rev 29250)
@@ -78,8 +78,8 @@
frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
frame.setTitle( "Drools Fusion Example: Simple Broker" );
- frame.setResizable( false );
- frame.pack();
+ frame.setResizable( true );
+ frame.setSize(800, 350);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation( (screen.width-frame.getWidth())/2, (screen.height-frame.getHeight())/2 );
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/ui/ScrollingBanner.java 2009-09-08 14:50:51 UTC (rev 29250)
@@ -18,7 +18,6 @@
import java.awt.Color;
import java.awt.Dimension;
-import java.awt.Font;
import java.awt.Graphics;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl 2009-09-08 14:50:51 UTC (rev 29250)
@@ -81,6 +81,7 @@
# this rule shows a trick to get the last available event as well as
# how to call global services from the consequence
rule "sudden drop"
+ enabled true
agenda-group "report"
when
$st : StockTick( $sb : symbol, $ts : timestamp, $pr : price, $dt : delta < -0.05 ) from entry-point "StockTick stream"
Added: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl (rev 0)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/notify.drl 2009-09-08 14:50:51 UTC (rev 29250)
@@ -0,0 +1,13 @@
+package org.drools.examples.broker
+
+import org.drools.examples.broker.model.PortfolioAction
+import org.drools.runtime.rule.FactHandle
+
+rule "Portfolio action no longer needed"
+ dialect "mvel"
+ ruleflow-group "notify"
+ when
+ $pa : PortfolioAction()
+ then
+ retract( $pa );
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.drl 2009-09-08 14:50:51 UTC (rev 29250)
@@ -2,6 +2,7 @@
import org.drools.examples.broker.model.SuddenDropEvent
import org.drools.examples.broker.model.PortfolioAction
+import org.drools.examples.broker.model.Action
import java.util.Map
import java.util.HashMap
@@ -9,10 +10,6 @@
dialect "mvel"
-declare PortfolioAction
- @role( event )
-end
-
# an event declaration to represent situations
# where a suddent drop happens. In this case we are not
# defining any explicit expiration policy.
@@ -20,6 +17,7 @@
@role( event )
end
+# here we have an example of a rule that controls a process
rule "Start adjust position process"
when
$sde : SuddenDropEvent( ) from entry-point "Analysis Events"
@@ -28,15 +26,46 @@
drools.getKnowledgeRuntime().startProcess( "adjust position", variables );
end
-rule "Check current position and take action if necessary"
+
+# bellow we have rules controlled by the process,
+# i.e., the process will fire these rules when necessary
+# to re-evaluate the position
+rule "If the drop is between 6% and 8%, buy more shares"
ruleflow-group "evaluate position"
when
- $sde : SuddenDropEvent( ) from entry-point "Analysis Events"
+ $sde : SuddenDropEvent( percent >= -0.08 && < -0.06 ) from entry-point "Analysis Events"
then
with( pa = new PortfolioAction() ) {
- action = selectAction(),
+ action = Action.BUY,
symbol = $sde.symbol,
quant = 100
}
- entryPoints["Analysis Events"].insert( pa );
-end
\ No newline at end of file
+ insert( pa );
+end
+
+rule "If the drop is on more than 8%, sell shares"
+ ruleflow-group "evaluate position"
+when
+ $sde : SuddenDropEvent( percent < -0.08 ) from entry-point "Analysis Events"
+then
+ with( pa = new PortfolioAction() ) {
+ action = Action.SELL,
+ symbol = $sde.symbol,
+ quant = 100
+ }
+ insert( pa );
+end
+
+
+rule "If the drop is between 5% and 6%, do nothing"
+ ruleflow-group "evaluate position"
+when
+ $sde : SuddenDropEvent( percent >= -0.06 ) from entry-point "Analysis Events"
+then
+ with( pa = new PortfolioAction() ) {
+ action = Action.NOACTION,
+ symbol = $sde.symbol
+ }
+ insert( pa );
+end
+
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf 2009-09-08 14:10:26 UTC (rev 29249)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/position.rf 2009-09-08 14:50:51 UTC (rev 29250)
@@ -1,53 +1,62 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://drools.org/drools-5.0/process"
- xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
- xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
- type="RuleFlow" name="Adjust Position" id="adjust position" package-name="org.drools.examples.broker.model" >
-
- <header>
- <imports>
- <import name="org.drools.examples.broker.model.Action" />
- <import name="org.drools.examples.broker.model.PortfolioAction" />
- </imports>
- <variables>
- <variable name="symbol" >
- <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
- </variable>
- <variable name="quant" >
- <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
- </variable>
- </variables>
- </header>
-
- <nodes>
- <start id="1" name="Start" x="16" y="101" width="48" height="48" />
- <end id="3" name="End" x="515" y="101" width="48" height="48" />
- <ruleSet id="4" name="Evaluate Position" x="96" y="101" width="106" height="48" ruleFlowGroup="evaluate position" />
- <actionNode id="6" name="Buy Shares" x="315" y="16" width="87" height="48" >
- <action type="expression" dialect="mvel" >System.out.println( "Buying #{quant} "+symbol+" shares" );</action>
- </actionNode>
- <actionNode id="7" name="Sell Shares" x="317" y="192" width="87" height="48" >
- <action type="expression" dialect="mvel" >System.out.println( "Selling #{quant} "+symbol+" shares" );</action>
- </actionNode>
- <split id="11" name="Take Action" x="234" y="101" width="49" height="49" type="2" >
- <constraints>
- <constraint toNodeId="7" name="Sell" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.SELL ) from entry-point "Analysis Events"</constraint>
- <constraint toNodeId="12" name="No action" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.NOACTION ) from entry-point "Analysis Events"</constraint>
- <constraint toNodeId="6" name="Buy" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.BUY ) from entry-point "Analysis Events"</constraint>
- </constraints>
- </split>
- <join id="12" name="Action taken" x="434" y="101" width="49" height="49" type="2" />
- </nodes>
-
- <connections>
- <connection from="12" to="3" />
- <connection from="1" to="4" />
- <connection from="11" to="6" />
- <connection from="11" to="7" />
- <connection from="4" to="11" />
- <connection from="11" to="12" />
- <connection from="6" to="12" />
- <connection from="7" to="12" />
- </connections>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://drools.org/drools-5.0/process"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+ type="RuleFlow" name="Adjust Position" id="adjust position" package-name="org.drools.examples.broker.model" >
+
+ <header>
+ <imports>
+ <import name="org.drools.examples.broker.model.Action" />
+ <import name="org.drools.examples.broker.model.PortfolioAction" />
+ </imports>
+ <globals>
+ <global identifier="services" type="org.drools.examples.broker.BrokerServices" />
+ </globals>
+ <variables>
+ <variable name="symbol" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </variable>
+ <variable name="quant" >
+ <type name="org.drools.process.core.datatype.impl.type.UndefinedDataType" />
+ </variable>
+ </variables>
+ </header>
+
+ <nodes>
+ <start id="1" name="Start" x="16" y="101" width="80" height="48" />
+ <end id="3" name="End" x="1113" y="100" width="76" height="48" />
+ <ruleSet id="4" name="Evaluate Position" x="129" y="102" width="157" height="48" ruleFlowGroup="evaluate position" />
+ <actionNode id="6" name="Buy Shares" x="533" y="22" width="124" height="48" >
+ <action type="expression" dialect="mvel" >services.log( "Buying "+symbol+" shares" ) ;</action>
+ </actionNode>
+ <actionNode id="7" name="Sell Shares" x="533" y="204" width="124" height="48" >
+ <action type="expression" dialect="mvel" >services.log( "Selling "+symbol+" shares" );</action>
+ </actionNode>
+ <split id="11" name="Take Action" x="340" y="99" width="108" height="49" type="2" >
+ <constraints>
+ <constraint toNodeId="7" toType="DROOLS_DEFAULT" name="Sell" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.SELL ) </constraint>
+ <constraint toNodeId="13" toType="DROOLS_DEFAULT" name="No action" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.NOACTION ) </constraint>
+ <constraint toNodeId="6" toType="DROOLS_DEFAULT" name="Buy" priority="1" type="rule" dialect="mvel" >PortfolioAction( action == Action.BUY ) </constraint>
+ </constraints>
+ </split>
+ <join id="12" name="Action taken" x="709" y="99" width="141" height="49" type="2" />
+ <actionNode id="13" name="No Action" x="540" y="105" width="111" height="40" >
+ <action type="expression" dialect="mvel" >services.log( "Doing no changes to current position" );</action>
+ </actionNode>
+ <ruleSet id="14" name="Notify" x="939" y="104" width="80" height="40" ruleFlowGroup="notify" />
+ </nodes>
+
+ <connections>
+ <connection from="14" to="3" />
+ <connection from="1" to="4" />
+ <connection from="11" to="6" />
+ <connection from="11" to="7" />
+ <connection from="4" to="11" />
+ <connection from="6" to="12" />
+ <connection from="7" to="12" />
+ <connection from="13" to="12" />
+ <connection from="11" to="13" />
+ <connection from="12" to="14" />
+ </connections>
+
</process>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list