jboss drools - pure java rule engine

22
www.synerzip.com JBOSS DROOLS RULE ENGINE Anil Allewar 1

Upload: anilallewar

Post on 23-Jan-2017

13.543 views

Category:

Software


5 download

TRANSCRIPT

Page 1: JBoss Drools - Pure Java Rule Engine

www.synerzip.com

JBOSS DROOLS RULE ENGINE

Anil Allewar

1

Page 2: JBoss Drools - Pure Java Rule Engine

Agenda2

1. Introduction to Knowledge based Rule Engine2. Basics of Drools rules3. Drools Operators 4. Drools Conditional Elements5. The problem - Fire Alarm Management System6. Drools Demo7. How to control execution of rules - timers8. Drools integration into Java - using knowledge agent,

changeset9. Introduction to decision tables10. Introduction to Drools Flow for workflow11. A very brief introduction to Drools Guvnor

, Fusion and Planner

Page 3: JBoss Drools - Pure Java Rule Engine

Rule Engine?3

Drools is a Rule Engine that uses the rule-based approach to implement an Expert System

A Production Rule is a two-part structure using First Order Logic for reasoning over knowledge representation.

The inference engine matches the rules against the facts (objects) in memory

when      <conditions> then      <actions>;

Page 4: JBoss Drools - Pure Java Rule Engine

Rule Engine?4

• The rules are loaded into production memory and are available at all times• Facts are asserted into the Working Memory where they may then be

modified or retracted. • The Agenda manages the execution order of the conflicting rules using a

conflict resolution strategy.• The rules might be in conflict when more than 1 rule matches the same set of

facts in working memory

Page 5: JBoss Drools - Pure Java Rule Engine

Backward Vs Forward Chaining5

A forward chaining engine looks at the facts and derives a conclusion Consider a scenario of medical diagnosis

=> If the patient’s symptoms are put as facts into working memory, then we can diagnose him with an ailment.

Whennasal

congestion&& fever&& body

acheThen

Influensa

Working memory1. body ache2. Fever3. Nasal

congestion

INFLUENZA

Page 6: JBoss Drools - Pure Java Rule Engine

Backward Vs Forward Chaining6

A backward chaining engine has the “goal” specified and the engine tries to satisfy it. Consider the same scenario of medical

diagnosis => if there is an epidemic of a certain disease, this AI could presume a given individual had the disease and attempt to determine if its diagnosis is correct based on available information.

GoalInfluensa

Sub-goalnasal

congestionfeverbody ache

Working memory1. body ache2. fever NO INFLUENZA

Page 7: JBoss Drools - Pure Java Rule Engine

Drools Basics7

Knowledge Sessions Stateless

Doesn’t maintain reference to objects after first call and can be thought of as plain functions

Typical use cases include validation, routing etc Stateful

Longer lived, maintain reference to objects and allow iterative changes over time

Typical use cases include diagnostics, monitoring etc In contrast to a Stateless Session, the dispose() method must be called

afterwards to ensure there are no memory leaks. Facts

Facts are objects that are inserted/modified/retracted from working memory AND is the data on which the rules act.

"logicalInsert" => Here the fact is logically inserted, this fact is dependant on the truth of the "when" clause. It means that when the rule becomes false the fact is automatically retracted.

A rule while firing can change the state of the working memory thereby causing other rules to fire.

Page 8: JBoss Drools - Pure Java Rule Engine

Sample Drools Rule8

When part

package com.anil.drools.service

import com.anil.drools.model.Fire;import com.anil.drools.model.Alarm;

global Logger LOGGER;

rule "Raise the alarm when there is at least 1 Fire"salience 100lock-on-active true

whenexists Fire()

