Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Drools Fisl

1,045 views

Published on

Published in: Technology
  • Be the first to comment

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

×