Bevezetés a Drools-ba

1. Áttekintés

A Drools egy üzleti szabálykezelő rendszer (BRMS) megoldás. Olyan szabálymotort biztosít, amely a tényeket feldolgozza, és a szabályok és a tények feldolgozása eredményeként kimenetet produkál. Az üzleti logika központosítása lehetővé teszi a változások gyors és olcsó bevezetését.

Továbbá áthidalja a szakadékot az üzleti és a műszaki csoport között azáltal, hogy lehetőséget nyújt a szabályok könnyen érthető formátumban történő megírására.

2. Maven-függőségek

A Drools használatának megkezdéséhez először hozzá kell adnunk pár függőséget pom.xml:

 org.kie kie-ci 7.1.0.Beta1 org.drools nyáladzási döntési táblázatok 7.1.0.Beta1 

Mindkét függőség legújabb verziója elérhető a Maven központi adattárában kie-ci és drools-decisiontable néven.

3. Drools alapjai

Megvizsgáljuk a Drools alapfogalmait:

  • Tények - olyan adatokat képvisel, amelyek a szabályok inputjaként szolgálnak
  • Munka memória tárolóval Tények, ahol a minták illesztésére használják, és módosíthatók, beilleszthetők és eltávolíthatók
  • Szabály - egyetlen szabályt képvisel, amely társul Tények megfelelő cselekvésekkel. Írható Drools szabálynyelven a .drl fájlok vagy mint Döntési táblázat excel táblázatban
  • Tudás munkamenet - rendelkezik a lövöldözési szabályokhoz szükséges összes erőforrással; minden Tények beillesztésre kerülnek a munkamenetbe, majd az egyező szabályok elindulnak
  • Tudásbázis - képviseli az ismereteket a Drools ökoszisztémában, információval rendelkezik a forrásokról, ahol Szabályok megtalálhatók, és ez is létrehozza a Tudás munkamenet
  • ModulEgy modul több tudásbázissal rendelkezik, amelyek különböző munkameneteket tarthatnak

4. Java konfiguráció

Egy adott adat szabályainak kiaknázásához példaként kell állítanunk a keretrendszer által biztosított osztályokat a szabályfájlok és a Tények:

4.1. KieFileSystem

Először be kell állítanunk a KieFileSystem bab; ez egy memóriában lévő fájlrendszer, amelyet a keretrendszer biztosít. A következő kód biztosítja a tárolót a Drools erőforrások, például a szabályfájlok, a döntési táblák programozott meghatározásához:

public KieFileSystem kieFileSystem () dobja az IOException-t {KieFileSystem kieFileSystem = getKieServices (). newKieFileSystem (); for (Erőforrás fájl: getRuleFiles ()) {kieFileSystem.write (ResourceFactory.newClassPathResource (RULES_PATH + file.getFilename (), "UTF-8")); } return kieFileSystem; }

Itt RULES_PATH jelöli a szabályfájlok helyét a fájlrendszerben. Itt olvassuk a fájlokat osztályút ami jellemzően / src / main / resources Maven projekt esetén.

4.2. KieContainer

Ezután be kell állítanunk a KieContainer amely helyőrző az összes KieBases különösképpen KieModule. KieContainer más bab segítségével épül, beleértve KieFileSystem, KieModule, és KieBuilder.

A buildAll () metódus bekapcsolva KieBuilder felépíti az összes forrást és összekapcsolja őket KieBase. Csak akkor hajt végre sikeresen, ha képes megtalálni és érvényesíteni az összes szabályfájlt:

public KieContainer kieContainer () dobja az IOException-t {KieRepository kieRepository = getKieServices (). getRepository (); kieRepository.addKieModule (új KieModule () {public ReleaseId getReleaseId () {return kieRepository.getDefaultReleaseId ();}}); KieBuilder kieBuilder = getKieServices () .newKieBuilder (kieFileSystem ()) .buildAll (); return getKieServices (). newKieContainer (kieRepository.getDefaultReleaseId ()); }

4.3. KieSession

A szabályokat úgy nyitják meg, hogy megnyitják a KieSession bab - amely lekérhető KieContainer:

public KieSession kieSession () dobja az IOException {return kieContainer (). newKieSession (); }

5. Végrehajtási szabályok

Most, hogy végeztünk a beállítással, nézzünk meg néhány lehetőséget a szabályok létrehozására.

Megvizsgáljuk a szabály végrehajtását azzal a példával, hogy a jelentkezőket meghatározott szerepkörbe sorolják-e be, az aktuális fizetése és a szerzett tapasztalatai alapján.

5.1. Drools szabályfájl (.drl)

Egyszerűen fogalmazva, a Drools szabályfájl tartalmazza az összes üzleti szabályt.

Egy szabály magában foglalja a Mikor-Akkor konstrukció, itt a Mikor szakasz felsorolja az ellenőrizni kívánt állapotot, és Azután szakasz felsorolja a feltétel teljesülése esetén teendő lépéseket:

