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.