Drools - Artezio

Download Report

Transcript Drools - Artezio

www.artezio.com
The art of technology
Drools
and
Drools 5 Fusion
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531
Fax: +7 (495) 232-2683 Email:
[email protected]
Drools is an open source rules engine,
which lets you express business logic rules in a
declarative way using non-XML native
language
2
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Agenda
• Drools Basics
-
Advantages of Drools
DRL file
Executing rules
Conflicts resolution
Updating knowledge in rules engine
• Drools Fusion (CEP)
- What is Complex Event Processing
- Drools Fusion vision
- Features and examples
3
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Advantages of Drools
• Separates application from conditions controlling the flow
- Rules can be modified by different groups
- No need to recompile or redeploy
- All rules are in one place
• Readable native non-XML language
- Easy to learn
- Eclipse plug-in helps to visualize rules
• Native BRMS implementation
• Complex event processing engine
• Rete algorithm
4
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
DRL file
rule "Extract and classify followers“ dialect=“java”
when
twitter : Twitter()
then
for (User user : twitter.getFollowers()) {
Follower follower = new Follower(); follower.setUser(user);
follower.setFollows(twitter);
follower.setClassification(TwitterUserType.getType(TwitterUtils.getTwitterI
nfluenceRatio(user)));
follower.setHasPicture(TwitterUtils.hasSetProfileImage(user));
insert(follower);
}
end
rule "User has no picture“ dialect=“java”
when
follower : Follower(hasPicture == false)
then
follower.setRanking(follower.getRanking() - 30.0);
end
5
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Executing rules
• First, we need to create rules knowledge base
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
• It parses and compiles DRL files
knowledgeBuilder.add(drlFileAsResource, ResourceType.DRL);
• It extracts named packages of rules for KnowledgeBaseFactory
Collection pkgs = knowledgeBuilder.getKnowledgePackages();
knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(pkgs);
6
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Executing rules
• KnowledgeSession provides the way of exposing objects to
be ruled
StatefulKnowledgeSession knowledgeSession =
knowledgeBase.newStatefulKnowledgeSession();
Twitter twitter = new Twitter(twitterUser, twitterPassword);
knowledgeSession.insert(twitter);
• Fire rules
knowledgeSession.fireAllRules();
7
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
www.artezio.com
The art of technology
Questions…(to be continued)
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531
Fax: +7 (495) 232-2683 Email:
[email protected]
Conflicts resolution
• Often we need non-trivial flow of rules
- Validate data in knowledge base
- Prepare base for future rules flow
- Cover rules from execution
It is solved by using salience parameter…
9
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Conflicts resolution (example)
• DRL file first block
package demo;
import demo.Machine;
import demo.Test;
import demo.TestDAO;
import java.util.Calendar;
import java.sql.Timestamp;
global TestDAO testDAO;
• Defining functions in DRL file
function void setTestsDueTime(Machine machine, int numberOfDays) { setDueTime(machine,
Calendar.DATE, numberOfDays);
}
function void setDueTime(Machine machine, int field, int amount) {
Calendar calendar = Calendar.getInstance();
…
machine.setTestsDueTime(new Timestamp(calendar.getTimeInMillis()));
}
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
10
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Conflicts resolution (example)
rule "Tests for type2, DNS server machine"
salience 100
when
machine : Machine( type == "Type2", functions contains "DNS Server")
then
Test test5 = testDAO.findByKey(Test.TEST5);
machine.getTests().add(test5);
insert( test5 );
end
rule "Due date for Test 5"
salience 50
when
machine : Machine()
Test( id == Test.TEST5 )
then
setTestsDueTime(machine, 14);
end
11
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Conflicts resolution
• Rules with higher salience will be fired first
- preparing objects for future rules execution
- filtering some instances from ruling
• Dynamic salience
rule "high value fires first“
salience (person.bonus * item.price)
when
person : Person()
item : Item()
then
...
end
12
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Updating knowledge in rules engine
• Knowledge base can be updated inside rule’s body
- insert()
–
Inserted object will be used by rules engines inside current
session
- update()
–
Updates existing in working memory object for the rest of rules
- delete()
–
Removed object will not be ruled on current execution
13
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Updating knowledge in rules engine
rule "Tests for type2, DNS server machine"
salience 100
when
machine : Machine( type == "Type2", functions contains "DNS Server")
then
Test test5 = testDAO.findByKey(Test.TEST5);
machine.getTests().add(test5);
update( machine );
end
rule "Due date for Test 5"
salience 50
when
machine : Machine( tests contains (testDAO.findByKey(Test.TEST5)) )
then
setTestsDueTime(machine, 14);
end
14
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Once again…
• Separates application from conditions controlling
the flow
• Significantly reduce the complexity of components
that implement the business-rules logic
• Rules engine expresses rules using a declarative
approach that is maintainable and extensible
• Easy to learn by Java developers
15
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
www.artezio.com
The art of technology
Questions… (to be continued)
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531
Fax: +7 (495) 232-2683 Email:
[email protected]
www.artezio.com
The art of technology
Drools 5 Fusion
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531
Fax: +7 (495) 232-2683 Email:
[email protected]
Agenda
• What is Complex Event Processing
• Drools Fusion scenario
• Features
-
Events
Session Clock
Streams support
Temporal reasoning
Event processing modes
Sliding windows
KnowledgeBase partitioning
Memory management
18
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
What is Complex Event Processing
Complex Event Processing is an event processing
concept for identifying the meaningful events
within an event cloud
19
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
What is Complex Event Processing
• CEP employs techniques like …
- detection of complex patterns of many events
- event correlation and abstraction
- event hierarchies
- relationships between events (causality, membership,
timing)
- event-driven processes
20
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Drools Fusion scenario
• Understand and handle events as first class
citizens of the platform
• Select a set of interesting events in a cloud or
stream of events
• Detect the relevant relationships (patterns) among
these events
• Take appropriate actions based on the patterns
detected
21
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features
•
•
•
•
•
•
•
•
Events
Session Clock
Streams support
Temporal reasoning
Event processing modes
Sliding windows
KnowledgeBase partinioning
Memory management
22
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Events
• Events, from a Drools perspective, are just a
special type of fact
-
usually immutable
strong temporal constraints
managed lifecycle
use of sliding windows
23
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Events
• Event declaration
public class VoiceCall {
private String originNumber;
private String destinationNumber;
private Date callDateTime;
private long callDuration;
// constructors, getters and setters
}
• DRL file
declare VoiceCall
@role( event )
@timestamp( callDateTime )
@duration( callDuration )
@expires( 1h35m )
end
Artezio LLC
24
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Session Clock
• Session clock provide availability of concept “now”
• Implements strategy pattern
- Rules testing
- Regular execution
- Special environments
–
–
clock synchronization
appServer provided clocks
- Rules replay or simulation
• Two default implementations are provided
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
25
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Session Clock
• Real time clock
KnowledgeSessionConfiguration config =
KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
config.setOption( ClockTypeOption.get("realtime") );
• Pseudo clock
KnowledgeSessionConfiguration conf =
KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
conf.setOption( ClockTypeOption.get( "pseudo" ) );
StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( conf, null );
SessionPseudoClock clock = session.getSessionClock();
FactHandle handle1 = session.insert( tick1 );
clock.advanceTime( 10, TimeUnit.SECONDS );
FactHandle handle2 = session.insert( tick2 );
clock.advanceTime( 30, TimeUnit.SECONDS );
FactHandle handle3 = session.insert( tick3 );
26
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Streams support
• Different forms of streams
-
JMS queues
database tables
raw sockets
Web Service calls
flat text files
etc.
• Events are orders by timestamp
• Meanings are usually extracted from correlation of
events and even streams
• Homogeneous and heterogeneous streams
27
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Streams support
StatefulKnowledgeSession session = ...
WorkingMemoryEntryPoint atmStream = session.getWorkingMemoryEntryPoint( "ATM
Stream" );
atmStream.insert( aWithdrawRequest );
rule "apply fee on withdraws on branches"
when
WithdrawRequest( $ai : accountId, processed == true )
from entry-point "Branch Stream"
CheckingAccount( accountId == $ai )
then
// apply a $2 fee on the account
end
28
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Temporal reasoning
$eventA : EventA( this after[ 3m30s, 4m ] $eventB )
3m30s <= $eventA.startTimestamp - $eventB.endTimeStamp <= 4m
$eventA : EventA( this before[ 3m30s, 4m ] $eventB )
$eventA : EventA( this coincides[15s, 10s] $eventB )
abs( $eventA.startTimestamp - $eventB.startTimestamp ) <= 15s &&
abs( $eventA.endTimestamp - $eventB.endTimestamp ) <= 10s
$eventA : EventA( this during[ 2s, 6s, 4s, 10s ] $eventB )
2s <= $eventA.startTimestamp - $eventB.startTimestamp <= 6s &&
4s <= $eventB.endTimestamp - $eventA.endTimestamp <= 10s
$eventA : EventA( this finishes[ 5s ] $eventB )
$eventB.startTimestamp < $eventA.startTimestamp &&
abs( $eventA.endTimestamp - $eventB.endTimestamp ) <= 5s
$eventA : EventA( this meets[ 5s ] $eventB )
abs( $eventB.startTimestamp - $eventA.endTimestamp) <= 5s
29
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Event Processing modes
• Cloud mode
- no notion of time
- no clock synchronization
- no events ordering
• Stream mode
-
time-ordered events
synchronization between stream by session clocks
automatic event lifecycle management
rules delaying
sliding window support
30
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Event Processing modes
• Enabling Stream mode
KnowledgeBaseConfiguration config =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
config.setOption( EventProcessingOption.STREAM );
or
drools.eventProcessingMode = stream
• Rules delaying using negative pattern
rule "Sound the alarm"
when
$f : FireDetected( )
not( SprinklerActivated( this after[0s,10s] $f ) )
then
// sound the alarm
end
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
31
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Sliding windows
• Sliding time windows
• Sliding length windows
rule "Sound the alarm in case temperature rises above threshold"
when
TemperatureThreshold( $max : max )
Number( doubleValue > $max ) from accumulate(
SensorReading( $temp : temperature ) over window:length( 100 ),
average( $temp ) )
then
// sound the alarm
end
32
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: KnowledgeBase partitioning
•
•
•
•
Does your hardware contain multiple processors?
Does your knowledge session process a high volume of facts?
Are the LHS of your rules expensive to evaluate? (ex: use expensive
"from" expressions)
Does your knowledge base contain hundreds or more rules?
KnowledgeBaseConfiguration config =
knowledgeBaseFactory.newKnowledgeBaseConfiguration();
config.setOption( MultithreadEvaluationOption.YES );
config.setOption( MaxThreadsOption.get(5) );
or
drools.multithreadEvaluation = <true|false>
drools.maxThreads = <-1|1..n>
33
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Features: Memory management
• explicitly, using the expiration policy
declare StockTick
@expires( 30m )
end
• implicitly, analyzing the temporal constraints on events
rule "correlate orders"
when
$bo : BuyOrderEvent( $id : id )
$ae : AckEvent( id == $id, this after[0,10s] $bo )
then
// do something
end
34
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
Finally…
• Session clocks provide an important concept of
“now”
• Events are usually immutable and have strong
relationships
• A list of operators allows to detect correlation of
events
- after
- before
- includes
• Sliding windows allow to accumulate data during
period of time
35
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]
www.artezio.com
The art of technology
Questions…
Artezio LLC
Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333
Phone: +7 (495) 981-0531
Fax: +7 (495) 232-2683 Email:
[email protected]