csomag com.baeldung.drools.rules; import com.baeldung.drools.model.Applicant; globális com.baeldung.drools.model.SuggestedRole javasoltRole; dialektus „mvel” szabály „Javasolja a kezelői szerepkört”, amikor a pályázó (experienceInYears> 10) a jelentkező (currentSalary> 1000000 && currentSalary <= 2500000), majd a javasoltRole.setRole ("Manager"); vége

Ez a szabály a Pályázó és SuggestedRole tények ben KieSession:

public SuggestedRole javaslatARoleForApplicant (Pályázó pályázó, SuggestedRole javasoltRole) {KieSession kieSession = kieContainer.newKieSession (); kieSession.insert (pályázó); kieSession.setGlobal ("javasoltRole", javasoltRole); kieSession.fireAllRules (); // ...}

Két feltételt tesztel Pályázó példát, majd mindkét feltétel teljesülése alapján meghatározza a Szerep mező a SuggestedRole tárgy.

Ez a teszt végrehajtásával ellenőrizhető:

@Test public void whenCriteriaMatching_ThenSuggestManagerRole () {Pályázó kérelmező = új Pályázó ("David", 37, 1600000.0,11); SuggestedRole javasoltRole = new SuggestedRole (); pretendService.suggestARoleForApplicant (kérelmező, javasoltRole); assertEquals ("Kezelő", javasoltRole.getRole ()); }

Ebben a példában kevés Drools által biztosított kulcsszót használtunk. Értsük meg használatukat:

  • csomag - ez a csomag neve, amelyet a kmodule.xml, a szabályfájl ebben a csomagban található
  • import - ez hasonló a Java-hoz import utasítás, itt meg kell adnunk azokat az osztályokat, amelyeket beillesztünk a KnowledgeSession
  • globális - ez egy munkamenet globális szintű változójának meghatározására szolgál; ez felhasználható a bemeneti paraméter átadására vagy egy kimeneti paraméter lekérésére, amely összefoglalja a munkamenet információit
  • nyelvjárás - egy nyelvjárás határozza meg a feltétel szekciót vagy a cselekvés szakasz kifejezéseiben használt szintaxist. Alapértelmezés szerint a nyelvjárás Java. A drrools szintén támogatja a nyelvjárást mvel; a Java-alapú alkalmazások kifejezési nyelve. Támogatja a terepet és a metódus / jobb hozzáférést
  • szabály - ez meghatároz egy szabályblokkot egy szabálynévvel
  • mikor - ez egy szabályfeltételt határoz meg, ebben a példában az ellenőrzött feltételek teljesülnek Pályázó miután Év tapasztalat több mint tíz év és jelenlegi fizetés egy bizonyos tartományban
  • azután - ez a blokk akkor hajtja végre a műveletet, amikor a mikor blokk met. Ebben a példában a Pályázó Manager szerepként van beállítva

5.2. Döntési táblázatok

A döntési táblázat lehetővé teszi a szabályok definiálását egy előre formázott Excel táblázatban. A Drools által biztosított döntési táblázat előnye, hogy könnyen érthetőek egy nem technikai személy számára is.

Ez akkor is hasznos, ha hasonló szabályok vannak, de eltérő értékekkel, ebben az esetben könnyebb új sort hozzáadni az excel lapon, ellentétben azzal, hogy új szabályt írunk be.drl fájlokat. Lássuk, mi a döntési táblázat felépítése, példával a címke felhelyezésére a termékre a terméktípus alapján:

A Döntési táblázat különböző szakaszokba van csoportosítva, a felső olyan, mint egy fejléc szakasz, ahol megadjuk a RuleSet (azaz csomag, ahol a szabályfájlok találhatók), Importálás (Importálandó Java osztályok) és Megjegyzések (megjegyzések a szabályok céljáról).

A központi szakaszt hívjuk, ahol meghatározzuk a szabályokat RuleTable amely csoportosítja az ugyanazon tartományobjektumra alkalmazott szabályokat.

A következő sorban oszloptípusok vannak FELTÉTEL és AKCIÓ. Ezen oszlopokon belül hozzáférhetünk az egyik sorban említett tartományobjektum tulajdonságaihoz és azok értékéhez a következő sorokban.

A szabályok elbocsátásának mechanizmusa hasonló ahhoz, amit láttunk .drl fájlokat.

A teszt végrehajtásával ellenőrizhetjük a szabályok alkalmazásának eredményét:

@Test public void whenProductTypeElectronic_ThenLabelBarcode () {Product product = new Product ("Mikrohullámú", "Elektronikus"); termék = productService.applyLabelToProduct (termék); assertEquals ("Vonalkód", product.getLabel ()); }

6. Következtetés

Ebben a rövid cikkben feltártuk a Drools üzleti szabály motorjának használatát alkalmazásunkban. Láttuk azt is, hogy a szabályokat a Drools szabálynyelven, valamint a táblázatokban könnyen érthető nyelven írhatjuk.

Mint mindig, a cikk teljes kódja elérhető a GitHubon.