1 / 36

Drools and Drools 5 Fusion

Drools and Drools 5 Fusion. Drools is an open source rules engine , which lets you express business logic rules in a declarative way using non-XML native language. Drools Basics Advantages of Drools DRL file Executing rules Conflicts resolution Updating knowledge in rules engine

hank
Télécharger la présentation

Drools and Drools 5 Fusion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Drools • and • Drools 5 Fusion

  2. Drools is an open source rules engine, which lets you express business logic rules in a declarative way using non-XML native language

  3. 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 Agenda

  4. 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 Advantages of Drools

  5. 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 rule "User has no picture“ dialect=“java” when follower : Follower(hasPicture == false) then follower.setRanking(follower.getRanking() - 30.0); end DRL file

  6. First, we need to create rules knowledge base KnowledgeBuilder knowledgeBuilder =KnowledgeBuilderFactory.newKnowledgeBuilder(); Executing rules • 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);

  7. KnowledgeSession provides the way of exposing objects to be ruled Executing rules StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession(); Twitter twitter = new Twitter(twitterUser, twitterPassword); knowledgeSession.insert(twitter); • Fire rules knowledgeSession.fireAllRules();

  8. Questions…(to be continued)

  9. 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… Conflicts resolution

  10. 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; Conflicts resolution (example) • 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())); }

  11. 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 Conflicts resolution (example) rule "Due date for Test 5" salience 50 when machine : Machine() Test( id == Test.TEST5 ) then setTestsDueTime(machine, 14); end

  12. Rules with higher salience will be fired first • preparing objects for future rules execution • filtering some instances from ruling • Dynamic salience Conflicts resolution rule "high value fires first“ salience (person.bonus * item.price) when person : Person()item : Item() then... end

  13. 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 Updating knowledge in rules engine

  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 Updating knowledge in rules engine rule "Due date for Test 5" salience 50 when machine : Machine(tests contains (testDAO.findByKey(Test.TEST5))) then setTestsDueTime(machine, 14); end

  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…

  16. Questions… (to be continued)

  17. Drools 5 Fusion

  18. 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 Agenda

  19. Complex Event Processing is an event processing concept for identifying the meaningful events within an event cloud What is Complex Event Processing

  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

  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

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

  23. Events, from a Drools perspective, are just a special type of fact • usually immutable • strong temporal constraints • managed lifecycle • use of sliding windows Features: Events

  24. Event declaration Features: Events 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

  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

  26. Real time clock Features: Session 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 );

  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

  28. StatefulKnowledgeSession session = ... WorkingMemoryEntryPoint atmStream = session.getWorkingMemoryEntryPoint( "ATM Stream" ); atmStream.insert( aWithdrawRequest ); Features: Streams support 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

  29. 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

  30. Cloud mode • nonotionoftime • noclocksynchronization • 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

  31. Enabling Stream mode Features: Event Processing modes 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

  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

  33. Doesyourhardwarecontainmultipleprocessors? • Doesyourknowledgesessionprocessahighvolumeoffacts? • Arethe LHS ofyourrulesexpensivetoevaluate? (ex: useexpensive "from" expressions) • Doesyourknowledgebasecontainhundredsormorerules? Features: KnowledgeBase partitioning KnowledgeBaseConfiguration config = knowledgeBaseFactory.newKnowledgeBaseConfiguration(); config.setOption( MultithreadEvaluationOption.YES ); config.setOption(MaxThreadsOption.get(5) ); or drools.multithreadEvaluation = <true|false> drools.maxThreads = <-1|1..n>

  34. explicitly, using the expiration policy • implicitly, analyzing the temporal constraints on events Features: Memory management 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

  35. 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 Finally…

  36. Questions…

More Related