Links

  • 1. Sogeti
  • 2. JBoss
  • 3. IBM
  • 4. Oracle
  • 5. SpringSource
  • 6. NL-JUG
  • 7. Java

Archives

Syndication  RSS 2.0

RSS 1.0
RSS 2.0

Bookmark this site

Add 'JCN Blog' site to delicious  Add 'JCN Blog' site to technorati  Add 'JCN Blog' site to digg  Add 'JCN Blog' site to dzone

Posted by jcn at 21:27 on Monday 12 December    Add 'Mark Proctor over Business Rules Engines' site to delicious  Add 'Mark Proctor over Business Rules Engines' site to technorati  Add 'Mark Proctor over Business Rules Engines' site to digg  Add 'Mark Proctor over Business Rules Engines' site to dzone

De dag begonnen met de sessie van Mark Proctor over Business Rules Engines. Mark is een committer bij Drools, een Business Rules Engine voor Java die onlangs van Codehaus naar JBoss is verhuisd.

Een Business Rules Engine is een zeer efficiente pattern matcher die gegeven een “feit” (bijvoorbeeld een order in een webwinkel) een lijst met condities kan langslopen om te kijken aan welke daarvan wordt voldaan. Aan deze condities kunnen dan consequenties worden verbonden. Deze techniek is niet nieuw (de kenners herkennen concepten uit o.a. Prolog, Lisp), het meestgebruikte algoritme is van begin jaren ’80. Het spul ontsnapt echter maar moeilijk uit de academische wereld. Het wordt wel commercieel toegepast voor kennis- en beloningssystemen.

Een veelgebruikt voorbeeld is de regel “ALS order.total > 300 DAN order.total *= .95f“, met andere woorden: als het totaalbedrag van een order groter is dan driehonderd [dollar], dan wordt het totaalbedrag van die order met 5% gereduceerd. Als je vervolgens een feit (order) inschiet, of een lijst met tientallen orders, dan zal het systeem de regel triggeren voor alle orders waarop de conditie slaagt.

Een veel interessanter voorbeeld is de “goede gastvrouw” case. Het gaat hierbij om de organisatie van een groot diner. De gastvrouw is naarstig op zoek naar een tafelindeling waarbij mannen en vrouwen om-en-om aan tafel zitten, en steeds minimaal één gezamelijke hobby hebben. Het is nog behoorlijk lastig om dit in gewone programmacode uit te werken, en wanneer je het voor elkaar hebt is het nog veel lastiger om het systeem te wijzigen of om bijvoorbeeld condities toe te voegen (geen dames met hetzelfde kleur jurkje aan dezelfde tafel, ik noem maar wat). Met een rules engine is dit probleem te reduceren tot een tweetal condities:

  1. persoon(n).geslacht != persoon(n+1).geslacht
  2. persoon(n).hobbies intersect persoon(n+1).hobbies != lege lijst

Met deze regels vastgesteld wordt er een “working memory” aangemaakt waarin de feiten worden geplaatst.

  • feit: Gert is man en houdt van {squash, piano spelen}
  • feit: Hermien is vrouw en houdt van {squash, GTST, American Football}
  • feit: Kees is man en houdt van {American Football, tafeltennis}
  • etcetera, etcetera.

Met de feiten op papier wordt er enkel nog tegen het systeem gezegd “make it so” en indien er een oplossing mogelijk is, zal het systeem die vinden. Er wordt dus gezegd wat er moet worden gerealiseerd (een oplossing waarbij alle feiten aan alle condities voldoen). Een veelgemaakte (beginners)fout is om te willen specificeren hoe het systeem tot de oplossing moet komen (procedureel denken).

De kracht van een rule-based systeem zit hem in de schaalbaarheid en flexibiliteit. Mits de regels met enig verstand worden opgesteld dan kan een systeem schalen en blijven presteren tot en met honderdduizenden regels en feiten (Mark had het in een voorbeeld over gigabytes aan data). Ook is het mogelijk om on-the-fly regels toe te voegen (bijvoorbeeld de kleur van het jurkje), verwijderen, of aan te passen, waarna het systeem alleen die feiten opnieuw evalueert waarvoor de aanpassing gevolg zou kunnen hebben.

Mark benadrukt dat er voor het invoeren van een rule-based oplossing vaak een (forse) investering in effort (en geld) nodig is, en dat het zichzelf voor kleine en/of erg statische projecten niet terugverdient. Voor grote en/of frequent wijzigende projecten is het echter goud waard. Ook is het wat makkelijker dan bij procedurele code om de business mensen te laten (mee)denken, bijvoorbeeld door een beslissingstabel in Excel te bouwen (en die als ze niet kijken te exporteren naar een ruleset).

Op de hamvraag (vanaf wanneer loont het; hoe identificeer je een project waarbij een rules engine zin heeft) kon Mark echter geen antwoord geven.


© 2020 Java Competence Network. All Rights Reserved.