Drools pomocou pravidiel zo súborov programu Excel

1. Prehľad

Drools má podporu pre správu obchodných pravidiel vo formáte tabuľky.

V tomto článku uvidíme rýchly príklad použitia programu Drools na správu obchodných pravidiel pomocou súboru Excel.

2. Maven závislosti

Pridajme do našej aplikácie požadované závislosti Drools:

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

Najnovšiu verziu týchto závislostí nájdete na kie-ci a drools-decisiontables.

3. Definovanie pravidiel v programe Excel

Pre náš príklad definujme pravidlá na určenie zľavy na základe typu zákazníka a počtu rokov ako zákazník:

  • Jednotliví zákazníci s viac ako 3 rokmi majú zľavu 15%
  • Jednotliví zákazníci do 3 rokov majú zľavu 5%
  • Všetci firemní zákazníci majú zľavu 20%

3.1. Súbor Excel

Začnime vytvorením nášho súboru programu Excel podľa konkrétnej štruktúry a kľúčových slov požadovaných Drools:

Pre náš jednoduchý príklad sme použili najrelevantnejšiu množinu kľúčových slov:

  • Sada pravidiel - označuje začiatok rozhodovacej tabuľky
  • Import - Triedy Java použité v pravidlách
  • RuleTable - označuje začiatok súboru pravidiel
  • názov - Názov pravidla
  • PODMIENKA - útržok kódu podmienky, ktorá sa má skontrolovať oproti vstupným údajom. Pravidlo by malo obsahovať aspoň jednu podmienku
  • AKCIA - úryvok kódu akcie, ktorá sa má vykonať, ak sú splnené podmienky pravidla. Pravidlo by malo obsahovať aspoň jednu akciu. V príklade voláme setDiscount na Zákazník objekt

Okrem toho sme použili Zákazník triedy v súbore Excel. Vytvorme to teda teraz.

3.2. The Zákazník Trieda

Ako je zrejmé z PODMIENOK a AKCIÍ v hárku programu Excel, používame objekt Zákazník trieda pre vstupné údaje (typu a rokov) a výsledok uložiť (zľava).

The Zákazník trieda:

public class Customer {private CustomerType type; súkromné ​​roky; zľava private int; // Štandardné getre a setre public enum CustomerType {INDIVIDUAL, BUSINESS; }}

4. Vytváranie inštancie Drools Rule Engine

Predtým, ako môžeme vykonať pravidlá, ktoré sme definovali, musíme pracovať s inštanciou Drools rule engine. Na to musíme použiť základné komponenty Kie.

4.1. KieServices

The KieServices trieda poskytuje prístup ku všetkým zariadeniam Kie build a runtime. Poskytuje niekoľko tovární, služieb a obslužných metód. Poďme sa teda najskôr chytiť a KieServices inštancia:

KieServices kieServices = KieServices.Factory.get ();

Pomocou KieServices budeme vytvárať nové inštancie KieFileSystem, KieBuildera KieContainer.

4.2. KieFileSystem

KieFileSystem je virtuálny súborový systém. Pridajme k tomu našu tabuľku Excel:

Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); KieFileSystem kieFileSystem = kieServices.newKieFileSystem (). Write (dt); 

4.3. KieBuilder

Teraz vytvorte obsah KieFileSystem odovzdaním KieBuilder:

KieBuilder kieBuilder = kieServices.newKieBuilder (kieFileSystem); kieBuilder.buildAll ();

Ak je úspešne postavený, vytvára a KieModule (akákoľvek nádoba vyrobená v Mavene, v ktorej je kmodule.xml, je a KieModule).

4.4. KieRepository

Rámec automaticky pridáva KieModule (vyplývajúce z výstavby) do KieRepository:

KieRepository kieRepository = kieServices.getRepository ();

4.5. KieContainer

Teraz je možné vytvoriť nový KieContainer s tým KieModule pomocou jeho ReleaseId. V takom prípade priradí Kie predvolené nastavenie ReleaseId:

ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId (); KieContainer kieContainer = kieServices.newKieContainer (krDefaultReleaseId);

4.6. KieSession

Teraz môžeme získať KieSession z KieContainer. Naša aplikácia interaguje s KieSession, ktorý ukladá a spúšťa dáta za behu:

KieSession kieSession = kieContainer.newKieSession ();

5. Vykonávanie pravidiel

Nakoniec je čas poskytnúť vstupné údaje a spustiť pravidlá:

Zákazník zákazník = nový zákazník (CustomerType.BUSINESS, 2); kieSession.insert (zákazník); kieSession.fireAllRules ();

6. Testovacie prípady

Teraz pridajme niekoľko testovacích prípadov:

public class DiscountExcelIntegrationTest {private KieSession kSession; @ Pred verejnosťou void setup () {Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); kSession = new DroolsBeanFactory (). getKieSession (dt); } @Test public void giveIndvidualLongStanding_whenFireRule_thenCorrectDiscount () vyvolá výnimku {Customer customer = new Customer (CustomerType.INDIVIDUAL, 5); kSession.insert (zákazník); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 15); } @Test public void giveIndvidualRecent_whenFireRule_thenCorrectDiscount () vyvolá výnimku {Customer customer = new Customer (CustomerType.INDIVIDUAL, 1); kSession.insert (zákazník); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 5); } @Test public void giveBusinessAny_whenFireRule_thenCorrectDiscount () vyvolá výnimku {Customer customer = new Customer (CustomerType.BUSINESS, 0); kSession.insert (zákazník); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 20); }}

7. Riešenie problémov

Drools prevádza rozhodovaciu tabuľku na DRL. Z tohto dôvodu môže byť riešenie chýb a preklepov v súbore Excel náročné. Chyby sa často týkajú obsahu DRL. Takže pri riešení problémov pomáha tlačiť a analyzovať DRL:

Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); DecisionTableProviderImpl decisionTableProvider = nový DecisionTableProviderImpl (); Reťazec drl = decisionTableProvider.loadFromResource (dt, null);

8. Záver

V tomto článku sme videli rýchly príklad použitia programu Drools na správu obchodných pravidiel v excelovskej tabuľke. Videli sme štruktúru a minimálnu množinu kľúčových slov, ktoré sa majú použiť pri definovaní pravidiel v súbore Excel. Ďalej sme na prečítanie a spustenie pravidiel použili komponenty Kie. Nakoniec sme napísali testovacie prípady, aby sme overili výsledky.

Príklad použitý v tomto článku nájdete ako vždy v projekte Github.


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