then insert (new Alarm());LOGGER.debug( "Raised the alarm because at

least 1 Fire() object exists in the session" );end

Rule Name

Attributes

Then part

Package Name (Must be 1st element if declared)

Import java types (referenced by rules)

Global variables

Page 9: JBoss Drools - Pure Java Rule Engine

Rule Attributes9

Rule attributes provide a declarative way to influence the behavior of the rule. no-loop

When a rule's consequence modifies a fact it may cause the rule to activate again, causing an infinite loop.

lock-on-active This is a stronger version of no-loop, because the change could

now be caused not only by the rule itself but by other rules too. Salience

Salience is a form of priority where rules(all of whom match) with higher salience values are given higher priority when ordered in the Activation queue.

agenda-group Only rules in the agenda group that has acquired the focus are

allowed to fire. Refer to Drools documentation for additional attributes

Page 10: JBoss Drools - Pure Java Rule Engine

Drools Operators10

< <= > >= Person( firstName < $otherFirstName )

[not] matches (against Java regex) Cheese( type matches "(Buffalo)?\\S*Mozarella" )

[not] contains (check field within array/collection) CheeseCounter( cheeses contains "stilton" )

soundslike // match cheese "fubar" or "foobar" Cheese( name soundslike 'foobar' )

str Message( routingValue str[startsWith] "R1" )

[not] in Cheese( type in ( "stilton", "cheddar", $cheese ) )

Page 11: JBoss Drools - Pure Java Rule Engine

Drools Conditional Elements11

and / or Cheese( cheeseType : type ) and Person( favouriteCheese == cheeseType

) Cheese( cheeseType : type ) or Person( favouriteCheese == cheeseType )

not not Bus(color == "red")

exists exists Bus(color == "red")

forall forall( $bus : Bus( type == 'english')

Bus( this == $bus, color = 'red' ) ) eval

eval( p1.getList().containsKey( p2.getItem() ) )

Page 12: JBoss Drools - Pure Java Rule Engine

Drools Conditional Elements12

from $order : Order() $item : OrderItem( value > 100 ) from $order.items

collect $system : System() $alarms : ArrayList( size >= 3 ) from collect( Alarm( system ==

$system, status == 'pending' ) ) accumulate

$order : Order() $total : Number( doubleValue > 100 ) from

accumulate( OrderItem( order == $order, $value : value ), sum( $value ) )

weeklyVariance : Number( ) from accumulate (Number( valueReturned : doubleValue) from ruleVO.varianceList, sum(valueReturned))

Page 13: JBoss Drools - Pure Java Rule Engine

The Problem!!13

Fire Alarm Mgmt System Everyone is happy if there is no fire If there is fire in any room, set an alarm If there is fire in a room, turn ON sprinkler

for that room Once the fire extinguishes, turn OFF

sprinkler for that room If there is NO fire and sprinklers are off; tell

everyone to get back to being happy

Page 14: JBoss Drools - Pure Java Rule Engine

DEMO

Demo14

Source code available at https://github.com/anilallewar/d

rools-Example

Page 15: JBoss Drools - Pure Java Rule Engine

Using Timers15

Rules support both interval and cron based timers modeled on Quartz.

rule "Send SMS every 15 minutes"     timer (cron:* 0/15 * * * ?) when     $a : Alarm( on == true ) then     channels[ "sms" ].insert( new Sms( $a.mobileNumber, "The alarm is still on" ); end

Page 16: JBoss Drools - Pure Java Rule Engine

More On Deploying16

Changesets Configuration to build the knowledgebase Use an XML that contains a list of resources

and can contain reference to another changeset (recursive changesets)

<change-set xmlns='http://drools.org/drools-5.0/change-set' xmlns:xs='http://www.w3.org/2001/XMLSchema-instance' xs:schemaLocation='http://drools.org/drools-5.0/change-set http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd' > <add> <resource source='http://fqng-app02-dev-jboss:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/fqAlarmWorkflow/LATEST' type='PKG' basicAuthentication=‘enabled’ username=‘admin’ password=‘’/> </add></change-set>

Page 17: JBoss Drools - Pure Java Rule Engine

Knowledge Agents17

The Knowlege Agent provides automatic loading, caching and re-loading of resources and is configured from a properties files OR KnowledgeAgentConfiguration.

A KnowledgeAgent object will continuously scan all the added resources, using a default polling interval of 60 seconds(can be changd) and, when some last modification date is updated, it will applied the changes into the cached Knowledge Base using the new resources.

For polling to occur, the polling and notifier services must be started.

ResourceFactory.getResourceChangeNotifierService().start(); ResourceFactory.getResourceChangeScannerService().start();

Page 18: JBoss Drools - Pure Java Rule Engine

Decision Tables18

Managing rules in a spreadsheet format In a decision table each row is a rule,

and each column in that row is either a condition or action for that rule.

RuleSet com.anil.drools.decisiontable

Importcom.anil.drools.model.decisiontable.Driver, com.anil.drools.model.decisiontable.Policy

Variables  

Notes Decision tables for policy prices

     RuleTable policy prices

POLICY NAME CONDITION CONDITION CONDITION CONDITION ACTION ACTION

  $driver : Driver $policy : Policy    

  age >=$1 && age<=$2 locationRiskProfile numberOfPriorClaims policyType $policy.setPolicyBasePrice($param); System.out.println("$param");

Name Driver Age Bracket Location Risk Profile Number of Prior Claims Insurance Policy Type Base $ price Reason

Young Safe driver

18,24 LOW 1 COMPREHENSIVE 490.00 1 prior claims18,24 MED   FIRE_THEFT 56.00 Fire theft medium

18,24 MED   COMPREHENSIVE 700.00 Comprehensive medium

18,24 LOW 2 FIRE_THEFT 250.00 2 prior claims

18,24 LOW 0 COMPREHENSIVE 400.00 Safe driver discount

Mature Drivers

25,60 LOW 1 COMPREHENSIVE 420.00 mature - 1 prior claims

25,60 MED   FIRE_THEFT 37.00 mature - Fire theft medium

25,60 MED   COMPREHENSIVE 645.00 mature - Comprehensive medium

25,60 LOW 2 FIRE_THEFT 234.00 mature - 2 prior claims

25,60 LOW 0 COMPREHENSIVE 356.00 mature - Safe driver discount

Page 19: JBoss Drools - Pure Java Rule Engine

Drools Flow19

Drools flow is used in conjuction with Drools Expert to specify the flow of business rules.

The nodes are specified by the ruleflow-group rule attribute.

As of Drools 5, Drools flow is going to be combined with jBPM and is renamed as jBPM 5.0.

Page 20: JBoss Drools - Pure Java Rule Engine

Other Drools Offerings20

Guvnor Guvnor is the Drools business rule management system

that allows people to manage rules in a multi user environment, it is a single point of truth for your business rules, allowing change in a controlled fashion, with user friendly interfaces.

The Guvnor combined with the core drools engine and other tools forms the business rules manager.

The data can be stored with multiple persistence schemas (file, database etc) using the JackRabbit JCR (Java content repository) as the underlying implementation.

Guvnor offers versioning of rules, authentication and authorization to limit users to what they can do.

Page 21: JBoss Drools - Pure Java Rule Engine

Other Drools Offerings21

Planner Drools Planner optimizes planning problems. It solves use cases, such

as: Employee shift rostering: rostering nurses, repairmen, … Agenda scheduling: scheduling meetings, appointments, maintenance jobs,

advertisements, … Educational timetabling: scheduling lessons, courses, exams, conference

presentations, ... Fusion

Drools Fusion supports complex event processing It deals with the tasks of handling multiple events nearly at real-time

with the goal of identifying the meaningful events within the event cloud.

Events, from a Drools perspective are just a special type of fact. In this way, we can say that all events are facts, but not all facts are events.

Page 22: JBoss Drools - Pure Java Rule Engine

Questions?