מבוא לסלולים

1. סקירה כללית

דרולים הוא פתרון של מערכת ניהול עסקים (BRMS). הוא מספק מנוע כלל המעבד עובדות ומייצר תפוקה כתוצאה מעיבוד כללים ועובדות. ריכוז ההיגיון העסקי מאפשר להכניס שינויים במהירות ובזול.

זה גם מגשר על הפער בין הצוותים העסקיים והטכניים בכך שהוא מספק מתקן לכתיבת הכללים בפורמט קל להבנה.

2. תלות Maven

כדי להתחיל עם דרולים, עלינו להוסיף תחילה כמה תלות pom.xml:

 org.kie kie-ci 7.1.0.Beta1 org.drools רירויות-החלטות 7.1.0.Beta1 

הגרסה האחרונה של שתי התלות זמינה במאגר המרכזי של Maven כ- kie-ci ושולחן החלטות ריר.

3. בסיסי דרולים

אנו הולכים לבחון מושגים בסיסיים של דרולים:

  • עובדות - מייצג נתונים המשמשים כקלט לכללים
  • זיכרון עובד אחסון עם עובדות, היכן הם משמשים להתאמת תבניות וניתן לשנות, להכניס ולהסיר
  • כְּלָל - מייצג כלל יחיד המקושר עובדות עם פעולות תואמות. אפשר לכתוב את זה בשפה הכלולה דרולים ב .drl קבצים או כ- טבלת החלטות בגיליון אלקטרוני של Excel
  • מושב ידע - הוא מחזיק בכל המשאבים הנדרשים לכללי הירי; את כל עובדות מוכנסים לסשן ואז כללי התאמה מופעלים
  • בסיס ידע - מייצג את הידע במערכת האקולוגית של דרולים, יש לו מידע על המשאבים שבהם כללים נמצאים, וגם זה יוצר את מושב ידע
  • מודולמודול מכיל מספר בסיסי ידע שיכולים לקיים הפעלות שונות

4. תצורת Java

כדי להפעיל כללים על נתונים מסוימים, עלינו ליצור את המסגרת המסופקת לשיעורים עם מידע על המיקום של קבצי הכללים וה- עובדות:

4.1. מערכת KieFileSystem

ראשית, עלינו להגדיר את מערכת KieFileSystem אפונה; זו מערכת קבצים בזיכרון המסופקת על ידי המסגרת. הקוד הבא מספק את המכולה להגדרת משאבי ה- Drools כמו קבצי כללים, טבלאות החלטה, מבחינה תכנותית:

ציבור KieFileSystem kieFileSystem () זורק IOException {KieFileSystem kieFileSystem = getKieServices (). newKieFileSystem (); עבור (קובץ משאבים: getRuleFiles ()) {kieFileSystem.write (ResourceFactory.newClassPathResource (RULES_PATH + file.getFilename (), "UTF-8")); } להחזיר kieFileSystem; }

פה RULES_PATH מציין את המיקום של קבצי הכללים במערכת הקבצים. כאן אנו קוראים את הקבצים מ מסלול כיתה שהוא בדרך כלל / src / main / resources במקרה של פרויקט Maven.

4.2. KieContainer

לאחר מכן, עלינו להגדיר את KieContainer שהוא מציין מקום לכל KieBases בפרט KieModule. מיכל KieContainer בנוי בעזרת שעועית אחרת כולל KieFileSystem, KieModule, ו KieBuilder.

ה buildAll () שיטה המופעלת על KieBuilder בונה את כל המשאבים וקושר אותם אליהם KieBase. היא מבוצעת בהצלחה רק כאשר היא מסוגלת למצוא ולאמת את כל קבצי הכללים:

ציבור KieContainer kieContainer () זורק IOException {KieRepository kieRepository = getKieServices (). getRepository (); kieRepository.addKieModule (חדש KieModule () {public ReleaseId getReleaseId () {return kieRepository.getDefaultReleaseId ();}}); KieBuilder kieBuilder = getKieServices () .newKieBuilder (kieFileSystem ()) .buildAll (); להחזיר getKieServices (). newKieContainer (kieRepository.getDefaultReleaseId ()); }

4.3. KieSession

הכללים מפוטרים על ידי פתיחת א KieSession שעועית - שניתן לאחזר ממנה מיכל KieContainer:

ציבור KieSession kieSession () זורק IOException {להחזיר kieContainer (). newKieSession (); }

5. יישום כללים

עכשיו, לאחר שסיימנו את ההתקנה, בואו נסתכל על כמה אפשרויות ליצירת כללים.

נחקור את יישום הכלל על ידי דוגמה לסיווג מועמד לתפקיד ספציפי, על סמך משכורתו הנוכחית ומספר שנות הניסיון שיש לו.

5.1. קובץ חוק ריריות (.drl)

במילים פשוטות, קובץ הכללים של דרול מכיל את כל הכללים העסקיים.

כלל כולל א אז מתי לִבנוֹת, הנה ה מתי החלק מפרט את התנאי שיש לבדוק, ו לאחר מכן החלק מפרט את הפעולות שיש לבצע אם התנאי מתקיים:

חבילה com.baeldung.drools.rules; יבוא com.baeldung.drools.model.Applicant; com.baeldung.drools.model.SuggestedRole הציע תפקיד גלובלי; ניב "כלל" mvel "הצע תפקיד מנהל" כאשר המועמד (experienceInYears> 10) המועמד (currentSalary> 1000000 && currentSalary <= 2500000) ואז הציע Roll.setRole ("מנהל"); סוֹף

ניתן לפטר כלל זה על ידי הכנסת ה- מְבַקֵשׁ ו הצעה תפקיד עובדות ב KieSession:

הצעת תפקיד ציבורית הצעהARoleForApplicant (המועמד המועמד, SuggestedRole הציע תפקיד) {KieSession kieSession = kieContainer.newKieSession (); kieSession.insert (מועמד); kieSession.setGlobal ("הציע תפקיד", הציע תפקיד); kieSession.fireAllRules (); // ...}

זה בודק שני תנאים מְבַקֵשׁ מופע ואז בהתבסס על מילוי שני התנאים הוא מגדיר את תַפְקִיד שדה ב הצעה תפקיד לְהִתְנַגֵד.

ניתן לאמת זאת על ידי ביצוע הבדיקה:

@ מבחן פומבי בטל כאשרCriteriaMatching_ThenSuggestManagerRole () {מועמד המועמד = מועמד חדש ("דוד", 37, 1600000.0,11); SuggestedRole suggestedRole = חדש SuggestedRole (); seekService.suggestARoleForApplicant (מועמד, הציע תפקיד); assertEquals ("מנהל", הציעRole.getRole ()); }

בדוגמה זו, השתמשנו בכמה מילות מפתח שסופקו דרולים. בואו להבין את השימוש בהם:

  • חבילה - זהו שם החבילה שאנו מציינים ב- kmodule.xml, קובץ הכלל ממוקם בתוך חבילה זו
  • יְבוּא - זה דומה ל- Java יְבוּא הצהרה, כאן עלינו לציין את המחלקות שאנו מכניסים ל- KnowledgeSession
  • גלובלי - זה משמש להגדרת משתנה ברמה גלובלית לפגישה; זה יכול לשמש להעברת פרמטר קלט או לקבל פרמטר פלט שיסכם את המידע לפגישה
  • נִיב - ניב מציין את התחביר המשמש בביטויים בסעיף התנאי או בסעיף הפעולה. כברירת מחדל הניב הוא Java. ריריות תומכות גם בניב פלא; זו שפת ביטוי ליישומים מבוססי Java. זה תומך בשדה ובגישה / גטרית
  • כְּלָל - זה מגדיר בלוק עם שם הכלל
  • מתי - זה מציין תנאי כלל, בדוגמה זו התנאים שנבדקים הם מְבַקֵשׁ שיש experienceInYears יותר מעשר שנים ו משכורת נוכחית בטווח מסוים
  • לאחר מכן - חסימה זו מבצעת את הפעולה כאשר התנאים ב- מתי חסום נפגש. בדוגמה זו, מְבַקֵשׁ התפקיד מוגדר כמנהל

5.2. לוחות החלטות

טבלת החלטות מספקת את היכולת להגדיר כללים בגיליון אלקטרוני מעוצב מראש של Excel. היתרון עם דרולים שסופקה טבלת ההחלטות היא שהם קלים להבנה גם עבור אדם שאינו טכני.

כמו כן, זה שימושי כשיש חוקים דומים, אך עם ערכים שונים, במקרה זה, קל יותר להוסיף שורה חדשה בגליון ה- Excel בניגוד לכתיבת כלל חדש ב-.drl קבצים. בואו נראה מה מבנה טבלת ההחלטות עם דוגמה להחלת התווית על מוצר בהתבסס על סוג המוצר:

טבלת ההחלטות מקובצת בחלקים שונים, החלק העליון הוא כמו קטע כותרת בו אנו מציינים את RuleSet (כלומר חבילה בה נמצאים קבצי הכללים), יְבוּא (שיעורי Java המיועדים לייבוא) ו- הערות (הערות על מטרת הכללים).

החלק המרכזי שבו אנו מגדירים כללים נקרא RuleTable שמקבץ את הכללים המוחלים על אותו אובייקט תחום.

בשורה הבאה יש לנו סוגי עמודות מַצָב ו פעולה. בתוך עמודות אלה, אנו יכולים לגשת למאפיינים של אובייקט התחום המוזכר בשורה אחת ולערכים שלהם בשורות הבאות.

המנגנון לפטר את הכללים דומה למה שראינו איתו .drl קבצים.

אנו יכולים לאמת את התוצאה של החלת כללים אלה על ידי ביצוע הבדיקה:

@ מבחן ציבורי בטל כאשר ProductTypeElectronic_ThenLabelBarcode () {מוצר מוצר = מוצר חדש ("מיקרוגל", "אלקטרוני"); product = productService.applyLabelToProduct (מוצר); assertEquals ("BarCode", product.getLabel ()); }

6. מסקנה

במאמר מהיר זה, בחנו את השימוש ב- Drools כמנוע כלל עסקי ביישום שלנו. ראינו גם את הדרכים המרובות בהן אנו יכולים לכתוב את הכללים בשפת הכללים של דרול, כמו גם את השפה הקלה להבנה בגיליונות אלקטרוניים.

כמו תמיד, הקוד השלם למאמר זה זמין באתר GitHub.