Drools Fisl

950 views

Published on

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

No Downloads
Views
Total views
950
On SlideShare
0
From Embeds
0
Number of Embeds
263
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide





































































  • Drools Fisl

    1. 1. Fernando Meyer fmeyer@codehaus.org www.jboss.org www.fmeyer.org
    2. 2. Project history
    3. 3. JBoss/Red Hat
    4. 4. History of Rule Engines 70s: Mycin/E-Mycin 80s: CLIPS + many more (expert systems)‫‏‬ 90s: BRMS (Ilog, Fair Isaac)‫‏‬ (business rules management)‫‏‬
    5. 5. Practical rule engines Humorous introduction Thanks to Thomas Meeks (it tries to be funny)‫‏‬
    6. 6. What are rule engines for? Add rules == expert system (a system that emulates a domain expert)‫‏‬ BRMS == Business Rule Management System (central management of changing business rules)‫‏‬ Decision services (automated decisions, decision support)‫‏‬
    7. 7. No really? What are they good for? Some example users: HR (coping with multiple awards)‫‏‬ Transport (monitoring sensors)‫‏‬ Mortgage products (> 4000 rules)‫‏‬
    8. 8. Drools is an engine++ IDE (developer tooling) – debugging Web based tooling (analysis – BRMS)‫‏‬ Deployment tools CEP/Stream processing (future)‫‏‬ Testing and analysis tools (next release)‫‏‬ Multiple authoring paradigms: DRL, DSL, XLS (decision tables), PNL, Rule Flow
    9. 9. A quick visual tour...
    10. 10. IDE
    11. 11. Web tools:
    12. 12. rule editing
    13. 13. DSLs for i18n
    14. 14. Integrated testing
    15. 15. Logic Analysis
    16. 16. Climbing the peak... Helps simplify complicated logic Lowers the cost of changing business logic Usually very fast Basically a business logic framework
    17. 17. Not another framework !
    18. 18. No silver bullet Rule engines are a complexity, use only as needed, otherwise, grrr.....
    19. 19. So, when to use one? Complicated logic (not 1+1 = 3 for large values of 1)‫‏‬ Changes often (whatever that means)‫‏‬ Traditional approaches are a challenge Domain expertise is readily available
    20. 20. Don't use for a shopping cart Don't use on applications with simple business logic If the logic is complicated but will never (ever) change, might not need it. Easy logic, changes often? try : Scripting, Lookup tables etc...
    21. 21. Optimisation and speed
    22. 22. RETE Latin for “net”. As in network, or graph. Performance is theoretically independent of the number of rules in the system. Hint: its really a stateful optimisation technique, no-one expects you to know it (or care).
    23. 23. Example Lets use rules to solve a real world scenario Well, real, perhaps if you are a pirate
    24. 24. A Domain expert Yarr, Launch every ZIG ! (Captn' Domain Expert)‫‏‬
    25. 25. if (us.somebodySetUsUpTheBomb()) { for (Zig zig : us.getZigs()) { zig.launch(); // for justice! } }
    26. 26. Sally the Mechanic Zigs should not launch without their weapon system...
    27. 27. Which of course are... Atomic Kittens
    28. 28. if (us.somebodySetUsUpTheBomb()) { for (Zig zig : us.getZigs()) { if (zig.hasAtomicKitty()) { zig.launch(); } } }
    29. 29. Johnny the Regulator Zigs must have been inspected in the last 24 hours to launch!
    30. 30. if (us.somebodySetUsUpTheBomb()) { for (Zig zig : us.getZigs()) { if (zig.hasAtomicKitty()‫‏‬ && zig.isInspected()) { zig.launch(); } } }
    31. 31. Johnny the Regulator Oh, and rule 23.43-57a#32.57 explicitly states that no more than 10 Zigs can fly at a time!
    32. 32. if (us.somebodySetUsUpTheBomb()) { int i = 0; for (Zig zig : us.getZigs()) { if (i == 10) { break; } if (zig.hasAtomicKitty()‫‏‬ && zig.inspected()) { zig.launch(); i++; } } }
    33. 33. Capt'n Domain expert Arr! Only 10!? If a Zig be shot down, launch more!
    34. 34. Hmmm... We could keep checking every Zig's status in an infinite loop. We could implement the observer pattern on Zigs (when they explode, they tell someone). etc... <snore> Lets stick with the loop for the example
    35. 35. int i = 0; while (us.somebodySetUsUpTheBomb()) { for (Zig zig : us.getZigs()) { if (zig.hasExploded()) { us.getZigs().remove(zig); i--; continue; } if (zig.hasAtomicKitty() && zig.inspected()‫‏‬ && i < 10) { zig.launch(); i++; } } }
    36. 36. Sally the Mechanic If those Zigs get beat up, they should land so I can fix them! And don't try to launch them while I'm working on them!
    37. 37. int i = 0; while (somebodySetUsUpTheBomb()) { for (Zig zig : us.getZigs()) { if (zig.needsMaintenance()) { zig.land(); mechanic.startFixing(zig); i--; continue; } if (zig.hasExploded()) { us.getZigs().remove(zig); i--; continue; } if (zig.hasAtomicKitty() && zig.inspected()‫‏‬ && i < 10 && !zig.inMaintenance()) { zig.launch(); i++; } } } Hint: Most likely “inMaintenance” check will be forgotten, the first time....
    38. 38. Johnny the Regulator I forgot to mention that rule 23.43-57a#32.57a explicitly states that all Zigs can fly if you fax form 453.438-347#B in triplicate
    39. 39. Capt'n Domain expert Arr! That form takes hours to fill! Arr! Launch 10 until we fax it, then Take off every Zig!
    40. 40. int i = 0; while (somebodySetUsUpTheBomb()) { form.asyncFillOutAndFax(); for (Zig zig : us.getZigs()) { if (zig.needsMaintenance()) { zig.land(); mechanic.startFixing(zig); i--; continue; } if (zig.hasExploded()) { us.getZigs().remove(zig); i--; continue; } if (zig.hasAtomicKitty() && zig.inspected()‫‏‬ && (i < 10 || form.isFaxed()) && !zig.inMaintenance()) { zig.launch(); i++; } } }
    41. 41. Johnny the Regulator We just changed the rules! All Zigs must be pink to fly
    42. 42. Sally the Mechanic Paint them pink!? That will take months! We have thousands!
    43. 43. Capt'n Domain expert Arr! Take off all pink Zigs! If we finish painting a Zig, launch it!
    44. 44. Getting complicated? Thousands of Zigs? That loop could take a while A lot of event-driven logic Looks like it is going to end up really messy No, the regulator will not stop
    45. 45. Wait a second... You might be thinking – that was awfully arbitrary! Or – Hey, I can make up stupid requirements that are hard to implement in a huge loop cleanly too! I must assume you aren't in a regulated industry...
    46. 46. Now, using rules...
    47. 47. rule “take off every zig (for great justice)” no-loop true; when Us(somebodySetUpUsTheBomb == true)‫‏‬ zig : Zig(inspected == true, pink == true, atomicKitten == true, inMaintenance == false, launched == false)‫‏‬ launched : launched(launched < 10 || formFaxed == true)‫‏‬ then zig.launch()‫‏‬ launched.increment()‫‏‬ update(zig)‫‏‬ update(launched)‫‏‬ end
    48. 48. rule “zig explodes” no-loop true when zig : Zig(destroyed == true)‫‏‬ launched : Launched()‫‏‬ then retract(zig)‫‏‬ launched.decrement()‫‏‬ update(launched)‫‏‬ end
    49. 49. rule “repair zig” no-loop true when zig : Zig(needsMaintenance == true)‫‏‬ mechanic : Mechanic()‫‏‬ launched : Launched()‫‏‬ then zig.land(); launched.decrement(); mechanic.startFixing(zig); //update zig when done update(zig); end
    50. 50. Where is the loop? Implied Each rule fires for each fact combination that matches If you “assert” (insert) 1000 Zigs, the first rule will be checked 1000 times (but it remembers, indexes, for future data changes)‫‏‬
    51. 51. What else is good New rules can be gracefully inserted into a large ruleset (even while running)‫‏‬ Will automatically fire when conditions are met Caching facts makes execution very fast Properly managed rules can create very dynamic systems
    52. 52. The trough of disillusionment Easy to overuse rules Not all logic (even in complex systems) should be in rules Notice that there is no rule describing how a Zig launches Bugs in overly complex rules can be evil
    53. 53. Java bug
    54. 54. C Bug
    55. 55. Rules Bug
    56. 56. A quick aside on choosing a rule engine.. It needs to have a NOT conditional (e.g. Operate on the non-existence of a fact)‫‏‬ Don't trust claims of graphical programming It is neat, but not a silver bullet Ditto for “end user computing” Be realistic
    57. 57. Deployment models Decision service -Typically a web service (centrally hosted)‫‏‬ Embedded into an application Central BRMS server
    58. 58. Some standards Java API: JSR94 * SBVR (OMG) RuleML RIF (W3C) *
    59. 59. Other products Ilog JRules Fair Isaac Blaze Advisor Corticon -interesting spreadsheet based rule modelling RuleBurst (now Haley)‫‏‬ -specialise in natural language and rules extracted from documentation
    60. 60. Roadmap for 2008 CEP Testing & Analysis (Automated QA)‫‏‬ Integrated processes (BPM)‫‏‬ “process server” (decision services)‫‏‬
    61. 61. Thanks ! fernando.meyer@redhat.com www.jboss.org Read the blog: blog.athico.com Me: www.fmeyer.org Thanks Michael

    ×