-
1.
Mark Proctor Project Lead <ul><li>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 </li></ul>
-
8.
Agenda <ul><li>Product Overview
-
9.
Community
-
10.
History
-
11.
Drools Expert </li><ul><li>Quick Example Stateless
-
12.
Quick Example Stateful
-
13.
Conditional elements
-
14.
Timers and Calendars
-
15.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
16.
Enter the Decision table
-
17.
Types
-
18.
Decision tables in guvnor
-
19.
Roadmap </li></ul></ul>
-
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 <ul><li>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 </li></ul><ul><li>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 </li></ul>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 ? <ul><li>Lightweight Business Rules Engine </li></ul><ul><li>Business Rules Engine
-
37.
Authoring and Management App
-
38.
Repository
-
39.
EAP Certified
-
40.
DBs, JVMs </li></ul><ul><li>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 </li></ul>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
-
49.
Agenda <ul><li>Product Overview
-
50.
Community
-
51.
History
-
52.
Drools Expert </li><ul><li>Quick Example Stateless
-
53.
Quick Example Stateful
-
54.
Conditional elements
-
55.
Timers and Calendars
-
56.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
57.
Enter the Decision table
-
58.
Types
-
59.
Decision tables in guvnor
-
60.
Roadmap </li></ul></ul>
-
61.
Sample Industries and Users <ul><li>Investment </li><ul><li>Millennium Investment Group (MIG) </li></ul><li>Logistics </li><ul><li>Fedex </li></ul><li>Airline </li><ul><li>Sabre </li></ul><li>Mortgage </li><ul><li>Franklin American </li></ul><li>Healthcare </li><ul><li>OSDE </li></ul></ul>
-
62.
Boot Camps <ul><li>San Francisco 2009 (40+ attendees) </li><ul><li>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 ..... </li></ul><li>San Diego 2010 (80+ attendess) </li><ul><li>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 .... </li></ul></ul>
-
66.
Agenda <ul><li>Product Overview
-
67.
Community
-
68.
History
-
69.
Drools Expert </li><ul><li>Quick Example Stateless
-
70.
Quick Example Stateful
-
71.
Conditional elements
-
72.
Timers and Calendars
-
73.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
74.
Enter the Decision table
-
75.
Types
-
76.
Decision tables in guvnor
-
77.
Roadmap </li></ul></ul>
-
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 <ul><li>Drools 2 </li><ul><li>Rete like XML Scripting language </li></ul><li>Drools 3 </li><ul><li>Based on Clips functionality
-
82.
Iterative improves to JRules syntax with Clips functionality </li></ul><li>Drools 4 </li><ul><li>More declarative
-
83.
Basic functional programming feature with “from”
-
84.
Basic Rule Flow
-
85.
Basic BRMS </li></ul><li>Drools 5 </li><ul><li>Improved functional programming with 'accumulate'
-
86.
More Advanced Rule Flow integration
-
87.
Complex Event Process </li><ul><li>Temporal Comparators
-
88.
Sliding Time Windows </li></ul><li>Production ready BRMS (Guvnor) </li></ul></ul>
-
89.
Drools History <ul><li>Drools 5.1 </li><ul><li>Differential Diff (true modify) </li></ul><li>Drools 5.2 (CR1 this week) </li><ul><li>Freeform expressions between patterns
-
90.
Multi-function accumulates
-
91.
Prolog like derivation queries
-
92.
Decision tables and rule templates (Guvnor)
-
93.
Pure GWT (Guvnor) </li></ul></ul>
-
94.
Agenda <ul><li>Product Overview
-
95.
Community
-
96.
History
-
97.
Drools Expert </li><ul><li>Quick Example Stateless
-
98.
Quick Example Stateful
-
99.
Conditional elements
-
100.
Timers and Calendars
-
101.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
102.
Enter the Decision table
-
103.
Types
-
104.
Decision tables in guvnor
-
105.
Roadmap </li></ul></ul>
-
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 <ul><li>Product Overview
-
110.
Community
-
111.
History
-
112.
Drools Expert </li><ul><li>Quick Example Stateless
-
113.
Quick Example Stateful
-
114.
Conditional elements
-
115.
Timers and Calendars
-
116.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
117.
Enter the Decision table
-
118.
Types
-
119.
Decision tables in guvnor
-
120.
Roadmap </li></ul></ul>
-
121.
Definitions public class Applicant { private String name; private int age; private boolean valid; // getter and setter methods here } rule "Is of valid age" when $a : Applicant( age < 18 ) then modify ( $a ) { valid = false }; ends
-
122.
Building KnowledgeBuilder kbuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(); kbuilder .add( ResourceFactory .newClassPathResource( "licenseApplication.drl" , 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 ( "Mr John Smith" , 16 ); assertTrue ( applicant .isValid() ); ksession .execute( applicant ); assertFalse ( applicant .isValid() ); rule "Is of valid age" when $a : Applicant( age < 18 ) then modify ( $a ) { valid = false }; ends
-
124.
Agenda <ul><li>Product Overview
-
125.
Community
-
126.
History
-
127.
Drools Expert </li><ul><li>Quick Example Stateless
-
128.
Quick Example Statefu l
-
129.
Conditional elements
-
130.
Timers and Calendars
-
131.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
132.
Enter the Decision table
-
133.
Types
-
134.
Decision tables in guvnor
-
135.
Roadmap </li></ul></ul>
-
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 "When there is a fire turn on the sprinkler" when Fire ($room : room) $sprinkler : Sprinkler ( room == $room, on == false ) then modify ( $sprinkler ) { on = true }; println ( "Turn on the sprinkler for room " + $room.name ); end rule "When the fire is gone turn off the sprinkler" when $room : Room ( ) $sprinkler : Sprinkler ( room == $room, on == true ) not Fire ( room == $room ) then modify ( $sprinkler ) { on = false }; println ( "Turn off the sprinkler for room " + $room.name ); end
-
138.
Definitions rule "Raise the alarm when we have one or more fires" when exists Fire () then insert ( new Alarm () ); println ( "Raise the alarm" ); end rule "Cancel the alarm when all the fires have gone" when not Fire () $alarm : Alarm () then retract ( $alarm ); println ( "Cancel the alarm" ); end
-
139.
Definitions rule "Status output when things are ok" when not Alarm () not Sprinkler ( on === true ) then println ( "Everything is ok" ); end
-
140.
Executing String [] names = new String []{ "kitchen" , "bedroom" , "office" , "livingroom" }; 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( "kitchen" ) ); Fire officeFire = new Fire ( name2room.get( "office" ) ); 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 "Status output when things are ok" when not Alarm () not Sprinkler ( on === true ) then println ( "Everything is ok" ); end
-
143.
Agenda <ul><li>Product Overview
-
144.
Community
-
145.
History
-
146.
Drools Expert </li><ul><li>Quick Example Stateless
-
147.
Quick Example Stateful
-
148.
Conditional elements
-
149.
Timers and Calendars
-
150.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
151.
Enter the Decision table
-
152.
Types
-
153.
Decision tables in guvnor
-
154.
Roadmap </li></ul></ul>
-
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 "accumulate" when $sum : Number( intValue > 100 ) from accumulate ( Bus( color == "red" , $t : takings ) sum( $t ) ) then print "sum is “ + $sum; end
-
157.
Accumulate CE Patterns and CE's can be chained with ' from ' rule "collect" when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate ( Bus( color == "red" , $t : takings ) from $hbn.getNamedQuery( “Find Buses” ) .setParameters( [ “zipCode” : $zipCode ] ) .list(), sum( $t ) ) then print "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 <ul><li>Product Overview
-
161.
Community
-
162.
History
-
163.
Drools Expert </li><ul><li>Quick Example Stateless
-
164.
Quick Example Stateful
-
165.
Conditional elements
-
166.
Timers and Calendars
-
167.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
168.
Enter the Decision table
-
169.
Types
-
170.
Decision tables in guvnor
-
171.
Roadmap </li></ul></ul>
-
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 "weekdays are high priority" calendars "weekday" timer (int:0 1h) when Alarm() then send( "priority high - we have an alarm” ); end rule "weekend are low priority" calendars "weekend" timer (int:0 4h) when Alarm() then send( "priority low - we have an alarm” ); end Execute now and after 1 hour duration Execute now and after 4 hour duration
-
174.
Agenda <ul><li>Product Overview
-
175.
Community
-
176.
History
-
177.
Drools Expert </li><ul><li>Quick Example Stateless
-
178.
Quick Example Stateful
-
179.
Conditional elements
-
180.
Timers and Calendars
-
181.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
182.
Enter the Decision table
-
183.
Types
-
184.
Decision tables in guvnor
-
185.
Roadmap </li></ul></ul>
-
186.
TMS and Inference rule "Issue Child Bus Pass" when $p : Person ( age < 16 ) then insert(new ChildBusPass ( $p ) ); end rule "Issue Adult Bus Pass" 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 <ul><li>Bad </li><ul><li>Monolithic
-
188.
Leaky
-
189.
Brittle integrity - manual maintenance </li></ul></ul>
-
190.
TMS and Inference <ul><li>A rule “logically” inserts an object
-
191.
When the rule is no longer true, the object is retracted. </li></ul>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 "Issue Child Bus Pass" when $p : Person ( ) IsChild ( person =$p ) then logicalInsert ( new ChildBusPass ( $p ) ); end rule "Issue Adult Bus Pass" when $p : Person ( age >= 16 ) IsAdult ( person =$p ) then logicalInsert ( new AdultBusPass ( $p ) ); end The truth maintenance cascades
-
193.
TMS and Inference rule "Issue Child Bus Pass" when $p : Person ( ) not ( ChildBusPass ( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades
-
194.
TMS and Inference <ul><li>Good </li><ul><li>De-couple knowledge responsibilities
-
195.
Encapsulate knowledge
-
196.
Provide semantic abstractions for those encapsulation
-
197.
Integrity robustness – truth maintenance </li></ul></ul>
-
198.
Agenda <ul><li>Product Overview
-
199.
Community
-
200.
History
-
201.
Drools Expert </li><ul><li>Quick Example Stateless
-
202.
Quick Example Stateful
-
203.
Conditional elements
-
204.
Timers and Calendars
-
205.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
206.
Enter the Decision table
-
207.
Types
-
208.
Decision tables in guvnor
-
209.
Roadmap </li></ul></ul>
-
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 <ul><li>Business considerations </li><ul><li>Applicant's age
-
214.
Applicant's experience
-
215.
Sailing qualifications
-
216.
Value of vessel
-
217.
Type of cover </li></ul></ul>
-
218.
Some decisions are complex <ul><li>Business considerations </li><ul><li>Applicant's age </li><ul><li>Only insure people over 25 years of age
-
219.
If less than 35 add 10% surcharge
-
220.
If less than 45 add 5% surcharge </li></ul></ul></ul>
-
221.
Some decisions are complex <ul><li>Business considerations </li><ul><li>Applicant's experience </li><ul><li>If sailing < 5 years then charge +10% </li></ul><li>Sailing qualifications </li><ul><li>None charge +100% </li></ul></ul><li>Etc... </li></ul>
-
222.
Agenda <ul><li>Product Overview
-
223.
Community
-
224.
History
-
225.
Drools Expert </li><ul><li>Quick Example Stateless
-
226.
Quick Example Stateful
-
227.
Conditional elements
-
228.
Timers and Calendars
-
229.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
230.
Enter the Decision table
-
231.
Types
-
232.
Decision tables in guvnor
-
233.
Roadmap </li></ul></ul>
-
234.
Enter the decision table <ul><li>Extract of decision table </li></ul>
-
235.
Decision Table
-
236.
Decision Table rule "Pricing bracket_10" when Driver(age >= 18, age <= 24, locationRiskProfile == "LOW", priorClaims == "1") policy: Policy(type == "COMPREHENSIVE") then policy.setBasePrice(450); end
-
237.
Decision Tables in Guvnor <ul><li>Generation of DRL
-
238.
Each row compiles into a separate DRL rule </li></ul>
-
239.
Decision Tables in Guvnor <ul><li>Generation of DRL
-
240.
Each row compiles into a separate DRL rule
-
241.
rule "Row 1 dtable"
-
242.
dialect "mvel"
-
243.
when
-
244.
$person : Person( age < "18" )
-
245.
then
-
246.
$person.setHolidayEntitlement( 27 );
-
247.
end
-
248.
rule "Row 2 dtable"
-
249.
dialect "mvel"
-
250.
when
-
251.
$person : Person( age >= "18" , age < "45" , lengthOfService < "15" )
-
252.
then
-
253.
$person.setHolidayEntitlement( 22 );
-
254.
end </li></ul>
-
255.
Agenda <ul><li>Product Overview
-
256.
Community
-
257.
History
-
258.
Drools Expert </li><ul><li>Quick Example Stateless
-
259.
Quick Example Stateful
-
260.
Conditional elements
-
261.
Timers and Calendars
-
262.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
263.
Enter the Decision table
-
264.
Types
-
265.
Decision tables in guvnor
-
266.
Roadmap </li></ul></ul>
-
267.
Types <ul>Types </ul><ul><ul><li>Layout </li><ul><ul><ul><li>Horizontal
-
268.
Vertical
-
269.
Limited entry
-
270.
Extended entry </li></ul></ul></ul><li>Categorisation </li><ul><ul><ul><li>Expanded form, contracted form
-
271.
Multi-hit, all hits
-
272.
Multi-hit, first hit
-
273.
Single hit </li></ul></ul></ul></ul></ul>
-
274.
Layouts <ul>Horizontal </ul>
-
275.
Layouts <ul>Vertical </ul>
-
276.
Layouts <ul>Limited entry </ul>
-
277.
Layouts <ul>Extended entry </ul>
-
278.
Categorisation <ul>Expanded form </ul><ul><li>Single column for every condition combination
-
279.
The number of columns should equal the product of the number of states for every condition. </li><ul><li>e.g. 3 conditions each with 2 states gives: </li></ul></ul>2 * 2 * 2 = 8 combinations <ul><ul><li>e.g. 2 conditions each with 3 states and 1 condition with 4 states gives: </li></ul></ul>3 * 3 * 4 = 36 combinations
-
280.
Categorisation <ul>Expanded form (continued) </ul><ul><li>Condition states should be digitised </li><ul><li>e.g. age: <18, 18-35, 36-60, >60 not a free-form integer field </li></ul><li>Condition states should be continuous </li><ul><li>e.g. GOOD: age<18, age>=18; BAD: age<18, age>=30
-
281.
Not essential for expansion but ensures completeness </li></ul><li>This guarantee of completeness of condition combinations is one of the main advantages of decision tables. </li></ul>
-
282.
Categorisation <ul>Expanded form (continued) </ul>
-
283.
Categorisation <ul>Contracted form </ul><ul><li>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. </li></ul>
-
286.
Categorisation <ul>Contracted form – stage 1 Rules 2 and 3 are impossible conditions </ul>
-
287.
Categorisation <ul>Contracted form – stage 2 Merge adjacent column groups with identical action parts </ul>
-
288.
Categorisation <ul>Multi-hit, all hits </ul><ul><li>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. </li></ul>
-
291.
Categorisation <ul>Multi-hit, all hits </ul>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 <ul>Multi-hit, first hit </ul><ul><li>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. </li></ul>
-
295.
Categorisation <ul>Multi-hit, first hit </ul>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 <ul>Single hit </ul><ul><li>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 "expanded decision table"; but this can be optimised or “contracted”. </li></ul>
-
300.
Categorisation <ul>Single hit </ul>Given a 35 year old with 15 years service 1. Rule 3 matches, giving 25 days 2. No other rules match
-
301.
Agenda <ul><li>Product Overview
-
302.
Community
-
303.
History
-
304.
Drools Expert </li><ul><li>Quick Example Stateless
-
305.
Quick Example Stateful
-
306.
Conditional elements
-
307.
Timers and Calendars
-
308.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
309.
Enter the Decision table
-
310.
Types
-
311.
Decision tables in guvnor
-
312.
Roadmap </li></ul></ul>
-
313.
Decision Tables in Guvnor <ul><li>What do we currently provide? </li></ul><ul><li>Vertical layout
-
314.
Generalised categorisation </li><ul><li>Multi-hit, all hit; Multi-hit first hit; Single hit </li></ul><li>Extended entry
-
315.
Digitised condition states (enumerated fields)
-
316.
New decision table editor </li></ul><ul><ul><li>Foundation for future work
-
317.
Condition and rule negation
-
318.
Cell merging
-
319.
Cell grouping </li></ul></ul>
-
320.
Decision Tables in Guvnor <ul><li>What do we currently provide? </li></ul><ul>Cell merging </ul>
-
321.
Decision Tables in Guvnor <ul><li>What do we currently provide? </li></ul><ul>Cell grouping </ul>
-
322.
Decision Tables in Guvnor <ul><li>What do we currently provide? </li></ul><ul><li>Video demonstration </li></ul><ul><ul><li>Demonstration available online at http://vimeo.com/21438537 </li></ul></ul>
-
323.
Agenda <ul><li>Product Overview
-
324.
Community
-
325.
History
-
326.
Drools Expert </li><ul><li>Quick Example Stateless
-
327.
Quick Example Stateful
-
328.
Conditional elements
-
329.
Timers and Calendars
-
330.
Truth maintenance and Inference </li></ul><li>Decision Tables </li><ul><li>Decisions
-
331.
Enter the Decision table
-
332.
Types
-
333.
Decision tables in guvnor
-
334.
Roadmap </li></ul></ul>
-
335.
Roadmap <ul><li>What does the future hold? </li></ul><ul><li>Provision of other layouts </li><ul><li>Horizontal
-
336.
Limited entry </li></ul></ul><ul><li>Automated optimisation
-
337.
Improved support for digitised condition states
-
338.
Integration of V&V providing visual feedback </li></ul><ul><li>Pluggable editors for Model Fact Types
-
339.
Usability enhancements </li></ul>
-
340.
Questions? Questions? <ul><li>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. </li></ul>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;) ) end" rule reactiveLook when Here( place : place) ?isContainedIn(place, "keys";)then" + System.out.println( "We have found your keys"); end
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