Drools5 Community Training
Hands On Playing with Rules
      Sponsored by Plugtree
Hands On 1: Drools Expert
   Playing with Rules
   Drools5 Community Training
      version: 1.0-SNAPSHOT
     Release Date: 09/05/2011
Under The Creative Common License
Hands On 1: Drools Expert
   Playing with Rules
 Drools5 Community Training Course
  by Mauricio "Salaboy" Salatino and
  Esteban Aliverti is licensed under a
  Creative Commons Attribution 3.0
            Unported License.
Based on a work at salaboy.wordpress.
                  com.
 Permissions beyond the scope of this
   license may be available at http:
       //salaboy.wordpress.com/.
Overview

● Drools Expert Examples
   ○ Introduction examples
   ○ Conditional elements examples
   ○ Rules Attributes examples
Introduction Examples

● Project: drools5/01-DroolsExpert-Introduction
● Test: SimpleRulesExampleTest.java
● Rules: src/main/resources/rules/rules.drl
● Kbuilder, Kbase and Ksession (createKSession() method)
   ○ Take a look at the addEventListener() method
● DRL syntax in the rule file:
   ○ Take a look at the LHS
   ○ Take a look at the RHS
● Rules activation and execution (you can activate the logger)
Introduction Examples

● Exercise
   ○ Find a way to get "Warn when we have a POP songs and
     Playlist" Rule activated but not fired.
   ○ Find a way to get "Warn when we have a POP songs and
     Playlist" Rule activated and fired.
Conditional Elements examples
● Project: drools5/02-DroolsExpert-ConditionalElements
● Simple Rules Example:
   ○ Test Class: SimpleRulesExampleTest.java
   ○ Rules: SimpleRules.drl
   ○ Conditional Elements on LHS
   ○ from Conditional Element
● Advanced from Examples:
   ○ Test Class: AdvancedFromRulesExampleTest.java
   ○ Rules: AdvancedFromRules.drl
   ○ collect, accumulate, accumulate custom function, Using
     Hibernate session in from CE
Conditional Elements Examples

● Exercise 1
   ○ Replace "Add Playlists that contains songs with letter 'a'
     in their titles to the list using the accumulate conditional
     elements defining init, action, reverse and result functions.
     i.e:
             from accumulate(
     $s: Song() from $songs,
     init(),
     action(),
     reverse(),
     result()
 )
Conditional Elements examples

Solution:
rule "Playlists that contains songs with letter 'a' in their titles."
when
        $playlist: Playlist($songs: songs)
        $match: java.util.List(empty == false) from accumulate(
           $s: Song() from $songs,
           init( java.util.List result = new java.util.ArrayList();),
           action( if ($s.getTitle().contains("a")) result.add($s); ),
           result( result )
        )
then
        System.out.println("Playlist found: "+$playlist);
        for (int i=0; i<$match.size(); i++){
           System.out.println("t--"+$match.get(i));
        }
end
Conditional Elements examples

● Exercise 2
   ○ Create a custom accumulate function to collect random
     songs from a playlist.
   ○ Copy the SongsWithALetterOnTheirTitlesFunction.java implementation
Conditional Elements Examples

● eval Example:
    ○ Test Class: EvalRulesExampleTest.java
    ○ Rules: /rules/EvalRules.drl
    ○ use of eval in LHS

● exists Example:
    ○ Test Class: ExistsRulesExampleTest.java
    ○ Rules: ExistsRules.drl
    ○ use of exists and not in the LHS
Conditional Elements Examples

● Exercise
   ○ Replace "Warn when we have a Playlist longer than 9000
     seconds" with an equivalent Rule without using eval
Conditional Elements Examples

Solution
rule "Playlist longer than 9000 seconds without eval"
when
$playlist: Playlist($songs: songs) AND
       $n : Number(intValue > 9000) from accumulate(
             $s : Song() from $songs,
             sum($s.getDuration()))
