rules engine overview denver java user's group sept 2007

23
Rules Engine Overview Scott Ryan September 2007

Upload: soaring-eagle-llc

Post on 13-May-2015

613 views

Category:

Documents


0 download

DESCRIPTION

An overview of rules engines and their development and deployment

TRANSCRIPT

Page 1: Rules Engine Overview Denver Java User's Group Sept 2007

Rules Engine Overview

Scott RyanSeptember 2007

Page 2: Rules Engine Overview Denver Java User's Group Sept 2007

Agenda

• Rule Systems Overview• Rule Development Options• Toolsets• Rule Management• Rule Modification• Sample Implementation

Page 3: Rules Engine Overview Denver Java User's Group Sept 2007

Overview

Page 4: Rules Engine Overview Denver Java User's Group Sept 2007

Major Components

• Working Memory/Sessionso Rule Sets

Packages Rules

o Factso Globals and Non Fact Objects

Page 5: Rules Engine Overview Denver Java User's Group Sept 2007

Working Memory

• Stateful• Stateless• Can be dynamically updated• Data can push or pull between Working

Memory

Page 6: Rules Engine Overview Denver Java User's Group Sept 2007

Rule Sets

• Contain groupings of Rule Packages• Are associated with a Session

Page 7: Rules Engine Overview Denver Java User's Group Sept 2007

Packages

• Contain sets of rules• Are serializable

Page 8: Rules Engine Overview Denver Java User's Group Sept 2007

Rules

• Come in various formatso DRL/DSLo XMLo Spreadsheeto BRMSo Spring annotated beans

• Are serializable• Loaded using various techniques

Page 9: Rules Engine Overview Denver Java User's Group Sept 2007

XML Rule

<!-- Check for XYZ Corp--> <rule name="XYZCorp" salience="-1"><!-- Parameters we can pass into the business rule --><parameter identifier="stockOffer"><class>StockOffer</class></parameter><!-- Conditions or 'Left Hand Side' (LHS) that must be met for business rule to fire --><java:condition>stockOffer.getStockName().equals("XYZ")</java:condition> <java:condition>stockOffer.getRecommendPurchase() == null</java:condition><java:condition>stockOffer.getStockPrice() &gt; 10</java:condition><!-- What happens when the business rule is activated --><java:consequence>stockOffer.setRecommendPurchase(StockOffer.NO); printStock(stockOffer);</java:consequence></rule>

Page 10: Rules Engine Overview Denver Java User's Group Sept 2007

DRL Rule

rule "Time Zone One"no-loop truewhen$w : WorkItem(address.state.value memberOf timeZoneOneStates);then$w.setPriority($w.getPriority()+ 128);end

Page 11: Rules Engine Overview Denver Java User's Group Sept 2007

Facts

• Objects that Rules act upon• Follow Java Bean Rules• Can be dynamically updated• No limit to number, type or state of objects

Page 12: Rules Engine Overview Denver Java User's Group Sept 2007

Global and Non Fact Objects

• Used to provide data or functions• Injected during packaging• Can be any Java object• Accessible via any Rule Format

Page 13: Rules Engine Overview Denver Java User's Group Sept 2007

Toolsets

• Eclipse Based Development• Eclipse Based Debugging• Log Debugging

Page 14: Rules Engine Overview Denver Java User's Group Sept 2007

Rule Management

• File and/or classpath loading• JNDI Loading• Database Loading• Pre-Compilation (Rules are serializable)• Pre-Packaging (Packages are

serializable)• Caching Strategies

Page 15: Rules Engine Overview Denver Java User's Group Sept 2007

Rule Modification

• Property or Database Driven• DSL based• BRMS based• XML Dynamic Modification

Page 16: Rules Engine Overview Denver Java User's Group Sept 2007

Sample Implementation

• Simple Replacement of existing Business Rule Interface

• Code

Page 17: Rules Engine Overview Denver Java User's Group Sept 2007

Problem Domain

Page 18: Rules Engine Overview Denver Java User's Group Sept 2007

Pros

• Declarative Programming Modelo Concentrate on the what not the how

• Increased Performanceo Speed and Scalability

• Easily modified which increases coordination between business and IT

• Separation of logic and data (Is this a good thing?)

Page 19: Rules Engine Overview Denver Java User's Group Sept 2007

Cons

• New thought processes• Somewhat black box• Separation of code and logic breaks OO

paradigm.

Page 20: Rules Engine Overview Denver Java User's Group Sept 2007

Spring Support Rule

@Rule( name="Set Pump to Cooling", documentation="If a floors temperature becomes too hot, and the floor's pump is off, set the pump in the cooling state.", salience=10 ) public class PumpOffWhenFloorsWarmEnough {

Page 21: Rules Engine Overview Denver Java User's Group Sept 2007

Spring Support When

@Condition public boolean isPumpOff(@Fact HeatPump pump) { return pump.getState() == OFF; }

Page 22: Rules Engine Overview Denver Java User's Group Sept 2007

Spring Support Then

@Consequence public void consequence(HeatPump pump) { pump.setState(COOLING); }

Page 23: Rules Engine Overview Denver Java User's Group Sept 2007

Spring Configuration

<bean id="pumpRuleSet" class="org.drools.spring.factory.RuleSetFactoryBean"> <property name="rules"> <set> <bean id="pump.OffWhenFloorsCoolEnough" ... /> <bean id="pump.OffWhenFloorsWarmEnough" .../> <bean id="pump.HeatingWhenFloorTooCold" .../> <bean id="pump.CoolingWhenFloorTooHot" .../> </set> </property></bean>