36
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 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]

Embed Size (px)

Citation preview

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.comThe art of technology

Droolsand

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]

2

Drools is an open source rules engine, which lets you express business logic rules in a

declarative way using non-XML native language

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

3

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

4

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

5

DRL file

rule "User has no picture“ dialect=“java”when

follower : Follower(hasPicture == false) then

follower.setRanking(follower.getRanking() - 30.0);end

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.getTwitterInfluenceRatio(user))); follower.setHasPicture(TwitterUtils.hasSetProfileImage(user)); insert(follower); } end

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

6

Executing rules

KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

knowledgeBuilder.add(drlFileAsResource, ResourceType.DRL);

Collection pkgs = knowledgeBuilder.getKnowledgePackages(); knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowledgeBase.addKnowledgePackages(pkgs);

• First, we need to create rules knowledge base

• It parses and compiles DRL files

• It extracts named packages of rules for KnowledgeBaseFactory

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

7

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();

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.comThe 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]

9

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…

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

10

Conflicts resolution (example)

package demo;

import demo.Machine; import demo.Test; import demo.TestDAO; import java.util.Calendar; import java.sql.Timestamp;

global TestDAO testDAO;

• DRL file first block

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()));

}

• Defining functions in DRL file

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

11

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

12

Conflicts resolution

• Rules with higher salience will be fired first- preparing objects for future rules execution- filtering some instances from ruling

• Dynamic saliencerule "high value fires first“salience (person.bonus * item.price)when

person : Person()item : Item()

then...

end

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

13

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

14

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

Updating knowledge in rules engine

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

15

• 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

Once again…

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.comThe 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.comThe 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]

18

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

19

What is Complex Event Processing

Complex Event Processing is an event processing concept for identifying the meaningful events

within an event cloud

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

20

• 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

What is Complex Event Processing

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

21

• 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

Drools Fusion scenario

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

22

Features

• Events• Session Clock• Streams support• Temporal reasoning• Event processing modes• Sliding windows• KnowledgeBase partinioning• Memory management

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

23

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

24

• Event declaration

Features: Events

public class VoiceCall {

private String originNumber; private String destinationNumber; private Date callDateTime; private long callDuration;

// constructors, getters and setters }

declare VoiceCall @role( event ) @timestamp( callDateTime ) @duration( callDuration ) @expires( 1h35m )

end

• DRL file

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

25

• 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

Features: Session Clock

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

26

• Real time clock

Features: Session Clock

KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();

config.setOption( ClockTypeOption.get("realtime") );

• Pseudo clockKnowledgeSessionConfiguration 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 );

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

27

• 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

Features: Streams support

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

28

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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

29

Features: Temporal reasoning

$eventA : EventA( this after[ 3m30s, 4m ] $eventB ) 3m30s <= $eventA.startTimestamp - $eventB.endTimeStamp <= 4m

$eventA : EventA( this before[ 3m30s, 4m ] $eventB )

abs( $eventA.startTimestamp - $eventB.startTimestamp ) <= 15s &&abs( $eventA.endTimestamp - $eventB.endTimestamp ) <= 10s

$eventA : EventA( this coincides[15s, 10s] $eventB )

2s <= $eventA.startTimestamp - $eventB.startTimestamp <= 6s && 4s <= $eventB.endTimestamp - $eventA.endTimestamp <= 10s

$eventA : EventA( this during[ 2s, 6s, 4s, 10s ] $eventB )

$eventB.startTimestamp < $eventA.startTimestamp && abs( $eventA.endTimestamp - $eventB.endTimestamp ) <= 5s

$eventA : EventA( this finishes[ 5s ] $eventB )

abs( $eventB.startTimestamp - $eventA.endTimestamp) <= 5s $eventA : EventA( this meets[ 5s ] $eventB )

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

30

• 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

Features: Event Processing modes

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

31

• Enabling Stream mode

Features: Event Processing modes

KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();

config.setOption( EventProcessingOption.STREAM );

drools.eventProcessingMode = stream or

• Rules delaying using negative patternrule "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 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

32

• Sliding time windows• Sliding length windows

Features: Sliding 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

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

33

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) );

drools.multithreadEvaluation = <true|false> drools.maxThreads = <-1|1..n>

or

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

34

Features: Memory management

• explicitly, using the expiration policy

• implicitly, analyzing the temporal constraints on events

declare StockTick @expires( 30m )

end

rule "correlate orders" when

$bo : BuyOrderEvent( $id : id ) $ae : AckEvent( id == $id, this after[0,10s] $bo )

then // do something

end

Artezio LLC Address: 3G Gubkina Str., suite 504, Moscow, Russia, 119333 Phone: +7 (495) 981-0531 Fax: +7 (495) 232-2683 Email: [email protected]

35

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

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.comThe art of technology

Questions…