then
System.out.println("We have found a Playlist
                     longer than 9000 seconds");
end
Rule Attributes examples

● Project: drools/03-DroolsExpert-RulesAttributes
● Test Class: RuleAttributesExampleTest.java
● Attributes:
   ○ salience
   ○ no-loop:
       ■ Test: noLoop() Rules: /rules/NoLoopRules.drl
   ○ lock-on-active:
       ■ Test: lockOnActive() Rules: /rules/LockOnActiveRules.drl
   ○ agenda-group:
       ■ Test: agendaGroup() Rules: /rules/AgendaGroupRules.drl
 
              
Questions?
Enjoy! Questions and Feedback are
always appreciated!
 
                     
    Contact us at
www.plugtree.com

Drools5 Community Training HandsOn 1 Drools DRL Syntax

  • 1.
        Drools5 Community Training Hands On Playing with Rules Sponsored by Plugtree
  • 2.
    Hands On 1:Drools Expert Playing with Rules Drools5 Community Training version: 1.0-SNAPSHOT Release Date: 09/05/2011 Under The Creative Common License
  • 3.
    Hands On 1:Drools Expert Playing with Rules Drools5 Community Training Course by Mauricio "Salaboy" Salatino and Esteban Aliverti is licensed under a Creative Commons Attribution 3.0 Unported License. Based on a work at salaboy.wordpress. com. Permissions beyond the scope of this license may be available at http: //salaboy.wordpress.com/.
  • 4.
    Overview ● Drools ExpertExamples ○ Introduction examples ○ Conditional elements examples ○ Rules Attributes examples
  • 5.
    Introduction Examples ● Project:drools5/01-DroolsExpert-Introduction ● Test: SimpleRulesExampleTest.java ● Rules: src/main/resources/rules/rules.drl ● Kbuilder, Kbase and Ksession (createKSession() method) ○ Take a look at the addEventListener() method ● DRL syntax in the rule file: ○ Take a look at the LHS ○ Take a look at the RHS ● Rules activation and execution (you can activate the logger)
  • 6.
    Introduction Examples ● Exercise ○ Find a way to get "Warn when we have a POP songs and Playlist" Rule activated but not fired. ○ Find a way to get "Warn when we have a POP songs and Playlist" Rule activated and fired.
  • 7.
    Conditional Elements examples ●Project: drools5/02-DroolsExpert-ConditionalElements ● Simple Rules Example: ○ Test Class: SimpleRulesExampleTest.java ○ Rules: SimpleRules.drl ○ Conditional Elements on LHS ○ from Conditional Element ● Advanced from Examples: ○ Test Class: AdvancedFromRulesExampleTest.java ○ Rules: AdvancedFromRules.drl ○ collect, accumulate, accumulate custom function, Using Hibernate session in from CE
  • 8.
    Conditional Elements Examples ●Exercise 1 ○ Replace "Add Playlists that contains songs with letter 'a' in their titles to the list using the accumulate conditional elements defining init, action, reverse and result functions. i.e: from accumulate( $s: Song() from $songs, init(), action(), reverse(), result() )
  • 9.
    Conditional Elements examples Solution: rule"Playlists that contains songs with letter 'a' in their titles." when $playlist: Playlist($songs: songs) $match: java.util.List(empty == false) from accumulate( $s: Song() from $songs, init( java.util.List result = new java.util.ArrayList();), action( if ($s.getTitle().contains("a")) result.add($s); ), result( result ) ) then System.out.println("Playlist found: "+$playlist); for (int i=0; i<$match.size(); i++){ System.out.println("t--"+$match.get(i)); } end
  • 10.
    Conditional Elements examples ●Exercise 2 ○ Create a custom accumulate function to collect random songs from a playlist. ○ Copy the SongsWithALetterOnTheirTitlesFunction.java implementation
  • 11.
    Conditional Elements Examples ●eval Example: ○ Test Class: EvalRulesExampleTest.java ○ Rules: /rules/EvalRules.drl ○ use of eval in LHS ● exists Example: ○ Test Class: ExistsRulesExampleTest.java ○ Rules: ExistsRules.drl ○ use of exists and not in the LHS
  • 12.
    Conditional Elements Examples ●Exercise ○ Replace "Warn when we have a Playlist longer than 9000 seconds" with an equivalent Rule without using eval
  • 13.
    Conditional Elements Examples Solution rule"Playlist longer than 9000 seconds without eval" when $playlist: Playlist($songs: songs) AND $n : Number(intValue > 9000) from accumulate( $s : Song() from $songs, sum($s.getDuration())) then System.out.println("We have found a Playlist longer than 9000 seconds"); end
  • 14.
    Rule Attributes examples ●Project: drools/03-DroolsExpert-RulesAttributes ● Test Class: RuleAttributesExampleTest.java ● Attributes: ○ salience ○ no-loop: ■ Test: noLoop() Rules: /rules/NoLoopRules.drl ○ lock-on-active: ■ Test: lockOnActive() Rules: /rules/LockOnActiveRules.drl ○ agenda-group: ■ Test: agendaGroup() Rules: /rules/AgendaGroupRules.drl
  • 15.
        Questions?
  • 16.
    Enjoy! Questions andFeedback are always appreciated!
  • 17.
        Contact us at www.plugtree.com