Úvod do Drools

1. Prehľad

Drools je riešenie systému riadenia obchodných pravidiel (BRMS). Poskytuje nástroj na pravidlá, ktorý spracováva fakty a produkuje výstup ako výsledok spracovania pravidiel a faktov. Centralizácia obchodnej logiky umožňuje zavádzať zmeny rýchlo a lacno.

Tiež preklenuje priepasť medzi obchodným a technickým tímom tým, že poskytuje nástroj na písanie pravidiel vo formáte, ktorý je ľahko pochopiteľný.

2. Maven závislosti

Ak chcete začať s programom Drools, je potrebné do nášho systému najskôr pridať niekoľko závislostí pom.xml:

 org.kie kie-ci 7.1.0.Beta1 org.drools drools-decisiontables 7.1.0.Beta1 

Najnovšia verzia oboch závislostí je k dispozícii v centrálnom úložisku Maven ako kie-ci a drools-decisiontables.

3. Základy slintania

Pozrime sa na základné pojmy Drools:

  • Fakty - predstavuje údaje, ktoré slúžia ako vstup pre pravidlá
  • Pracovná pamäť sklad s Fakty, kde sa používajú na porovnávanie vzorov a dajú sa upraviť, vložiť a odstrániť
  • Pravidlo - predstavuje jediné pravidlo, ktoré sa spája Fakty so zodpovedajúcimi akciami. To môže byť napísané v Drools Rule Language v .drl súbory alebo ako Rozhodovacia tabuľka v excelovskej tabuľke
  • Znalostná relácia - obsahuje všetky zdroje potrebné na pravidlá streľby; všetko Fakty sa vložia do relácie a potom sa spustia zhodné pravidlá
  • Vedomostná základňa - predstavuje znalosti v ekosystéme Drools, má informácie o zdrojoch, kde Pravidlá sa nájdu a tiež to vytvorí Znalostná relácia
  • ModulModul obsahuje viac znalostných báz, ktoré môžu obsahovať rôzne relácie

4. Konfigurácia Java

Aby sme spustili pravidlá pre dané dáta, musíme vytvoriť inštanciu tried poskytovaných rámcom informáciami o umiestnení súborov pravidiel a Fakty:

4.1. KieFileSystem

Najskôr musíme nastaviť KieFileSystem fazuľa; toto je systém súborov v pamäti poskytovaný rámcom. Nasledujúci kód poskytuje kontajner, ktorý programovo definuje prostriedky Drools, ako sú súbory pravidiel, rozhodovacie tabuľky.

public KieFileSystem kieFileSystem () hodí IOException {KieFileSystem kieFileSystem = getKieServices (). newKieFileSystem (); pre (zdrojový súbor: getRuleFiles ()) {kieFileSystem.write (ResourceFactory.newClassPathResource (RULES_PATH + file.getFilename (), "UTF-8")); } návrat kieFileSystem; }

Tu RULES_PATH označuje umiestnenie súborov pravidiel v súborovom systéme. Tu čítame súbory z triedna cesta čo je typicky / src / main / resources v prípade projektu Maven.

4.2. KieContainer

Ďalej musíme nastaviť KieContainer čo je zástupný symbol pre všetky KieBases konkrétne KieModule. KieContainer sa vyrába pomocou iných fazúľ vrátane KieFileSystem, KieModule, a KieBuilder.

The buildAll () metóda vyvolaná dňa KieBuilder buduje všetky zdroje a spája ich s nimi KieBase. Úspešne sa spustí, iba ak dokáže vyhľadať a overiť všetky súbory pravidiel:

public KieContainer kieContainer () hodí IOException {KieRepository kieRepository = getKieServices (). getRepository (); kieRepository.addKieModule (nový KieModule () {verejné ReleaseId getReleaseId () {návrat kieRepository.getDefaultReleaseId ();}}); KieBuilder kieBuilder = getKieServices () .newKieBuilder (kieFileSystem ()) .buildAll (); návrat getKieServices (). newKieContainer (kieRepository.getDefaultReleaseId ()); }

4.3. KieSession

Pravidlá sa strieľajú otvorením a KieSession fazuľa - z ktorej sa dá získať KieContainer:

public KieSession kieSession () hodí IOException {return kieContainer (). newKieSession (); }

5. Vykonávacie pravidlá

Teraz, keď sme nastavenie dokončili, sa pozrime na niekoľko možností na vytvorenie pravidiel.

Preskúmame implementáciu pravidiel na príklade kategorizácie uchádzača o konkrétnu rolu na základe jeho súčasného platu a počtu rokov praxe.

5.1. Súbor pravidiel Drools (.drl)

Jednoducho povedané, súbor pravidiel Drools obsahuje všetky obchodné pravidlá.

Súčasťou pravidla je a Keď potom konštrukt, tu Kedy časť uvádza stav, ktorý sa má skontrolovať, a Potom v časti sú uvedené kroky, ktoré je potrebné vykonať, ak je splnená podmienka:

