Your SlideShare is downloading. ×
0
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
JBoss World 2011 - Drools
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

JBoss World 2011 - Drools

2,197

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,197
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
153
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Example release/support life cycle, highly simplified (not a roadmap) Multiple Community projects develop their own respective versions Enterprise Platforms typically integrate many projects Diagram = binary releases only (all source is public; “source” version of this diagram would be much more complex) Community projects are always evolving Major/minor releases that are annual/quarterly Milestone releases that are approx. monthly Community releases are always being evaluated for functional, performance, quality standards for inclusion in a Platform Many Community releases are skipped over due to deficiencies e.g. AS5.0 didn't meet perf/stability, so EAP waited for AS5.1; AS6.0 probably will not meet criteria EAP alpha+beta+GA productization cycle follows Community AS “Final” release by 2-6 months During EAP productization period, many Community members move on to work on next release (new features) of Community projects For a given EAP release, support cycle lasts for 7 years Full support (4 yrs) – support + enhancements + patch releases Transition (1 yr) – support + patch releases Maintenance (2 yrs) – support + security patches only
  • Example release/support life cycle, highly simplified (not a roadmap) Multiple Community projects develop their own respective versions Enterprise Platforms typically integrate many projects Diagram = binary releases only (all source is public; “source” version of this diagram would be much more complex) Community projects are always evolving Major/minor releases that are annual/quarterly Milestone releases that are approx. monthly Community releases are always being evaluated for functional, performance, quality standards for inclusion in a Platform Many Community releases are skipped over due to deficiencies e.g. AS5.0 didn't meet perf/stability, so EAP waited for AS5.1; AS6.0 probably will not meet criteria EAP alpha+beta+GA productization cycle follows Community AS “Final” release by 2-6 months During EAP productization period, many Community members move on to work on next release (new features) of Community projects For a given EAP release, support cycle lasts for 7 years Full support (4 yrs) – support + enhancements + patch releases Transition (1 yr) – support + patch releases Maintenance (2 yrs) – support + security patches only
  • JBoss Community vs. Enterprise (another view of differences, similar to previous slide but with a few more details) Security Errata Certifications Out-of-the-box experience (e.g. configurations) Management/monitoring tools Software assurance / legal protection
  • Transcript

    • 1. Mark Proctor Project Lead
      • T he SkyNet funding bill is passed.
      • 2. The system goes online on August 4th, 1997.
      • 3. Human decisions are removed from strategic defense.
      • 4. SkyNet begins to learn at a geometric rate.
      • 5. It becomes self-aware at 2:14am Eastern time, August 29th
      • 6. In a panic, they try to pull the plug.
      • 7. And, Skynet fights back
    • 8. Agenda
      • Product Overview
      • 9. Community
      • 10. History
      • 11. Drools Expert
        • Quick Example Stateless
        • 12. Quick Example Stateful
        • 13. Conditional elements
        • 14. Timers and Calendars
        • 15. Truth maintenance and Inference
      • Decision Tables
    • 20. Drools Vs BRMS Repository Rules and Metadata JBoss Enterprise BRMS Platform JBoss Rules Rules Engine/ Execution Rules Development & Management CEP Complex Events Jboss EWP
    • 21. Drools Vs BRMS
      • Stand-alone Framework
      • 22. Innovation
      • 23. Fast and Frequent Releases
      • 24. Tested on developer environments
      • 25. Suitable for development and prototype
      • 26. No Patches – On to next big thing
      • 27. Non SLA bound forum support
      • Fully Integrated Platform
      • 28. Same Innovated Code + Stability
      • 29. Stability – Includes usability, performance and security issues identified during productization
      • 30. Certified for Multi-OS, Multi-DB
      • 31. Best for Development and Production
      • 32. 5 Yr lifecycle – Includes patches, updates, backward compatibility
      • 33. SLA based full support from dedicated support engineers
      • 34. Open Source Assurance – legal protection
      derived
    • 35. JBoss Community & Enterprise Changes Community / Enterprise Platform Delta BRMS Drools Enterprise Platforms - Performance, Scalability, Security and Qualityimprove over time without compromising long-term compatibility. 08/09 12/10 03/11 05/11 Over 150+ defect fixes & 35+ OS/JVM/DB certifications (& counting) between Drools Community 5.1 & JBoss BRMS 5.1.x
    • 36. Evolution of JBoss BRMS 05/08 04/09 12/10 ?
      • Lightweight Business Rules Engine
      • Business Rules Engine
      • 37. Authoring and Management App
      • 38. Repository
      • 39. EAP Certified
      • 40. DBs, JVMs
      • Business Rules Engine
      • 41. Authoring and Management App
      • 42. Choice of Repository
      • 43. Integrated Container
      • 44. CEP – Tech Preview
      • 45. EAP, EWS, EWP, JVMs, Dbs and more
      • 46. Performance
      Repository JBoss Enterprise BRMS Platform 5.0 JBoss Rules BRM Repository JBoss Enterprise BRMS Platform 5.1 JBoss Rules BRM CEP Jboss EWP
    • 47. Back Up
    • 48.  
    • 49. Agenda
      • Product Overview
      • 50. Community
      • 51. History
      • 52. Drools Expert
        • Quick Example Stateless
        • 53. Quick Example Stateful
        • 54. Conditional elements
        • 55. Timers and Calendars
        • 56. Truth maintenance and Inference
      • Decision Tables
    • 61. Sample Industries and Users
      • Investment
        • Millennium Investment Group (MIG)
      • Logistics
        • Fedex
      • Airline
        • Sabre
      • Mortgage
        • Franklin American
      • Healthcare
        • OSDE
    • 62. Boot Camps
      • San Francisco 2009 (40+ attendees)
        • Sponsored by Third Pillar
        • 63. Sun, FAMC, OSDE, Kaseya, Fedex, TU Group, Intermountain Healthcare, Gap, Sony Pictures, Lockheed Martin, Kaiser, HP, Wells Fargo, US Navy Research, FOLIOfn, Boeing .....
      • San Diego 2010 (80+ attendess)
        • Sponsored by US Navy
        • 64. 5 day event, with 2 days focus on the healthcare industry
        • 65. OSDE, AT&T, SAIC, US Navy Research, Kaiser, Clinica, Intermountain Healthcare, GE Healthcare, VA, Boeing, Nationwide ....
    • 66. Agenda
      • Product Overview
      • 67. Community
      • 68. History
      • 69. Drools Expert
        • Quick Example Stateless
        • 70. Quick Example Stateful
        • 71. Conditional elements
        • 72. Timers and Calendars
        • 73. Truth maintenance and Inference
      • Decision Tables
    • 78. It All Started Here Birth of CDSS 1970s 1980s Dendral Baobab Mycin Guidon Neomycin Teiresias Puff Emycin WM Sacon Centaur Wheeze Gravida Clot Oncocin
    • 79. Because Not Everyone Is As Smart As He Is
    • 80. Business Rules Engines 1980s 2010s 1990s 2000s OPS5 ART Clips Jess Drools 2 JRules Drools 3 Drools 4 Drools 5
    • 81. Drools History
      • Drools 2
        • Rete like XML Scripting language
      • Drools 3
        • Based on Clips functionality
        • 82. Iterative improves to JRules syntax with Clips functionality
      • Drools 4
        • More declarative
        • 83. Basic functional programming feature with “from”
        • 84. Basic Rule Flow
        • 85. Basic BRMS
      • Drools 5
        • Improved functional programming with 'accumulate'
        • 86. More Advanced Rule Flow integration
        • 87. Complex Event Process
          • Temporal Comparators
          • 88. Sliding Time Windows
        • Production ready BRMS (Guvnor)
    • 89. Drools History
      • Drools 5.1
        • Differential Diff (true modify)
      • Drools 5.2 (CR1 this week)
        • Freeform expressions between patterns
        • 90. Multi-function accumulates
        • 91. Prolog like derivation queries
        • 92. Decision tables and rule templates (Guvnor)
        • 93. Pure GWT (Guvnor)
    • 94. Agenda
      • Product Overview
      • 95. Community
      • 96. History
      • 97. Drools Expert
        • Quick Example Stateless
        • 98. Quick Example Stateful
        • 99. Conditional elements
        • 100. Timers and Calendars
        • 101. Truth maintenance and Inference
      • Decision Tables
    • 106. Classes
    • 107. rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end select * from Account acc, Cashflow cf, AccountPeriod ap where acc.accountNo == cf.accountNo and cf.type == CREDIT cf.date >= ap.start and cf.date <= ap.end trigger : acc.balance += cf.amount Credit Cashflow Rule
    • 108. rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end rule “decrease balance for AccountPeriod Debits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == DEBIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance -= $amount; end Rules as a “view”
    • 109. Agenda
    • 121. Definitions public class Applicant { private String name; private int age; private boolean valid; // getter and setter methods here } rule &quot;Is of valid age&quot; when $a : Applicant( age < 18 ) then modify ( $a ) { valid = false }; ends
    • 122. Building KnowledgeBuilder kbuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(); kbuilder .add( ResourceFactory .newClassPathResource( &quot;licenseApplication.drl&quot; , getClass() ), ResourceType.DRL ); if ( kbuilder .hasErrors() ) { System.err.println( kbuilder .getErrors().toString() ); } kbase .addKnowledgePackages( kbuilder .getKnowledgePackages() );
    • 123. Executing StatelessKnowledgeSession ksession = kbase .newStatelessKnowledgeSession(); Applicant applicant = new Applicant ( &quot;Mr John Smith&quot; , 16 ); assertTrue ( applicant .isValid() ); ksession .execute( applicant ); assertFalse ( applicant .isValid() ); rule &quot;Is of valid age&quot; when $a : Applicant( age < 18 ) then modify ( $a ) { valid = false }; ends
    • 124. Agenda
    • 136. Definitions public class Room { private String name // getter and setter methods here } public class Sprinkler { private Room room ; private boolean on ; // getter and setter methods here } public class Fire { private Room room ; // getter and setter methods here } public class Alarm { }
    • 137. Definitions rule &quot;When there is a fire turn on the sprinkler&quot; when Fire ($room : room) $sprinkler : Sprinkler ( room == $room, on == false ) then modify ( $sprinkler ) { on = true }; println ( &quot;Turn on the sprinkler for room &quot; + $room.name ); end rule &quot;When the fire is gone turn off the sprinkler&quot; when $room : Room ( ) $sprinkler : Sprinkler ( room == $room, on == true ) not Fire ( room == $room ) then modify ( $sprinkler ) { on = false }; println ( &quot;Turn off the sprinkler for room &quot; + $room.name ); end
    • 138. Definitions rule &quot;Raise the alarm when we have one or more fires&quot; when exists Fire () then insert ( new Alarm () ); println ( &quot;Raise the alarm&quot; ); end rule &quot;Cancel the alarm when all the fires have gone&quot; when not Fire () $alarm : Alarm () then retract ( $alarm ); println ( &quot;Cancel the alarm&quot; ); end
    • 139. Definitions rule &quot;Status output when things are ok&quot; when not Alarm () not Sprinkler ( on === true ) then println ( &quot;Everything is ok&quot; ); end
    • 140. Executing String [] names = new String []{ &quot;kitchen&quot; , &quot;bedroom&quot; , &quot;office&quot; , &quot;livingroom&quot; }; Map < String , Room > name2room = new HashMap < String , Room >(); for ( String name : names ){ Room room = new Room ( name ); name2room .put( name , room ); ksession .insert( room ); Sprinkler sprinkler = new Sprinkler ( room ); ksession .insert( sprinkler ); } ksession .fireAllRules() > Everything is ok
    • 141. Executing Fire kitchenFire = new Fire ( name2room.get( &quot;kitchen&quot; ) ); Fire officeFire = new Fire ( name2room.get( &quot;office&quot; ) ); FactHandle kitchenFireHandle = ksession .insert( kitchenFire ); FactHandle officeFireHandle = ksession .insert( officeFire ); ksession .fireAllRules(); > Raise the alarm > Turn on the sprinkler for room kitchen > Turn on the sprinkler for room office
    • 142. Executing ksession .retract( kitchenFireHandle ); ksession .retract( officeFireHandle ); ksession .fireAllRules() > Turn off the sprinkler for room office > Turn off the sprinkler for room kitchen > Cancel the alarm > Everything is ok rule &quot;Status output when things are ok&quot; when not Alarm () not Sprinkler ( on === true ) then println ( &quot;Everything is ok&quot; ); end
    • 143. Agenda
    • 155. not Bus( color = “red” ) Conditional Elements exists Bus( color = “red” ) forall ( $bus : Bus( floors == 2 ) Bus( this == $bus, color == “red” ) ) forall ( $bus : Bus( color == “red” ) )
    • 156. Accumulate CE rule &quot;accumulate&quot; when $sum : Number( intValue > 100 ) from accumulate ( Bus( color == &quot;red&quot; , $t : takings ) sum( $t ) ) then print &quot;sum is “ + $sum; end
    • 157. Accumulate CE Patterns and CE's can be chained with ' from ' rule &quot;collect&quot; when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate ( Bus( color == &quot;red&quot; , $t : takings ) from $hbn.getNamedQuery( “Find Buses” ) .setParameters( [ “zipCode” : $zipCode ] ) .list(), sum( $t ) ) then print &quot;sum is “ + $sum; end
    • 158. Aggregations Rule Engines do not deal with aggregations $n : Number( intValue > 100 ) from accumulate ( $s : StockTicker( symbol == “RHAT” ) over window:time ( 5s ), average ( $s.price ) ) Over 5 seconds Aggregate ticker price for RHAT over last 5 seconds The pattern 'Number' reasons 'from' the accumulate result
    • 159. $c : Custumer( type == “VIP ) $oe : BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” not BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe ) from entry-point “Stock Trader Stream” Operators Existing Drools 'not' Conditional Elements can be used to detect non-occurrence of events BackAckEvent must occur between 1s and 10s ' after' BuyOrderEvent
    • 160. Agenda
    • 172. Timers rule “name” timer ( cron: 0 0/15 * * * * ) when Alarm( ) then sendEmail( ”Alert Alert Alert!!!” ) Field Name Mandatory? Allowed Values Allowed Special Characters Seconds YES 0-59 , - * / Minutes YES 0-59 , - * / Hours YES 0-23 , - * / Day of month YES 1-31 , - * ? / L W Month YES 1-12 or JAN-DEC , - * / Day of week YES 1-7 or SUN-SAT , - * ? / L # Year NO empty, 1970-2099 , - * / Send alert every quarter of an hour
    • 173. Calendars rule &quot;weekdays are high priority&quot; calendars &quot;weekday&quot; timer (int:0 1h) when Alarm() then send( &quot;priority high - we have an alarm” ); end rule &quot;weekend are low priority&quot; calendars &quot;weekend&quot; timer (int:0 4h) when Alarm() then send( &quot;priority low - we have an alarm” ); end Execute now and after 1 hour duration Execute now and after 4 hour duration
    • 174. Agenda
    • 186. TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( age < 16 ) then insert(new ChildBusPass ( $p ) ); end rule &quot;Issue Adult Bus Pass&quot; when $p : Person ( age >= 16 ) then insert(new AdultBusPass ( $p ) ); end Couples the logic What happens when the Child stops being 16?
    • 187. TMS and Inference
      • Bad
        • Monolithic
        • 188. Leaky
        • 189. Brittle integrity - manual maintenance
    • 190. TMS and Inference
      • A rule “logically” inserts an object
      • 191. When the rule is no longer true, the object is retracted.
      when $p : Person ( age < 16 ) then logicalInsert ( new IsChild ( $p ) ) end when $p : Person ( age >= 16 ) then logicalInsert ( new IsAdult ( $p ) ) end de-couples the logic Maintains the truth by automatically retracting
    • 192. TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( ) IsChild ( person =$p ) then logicalInsert ( new ChildBusPass ( $p ) ); end rule &quot;Issue Adult Bus Pass&quot; when $p : Person ( age >= 16 ) IsAdult ( person =$p ) then logicalInsert ( new AdultBusPass ( $p ) ); end The truth maintenance cascades
    • 193. TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( ) not ( ChildBusPass ( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades
    • 194. TMS and Inference
      • Good
        • De-couple knowledge responsibilities
        • 195. Encapsulate knowledge
        • 196. Provide semantic abstractions for those encapsulation
        • 197. Integrity robustness – truth maintenance
    • 198. Agenda
    • 210. Some decisions are simple I want to treat myself
    • 211. Some decisions are simple
    • 212. Some decisions are complex What insurance premium should I charge?
    • 213. Some decisions are complex
      • Business considerations
    • 218. Some decisions are complex
      • Business considerations
        • Applicant's age
          • Only insure people over 25 years of age
          • 219. If less than 35 add 10% surcharge
          • 220. If less than 45 add 5% surcharge
    • 221. Some decisions are complex
      • Business considerations
        • Applicant's experience
          • If sailing < 5 years then charge +10%
        • Sailing qualifications
          • None charge +100%
      • Etc...
    • 222. Agenda
    • 234. Enter the decision table
      • Extract of decision table
    • 235. Decision Table
    • 236. Decision Table rule &quot;Pricing bracket_10&quot; when Driver(age >= 18, age <= 24, locationRiskProfile == &quot;LOW&quot;, priorClaims == &quot;1&quot;) policy: Policy(type == &quot;COMPREHENSIVE&quot;) then policy.setBasePrice(450); end
    • 237. Decision Tables in Guvnor
      • Generation of DRL
      • 238. Each row compiles into a separate DRL rule
    • 239. Decision Tables in Guvnor
      • Generation of DRL
      • 240. Each row compiles into a separate DRL rule
      • 241. rule &quot;Row 1 dtable&quot;
      • 242. dialect &quot;mvel&quot;
      • 243. when
      • 244. $person : Person( age < &quot;18&quot; )
      • 245. then
      • 246. $person.setHolidayEntitlement( 27 );
      • 247. end
      • 248. rule &quot;Row 2 dtable&quot;
      • 249. dialect &quot;mvel&quot;
      • 250. when
      • 251. $person : Person( age >= &quot;18&quot; , age < &quot;45&quot; , lengthOfService < &quot;15&quot; )
      • 252. then
      • 253. $person.setHolidayEntitlement( 22 );
      • 254. end
    • 255. Agenda
    • 267. Types
        Types
        • Layout
        • Categorisation
              • Expanded form, contracted form
              • 271. Multi-hit, all hits
              • 272. Multi-hit, first hit
              • 273. Single hit
    • 274. Layouts
        Horizontal
    • 275. Layouts
        Vertical
    • 276. Layouts
        Limited entry
    • 277. Layouts
        Extended entry
    • 278. Categorisation
        Expanded form
      • Single column for every condition combination
      • 279. The number of columns should equal the product of the number of states for every condition.
        • e.g. 3 conditions each with 2 states gives:
      2 * 2 * 2 = 8 combinations
        • e.g. 2 conditions each with 3 states and 1 condition with 4 states gives:
      3 * 3 * 4 = 36 combinations
    • 280. Categorisation
        Expanded form (continued)
      • Condition states should be digitised
        • e.g. age: <18, 18-35, 36-60, >60 not a free-form integer field
      • Condition states should be continuous
        • e.g. GOOD: age<18, age>=18; BAD: age<18, age>=30
        • 281. Not essential for expansion but ensures completeness
      • This guarantee of completeness of condition combinations is one of the main advantages of decision tables.
    • 282. Categorisation
        Expanded form (continued)
    • 283. Categorisation
        Contracted form
      • Contraction is the first optimisation.
      • 284. Reduces the number of condition columns.
      • 285. If the same actions exist for rules covering all condition states for a given condition they can be combined and the condition state becomes irrelevant.
    • 286. Categorisation
        Contracted form – stage 1 Rules 2 and 3 are impossible conditions
    • 287. Categorisation
        Contracted form – stage 2 Merge adjacent column groups with identical action parts
    • 288. Categorisation
        Multi-hit, all hits
      • To get complete result all rules matching need to have their actions executed.
      • 289. Condition columns are not mutually exclusive
      • 290. If the Condition columns are not exclusive, some combination of conditions are present in more than one column, which may lead to ambiguity or inconsistency.
    • 291. Categorisation
        Multi-hit, all hits
      Given a 35 year old with 15 years service 1. Rule 1 matches, giving 22 days 2. Rule 5 matches, giving an additional 3 days 3. A total of 25 days is assigned
    • 292. Categorisation
        Multi-hit, first hit
      • To get complete result the first rule (from left-to-right) matching needs to have its action executed.
      • 293. Condition columns are not mutually exclusive.
      • 294. If the Condition columns are not exclusive, some combination of conditions are present in more than one column, which may lead to ambiguity or inconsistency.
    • 295. Categorisation
        Multi-hit, first hit
      Given a 35 year old with 15 years service 1. Rule 4 matches, giving 25 days 2. Rule 6 would match but Rule 4 was the first hit
    • 296. Categorisation
        Single hit
      • Each possible combination of conditions matches exactly one, and only one, rule.
      • 297. Condition columns are mutually exclusive
      • 298. As the Condition columns are exclusive; combinations of conditions cannot be present in more than one column which eliminates ambiguity and inconsistency.
      • 299. Classic form if Single-hit is &quot;expanded decision table&quot;; but this can be optimised or “contracted”.
    • 300. Categorisation
        Single hit
      Given a 35 year old with 15 years service 1. Rule 3 matches, giving 25 days 2. No other rules match
    • 301. Agenda
    • 313. Decision Tables in Guvnor
      • What do we currently provide?
      • Vertical layout
      • 314. Generalised categorisation
        • Multi-hit, all hit; Multi-hit first hit; Single hit
      • Extended entry
      • 315. Digitised condition states (enumerated fields)
      • 316. New decision table editor
        • Foundation for future work
        • 317. Condition and rule negation
        • 318. Cell merging
        • 319. Cell grouping
    • 320. Decision Tables in Guvnor
      • What do we currently provide?
        Cell merging
    • 321. Decision Tables in Guvnor
      • What do we currently provide?
        Cell grouping
    • 322. Decision Tables in Guvnor
      • What do we currently provide?
      • Video demonstration
        • Demonstration available online at http://vimeo.com/21438537
    • 323. Agenda
    • 335. Roadmap
      • What does the future hold?
      • Provision of other layouts
        • Horizontal
        • 336. Limited entry
      • Automated optimisation
      • 337. Improved support for digitised condition states
      • 338. Integration of V&V providing visual feedback
      • Pluggable editors for Model Fact Types
      • 339. Usability enhancements
    • 340. Questions? Questions?
      • Dave Bowman : All right, HAL; I'll go in through the emergency airlock.
      • 341. HAL : Without your space helmet, Dave, you're going to find that rather difficult.
      • 342. Dave Bowman : HAL, I won't argue with you anymore! Open the doors!
      • 343. HAL : Dave, this conversation can serve no purpose anymore. Goodbye.
      Joshua: Greetings, Professor Falken. Stephen Falken : Hello, Joshua. Joshua: A strange game. The only winning move is not to play. How about a nice game of chess?
    • 344. Backward Chaining query isContainedIn( String x, String y ) Location(x, y;) or ( Location(z, y;) and ?isContainedIn(x, z;) ) endn&quot; rule reactiveLook when Here( place : place) ?isContainedIn(place, &quot;keys&quot;;) thenn&quot; + System.out.println( &quot;We have found your keys&quot;); end

    ×