Drools az Excel fájlok szabályainak használatával
1. Áttekintés
A Drools támogatja az üzleti szabályok táblázatos formátumú kezelését.
Ebben a cikkben egy gyors példát láthatunk a Drools használatáról az üzleti szabályok kezeléséhez egy Excel fájl segítségével.
2. Maven-függőségek
Vegyük fel a szükséges Drools-függőségeket alkalmazásunkba:
org.kie kie-ci 7.1.0.Beta2 org.drools drools-decisiontables 7.1.0.Beta2
Ezeknek a függőségeknek a legújabb verziója megtalálható a kie-ci és a drools-decisiontables oldalon.
3. Szabályok meghatározása az Excelben
Például definiáljunk szabályokat a kedvezmény meghatározásához az ügyfél típusa és az ügyfélként eltöltött évek száma alapján:
- A 3 évnél idősebb egyéni vásárlók 15% kedvezményt kapnak
- A 3 évnél fiatalabb egyéni ügyfelek 5% kedvezményt kapnak
- Minden üzleti ügyfél 20% kedvezményt kap
3.1. Az Excel fájl
Kezdjük az excel fájlunk létrehozásával a Drools által megkövetelt sajátos struktúra és kulcsszavak szerint:
Egyszerű példánkként a legrelevánsabb kulcsszavakat használtuk:
- RuleSet - a döntési táblázat elejét jelzi
- Importálás - A szabályokban használt Java osztályok
- RuleTable - a szabályhalmaz kezdetét jelzi
- Név - A szabály neve
- FELTÉTEL - a bemeneti adatokkal ellenőrizendő feltétel kódrészlete. A szabálynak tartalmaznia kell legalább egy feltételt
- AKCIÓ - a szabály feltételeinek teljesülése esetén végrehajtandó művelet kódrészlete. A szabálynak tartalmaznia kell legalább egy műveletet. A példában hívunk setDiscount a Vevő tárgy
Ezenkívül a Vevő osztály az Excel fájlban. Tehát hozzuk létre ezt most.
3.2. A Vevő Osztály
Amint az az excel lap FELTÉTELEKBŐL és AKCIÓJÁBÓL látható, a. Objektumát használjuk Vevő osztály a bemeneti adatokhoz (típus és évek) és az eredmény tárolására (kedvezmény).
A Vevő osztály:
public class Ügyfél {private CustomerType típus; magán int évek; privát int kedvezmény; // Standard getters and setters public enum CustomerType {INDIVIDUAL, BUSINESS; }}
4. Drools szabály motor példány létrehozása
Mielőtt végre tudnánk hajtani a definiált szabályokat, dolgoznunk kell a Drools szabály motor egyik példányával. Ehhez a Kie alapkomponenseit kell használnunk.
4.1. KieServices
A KieServices osztály hozzáférést biztosít a Kie összes építési és futási idejéhez. Számos gyárat, szolgáltatást és közüzemi módszert kínál. Tehát először vegyük figyelembe a KieServices példa:
KieServices kieServices = KieServices.Factory.get ();
A KieServices segítségével új példányokat fogunk létrehozni KieFileSystem, KieBuilder, és KieContainer.
4.2. KieFileSystem
KieFileSystem egy virtuális fájlrendszer. Adjuk hozzá az Excel táblázatot:
Dt erőforrás = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); KieFileSystem kieFileSystem = kieServices.newKieFileSystem (). Write (dt);
4.3. KieBuilder
Most építsd fel a KieFileSystem azzal átadva KieBuilder:
KieBuilder kieBuilder = kieServices.newKieBuilder (kieFileSystem); kieBuilder.buildAll ();
Sikeres felépítés esetén létrehoz egy KieModule (bármely Maven által gyártott edény, benne egy kmodule.xml, a KieModule).
4.4. KieRepository
A keretrendszer automatikusan hozzáadja a KieModule (az összeállításból ered) KieRepository:
KieRepository kieRepository = kieServices.getRepository ();
4.5. KieContainer
Most már lehet újat létrehozni KieContainer ezzel KieModule annak használatával ReleaseId. Ebben az esetben Kie alapértelmezést rendel hozzá ReleaseId:
ReleaseId krDefaultReleaseId = kieRepository.getDefaultReleaseId (); KieContainer kieContainer = kieServices.newKieContainer (krDefaultReleaseId);
4.6. KieSession
Most megszerezhetjük KieSession tól KieContainer. Alkalmazásunk kölcsönhatásba lép a KieSession, amely tárolja és futtatja a futási adatokat:
KieSession kieSession = kieContainer.newKieSession ();
5. A szabályok végrehajtása
Végül itt az ideje a bemeneti adatok megadására és a szabályok érvényre juttatására:
Ügyfél vevő = új vásárló (CustomerType.BUSINESS, 2); kieSession.insert (ügyfél); kieSession.fireAllRules ();
6. Tesztesetek
Adjunk hozzá néhány tesztesetet:
public class DiscountExcelIntegrationTest {private KieSession kSession; @A nyilvános void beállítása előtt () {Resource dt = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); kSession = új DroolsBeanFactory (). getKieSession (dt); } @Test public void giveIndvidualLongStanding_whenFireRule_thenCorrectDiscount () dobja a Kivételt {Customer customer = new Customer (CustomerType.INDIVIDUAL, 5); kSession.insert (ügyfél); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 15); } @Test public void giveIndvidualRecent_whenFireRule_thenCorrectDiscount () dobja a Kivételt {Customer customer = new Customer (CustomerType.INDIVIDUAL, 1); kSession.insert (ügyfél); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 5); } @Test public void giveBusinessAny_whenFireRule_thenCorrectDiscount () dobja a Kivételt {Customer customer = new Customer (CustomerType.BUSINESS, 0); kSession.insert (ügyfél); kSession.fireAllRules (); assertEquals (customer.getDiscount (), 20); }}
7. Hibaelhárítás
A Drools a döntési táblázatot DRL-vé alakítja. Emiatt az Excel fájl hibáinak és elírási hibáinak kezelése nehéz lehet. A hibák gyakran a DRL tartalmára vonatkoznak. Tehát a hibaelhárításhoz segít kinyomtatni és elemezni a DRL-t:
Dt erőforrás = ResourceFactory .newClassPathResource ("com / baeldung / drools / rules / Discount.xls", getClass ()); DecisionTableProviderImpl decisionTableProvider = new DecisionTableProviderImpl (); Karaktersorozat drl = decisionTableProvider.loadFromResource (dt, null);
8. Következtetés
Ebben a cikkben egy gyors példát láthattunk a Drools használatáról az üzleti szabályok kezelésére egy Excel táblázatban. Láttuk a struktúrát és a minimális kulcsszavakat, amelyeket fel kell használni a szabályok meghatározásához egy Excel fájlban. Ezután a Kie összetevőket használtuk a szabályok elolvasására és bevetésére. Végül teszteseteket írtunk az eredmények igazolására.
Mint mindig, az ebben a cikkben használt példa megtalálható a Github projektben.