balíček com.baeldung.drools.rules; import com.baeldung.drools.model.Applicant; globálna com.baeldung.drools.model.SuggestedRole navrholRole; pravidlo dialektu „mvel“ „Navrhnúť pozíciu manažéra“, keď Žiadateľ (experienceInYears> 10) Žiadateľ (currentSalary> 10 000 000 && currentSalary <= 2 500 000) potom navrhnutýRole.setRole („Manažér“); koniec

Toto pravidlo je možné spustiť vložením znaku Žiadateľ a Navrhovaná rola fakty v KieSession:

public SuggestedRole suggestARoleForApplicant (Žiadateľ uchádzača, SuggestedRole suggestRole) {KieSession kieSession = kieContainer.newKieSession (); kieSession.insert (žiadateľ); kieSession.setGlobal ("NavrhnutáRole", NavrhovanáRole); kieSession.fireAllRules (); // ...}

Testuje dve podmienky Žiadateľ inštancii a potom na základe splnenia obidvoch podmienok stanoví Rola pole v Navrhovaná rola objekt.

Toto je možné overiť vykonaním testu:

@Test public void whenCriteriaMatching_ThenSuggestManagerRole () {Žiadateľ žiadateľa = nový Žiadateľ („David“, 37, 1600000.0,11); SuggestedRole suggestRole = new SuggestedRole (); candidateService.suggestARoleForApplicant (žiadateľ, navrhnutá rola); assertEquals ("Manažér", suggestRole.getRole ()); }

V tomto príklade sme použili niekoľko kľúčových slov poskytnutých Droolmi. Poďme pochopiť ich použitie:

  • balíček - toto je názov balíka, ktorý zadáme v kmodule.xml, súbor pravidiel je umiestnený vo vnútri tohto balíka
  • dovoz - toto je podobné Java dovoz príkaz, tu musíme určiť triedy, ktoré vkladáme do Znalostná relácia
  • globálne - toto sa používa na definovanie premennej na globálnej úrovni pre reláciu; toto možno použiť na odovzdanie vstupného parametra alebo na získanie výstupného parametra na zhrnutie informácií pre reláciu
  • nárečie - dialekt špecifikuje syntax použitú vo výrazoch v časti s podmienkami alebo v časti s akciami. Štandardne je dialekt Java. Drooly tiež podporujú dialekt diviť sa; je to výrazový jazyk pre aplikácie založené na prostredí Java. Podporuje pole a prístup metódou / getrom
  • pravidlo - toto definuje blok pravidiel s názvom pravidla
  • kedy - toto určuje podmienku pravidla, v tomto príklade sú kontrolované podmienky Žiadateľ majúce experienceInYears viac ako desať rokov a súčasný plat v určitom rozmedzí
  • potom - tento blok vykoná akciu, keď sú splnené podmienky v kedy blok splnený. V tomto príklade Žiadateľ rola je nastavená ako manažér

5.2. Rozhodovacie tabuľky

Rozhodovacia tabuľka poskytuje schopnosť definovať pravidlá v predformátovanej tabuľke programu Excel. Výhodou rozhodnutia, ktorú poskytuje Drools, je, že sú ľahko zrozumiteľné aj pre netechnickú osobu.

Je to tiež užitočné, ak existujú podobné pravidlá, ale s rôznymi hodnotami, v tomto prípade je jednoduchšie pridať nový riadok do hárka programu Excel na rozdiel od zápisu nového pravidla do.drl súbory. Pozrime sa, aká je štruktúra rozhodovacej tabuľky s príkladom použitia štítku na produkte na základe typu produktu:

Rozhodovacia tabuľka je zoskupená do rôznych sekcií. Horná časť je ako sekcia hlavičky, kde špecifikujeme Sada pravidiel (tj. balíček, kde sú umiestnené súbory pravidiel), Import (Triedy Java, ktoré sa majú importovať) a Poznámky (pripomienky k účelu pravidiel).

Centrálna časť, kde definujeme pravidlá, sa nazýva RuleTable ktorá zoskupuje pravidlá aplikované na ten istý doménový objekt.

V ďalšom riadku máme typy stĺpcov PODMIENKA a AKCIA. V rámci týchto stĺpcov môžeme získať prístup k vlastnostiam doménového objektu uvedeným v jednom riadku a k ich hodnotám v nasledujúcich riadkoch.

Mechanizmus vystreľovania pravidiel je podobný tomu, aký sme videli .drl súbory.

Výsledok uplatnenia týchto pravidiel môžeme overiť vykonaním testu:

@ Test public void whenProductTypeElectronic_ThenLabelBarcode () {Product product = new Product ("Microwave", "Electronic"); product = productService.applyLabelToProduct (produkt); assertEquals ("BarCode", product.getLabel ()); }

6. Záver

V tomto rýchlom článku sme sa zaoberali využitím nástroja Drools ako nástroja na tvorbu obchodných pravidiel v našej aplikácii. Tiež sme videli veľa spôsobov, ako môžeme písať pravidlá v jazyku pravidiel Drools, ako aj v ľahko zrozumiteľnom jazyku v tabuľkách.

Úplný kód tohto článku je ako vždy k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found