Drools koristeći pravila iz Excel datoteka

1. Pregled

Drools ima podršku za upravljanje poslovnim pravilima u formatu proračunske tablice.

U ovom ćemo članku vidjeti brzi primjer upotrebe Droolova za upravljanje poslovnim pravilima pomoću Excel datoteke.

2. Ovisnosti Mavena

Dodajmo potrebne ovisnosti Droolova u našu aplikaciju:

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

Najnoviju verziju ovih ovisnosti možete pronaći na kie-ci i drools-decibables.

3. Utvrđivanje pravila u Excelu

Za naš primjer, definirajmo pravila za određivanje popusta na temelju vrste kupca i broja godina kupca:

  • Pojedinačni kupci s više od 3 godine ostvaruju popust od 15%
  • Pojedinačni kupci s manje od 3 godine ostvaruju popust od 5%
  • Svi poslovni kupci ostvaruju popust od 20%

3.1. Datoteka Excel

Počnimo s izradom naše excel datoteke prema specifičnoj strukturi i ključnim riječima koje zahtijevaju Drools:

Za naš jednostavni primjer koristili smo najrelevantniji skup ključnih riječi:

  • RuleSet - označava početak tablice odluka
  • Uvoz - Java klase korištene u pravilima
  • Tablica pravila - označava početak skupa pravila
  • Ime - Naziv pravila
  • STANJE - isječak koda stanja koji se provjerava prema ulaznim podacima. Pravilo treba sadržavati barem jedan uvjet
  • AKCIJSKI - isječak koda radnje koju treba poduzeti ako su ispunjeni uvjeti pravila. Pravilo treba sadržavati barem jednu radnju. U primjeru zovemo setDiscount na Kupac objekt

Uz to, koristili smo i Kupac klase u datoteci Excel. Pa, kreirajmo to sada.

3.2. The Kupac Razred

Kao što se može vidjeti iz UVJETA i AKCIJE u excel listu, koristimo objekt Kupac klasa za ulazne podatke (tip i godine) i za pohranu rezultata (popust).

The Kupac razred:

kupac javne klase {tip privatnog kupca; privatne int godine; privatni int popust; // Standardni getteri i postavljači public enum CustomerType {INDIVIDUAL, BUSINESS; }}

4. Stvaranje instance Drools pravila pravila

Prije nego što možemo izvršiti pravila koja smo definirali, moramo raditi s instancom Drools pravila motora. Za to moramo koristiti Kie jezgrene komponente.

4.1. KieServices

The KieServices klasa pruža pristup svim objektima Kie build i runtime. Pruža nekoliko tvornica, usluga i korisnih metoda. Pa, hajde da se prvo dohvatimo a KieServices primjer:

KieServices kieServices = KieServices.Factory.get ();

Korištenjem KieServices stvorit ćemo nove primjerke KieFileSystem, KieBuilder, i KieContainer.

4.2. KieFileSystem

KieFileSystem je virtualni sustav datoteka. Dodajte joj proračunsku tablicu Excel:

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

4.3. KieBuilder

Sada, izgradite sadržaj KieFileSystem prosljeđivanjem KieBuilder:

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

Ako se uspješno izgradi, stvara KieModule (bilo koja tegla proizvedena od Mavena s kmodule.xml u sebi je KieModule).

4.4. KieRepository

Okvir automatski dodaje KieModule (rezultat gradnje) do KieRepository:

KieRepository kieRepository = kieServices.getRepository ();

4.5. KieContainer

Sada je moguće stvoriti novo KieContainer s ovim KieModule koristeći svoj ReleaseId. U ovom slučaju, Kie dodjeljuje zadani ReleaseId:

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

4.6. KieSession

Sada možemo dobiti KieSession od KieContainer. Naša aplikacija komunicira s KieSession, koji pohranjuje i izvršava na runtime podacima:

KieSession kieSession = kieContainer.newKieSession ();

5. Izvršenje pravila

Konačno, vrijeme je za pružanje ulaznih podataka i pokretanje pravila:

Kupac kupac = novi kupac (CustomerType.BUSINESS, 2); kieSession.insert (kupac); kieSession.fireAllRules ();

6. Ispitni slučajevi

Dodajmo sada nekoliko testnih slučajeva:

javna klasa DiscountExcelIntegrationTest {private KieSession kSession; @ Prije postavljanja javne praznine () {Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); kSession = novi DroolsBeanFactory (). getKieSession (dt); } @Test public void giveIndvidualLongStanding_whenFireRule_thenCorrectDiscount () baca izuzetak {Kupac kupac = novi kupac (CustomerType.INDIVIDUAL, 5); kSession.insert (kupac); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 15); } @Test public void giveIndvidualRecent_whenFireRule_thenCorrectDiscount () baca izuzetak {Kupac kupac = novi kupac (CustomerType.INDIVIDUAL, 1); kSession.insert (kupac); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 5); } @Test public void giveBusinessAny_whenFireRule_thenCorrectDiscount () baca izuzetak {Kupac kupac = novi kupac (CustomerType.BUSINESS, 0); kSession.insert (kupac); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 20); }}

7. Rješavanje problema

Drools pretvara tablicu odluka u DRL. Zbog toga suočavanje s pogreškama i pogrešnim greškama u Excel datoteci može biti teško. Često se pogreške odnose na sadržaj DRL-a. Dakle, za rješavanje problema pomaže ispis i analiza DRL-a:

Resurs dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); DecisionTableProviderImpl decisionTableProvider = novi DecisionTableProviderImpl (); Niz drl = decisionTableProvider.loadFromResource (dt, null);

8. Zaključak

U ovom smo članku vidjeli brzi primjer upotrebe Droolova za upravljanje poslovnim pravilima u proračunskoj tablici Excel. Vidjeli smo strukturu i minimalni skup ključnih riječi koji će se koristiti za definiranje pravila u Excel datoteci. Dalje, koristili smo Kie komponente za čitanje i aktiviranje pravila. Na kraju smo napisali test slučajeve kako bismo provjerili rezultate.

Kao i uvijek, primjer korišten u ovom članku može se naći u projektu Github.