بخش های اصلی

آموزش Drools

نحوه خطایابی در Drools

راه های مختلفی برای خطایابیِ پروژه ی Drools، وجود داره. در این بخش، یک کلاسِ Utility (ابزار)، می نویسیم که به شما این امکان را میده که بفهمین اول کدام ruleها اجرا میشن .

با این راه کار، می توانید همه ی ruleهایی که در در پروژه ی Droolsتان در حال اجرا هستن را بررسی کنین. در ادامه کلاس Utility را می بینین

Utility.java

package com.sample;

import org.drools.spi.KnowledgeHelper;

public class Utility {
   public static void help(final KnowledgeHelper drools, final String message){
      System.out.println(message);
      System.out.println("\nrule triggered: " + drools.getRule().getName());
   }
   
   public static void helper(final KnowledgeHelper drools){
      System.out.println("\nrule triggered: " + drools.getRule().getName());
   }
}

اولین متد، متدِ help، rule اجرا شده را بهمراه برخی اطلاعات دیگه، پرینت می کنه (برمی گرداند)، و می توانید این اطلاعات را بصورت یک رشته ی متنی به یک فایلِ DRL، پاس بدین.

دومین rule، که helper است، اینکه یک rule خاص اجرا شده یا نه را چاپ می کنه (برمیگرداند).

در هر فایل DRL، یکی از متدهای Utility را اضافه کرده ایم. تابع import را هم به فایل DRL (Pune.drl)، اضافه کرده ایم. در ruleها در بخشِ then، یک فراخوانی از تابعِ utility را اضافه کرده ایم. فایلِ تغییر یافته ی Pune.drl در ادامه آورده شده؛ تغییرات با رنگ آبی مشخص شده اند.

فایل تغییر یافته ی Pune.drl

//created on: Dec 24, 2014
package droolsexample

//list any import classes here.
import com.sample.ItemCity;
import java.math.BigDecimal;
import com.sample.HelloCity; 

import function com.sample.Utility.helper;

// declare any global variables here
dialect "java"
rule "Pune Medicine Item"

   when
      item : ItemCity(purchaseCity == ItemCity.City.PUNE, 
                      typeofItem == ItemCity.Type.MEDICINES)
   
   then
      BigDecimal tax = new BigDecimal(0.0);
      item.setLocalTax(tax.multiply(item.getSellPrice()));
      HelloCity.writeHello(item.getPurchaseCity().toString()); 
      helper(drools);
end

rule "Pune Groceries Item"

   when
      item : ItemCity(purchaseCity == ItemCity.City.PUNE, 
                      typeofItem == ItemCity.Type.GROCERIES)
      
   then
      BigDecimal tax = new BigDecimal(2.0);
      item.setLocalTax(tax.multiply(item.getSellPrice())); 
      helper(drools);
end

به همین منوال، تابع utility دیگر را در دومین فایل DRL (Nagpur.drl)، اضافه کرده ایم. کد تغییر یافته در زیر آورده شده:

فایل تغییر یافته ی Nagpur.drl

// created on: Dec 26, 2014
package droolsexample

// list any import classes here.
import com.sample.ItemCity;
import java.math.BigDecimal; 

import function com.sample.Utility.help;

//declare any global variables here
dialect "java"

rule "Nagpur Medicine Item"
   
   when
      item : ItemCity(purchaseCity == ItemCity.City.NAGPUR, 
                      typeofItem == ItemCity.Type.MEDICINES)
   
   then
      BigDecimal tax = new BigDecimal(0.0);
      item.setLocalTax(tax.multiply(item.getSellPrice())); 
      help(drools,"added info");
end

rule "Nagpur Groceries Item"
   
   when
      item : ItemCity(purchaseCity == ItemCity.City.NAGPUR, 
                      typeofItem == ItemCity.Type.GROCERIES)
   
   then
      BigDecimal tax = new BigDecimal(1.0);
      item.setLocalTax(tax.multiply(item.getSellPrice())); 
      help(drools,"info");
end

برنامه را دوباره اجرا کنین ، خروجی باید بصورت زیر باشه:

info

rule triggered: Nagpur Groceries Item
added info

rule triggered: Nagpur Medicine Item

rule triggered: Pune Groceries Item
HELLO PUNE!!!!!!

rule triggered: Pune Medicine Item
PUNE 0
PUNE 20
NAGPUR 0
NAGPUR 10

هر دو تابع های utility فراخوانی شده اند، این توابع به شما نشان میدن که یک rule خاص اجرا شده یا نه. در مثال بالا، همه ی ruleها فراخوانی شده اند، با این حال، در یک نرم افزار سازمانی، تابع utility میتواند برای خطایابی و یافتن این که یک rule خاص اجرا شده یا نه، واقعاً مفید باشه.

استفاده از خطایابی در Eclips

می توانید ruleها را هنگام اجرای نرم افزارِ Droolsتان خطایابی کنین. میتوانید breakpointهایی در نتیجه ی ruleها قرار بدین، با این کار، در زمان اجرا، وقتی به breakpoint برسیم، اجرا بصورت موقت متوقف میشه. در این زمان می توانید متغیرهای شناخته شده در آن نقطه را بررسی کنین، همانطور که در نرم افزار جاوا این کار را انجام میدادین، و از آپشن های خطایابیِ معمولِ موجود در Eclipse استفاده کنین.

برای ایجاد یک breakpoint در فایل DRL، در خطی که میخواین برایش breakpoint ایجاد کنین، دو بار کلیک (double-click) کنین. به خاطر داشته باشین، در بخش then از یک rule، فقط اجازه ی ایجاد یک breakpoint را دارین. برای حذف یک breakpoint در ویرایشگرِ DRL، دو مرتبه روی breakpointای که قبلاً ایجاد کرده این، کلیک کنین.

بعد از اعمال breakpointها، باید نرم افزارتان را بعنوان یک نرم افزارِ Drools، خطایابی کنین. Breakpointهای Drools (breakpointهای داخل فایل DRL) فقط زمانی که نرم افزار بعنوان یک نرم افزارِ Drools، خطایابی بشه، اجرا میشن. در ادامه نحوه ی انجام این کار نشان داده شده:

drools application

زمانی که نرم افزارتان را بعنوان یک نرم افزار Drools، خطایابی می کنین، همانطور که در اسکرین شاتِ زیر نشان داده شده، کنترلی را در فایل DRL مشاهده خواهید کرد:

eclipse platform

می توانید متغیرها و مقادیرِ جاریِ شیء را در نقطه ای که در حال خطایابی ِ آن هستین ببینین. دکمه ی F6 برای رفتن به خط بعد و دکمه ی f8 برای jump (پَرِش) به نقطه ی خطایابیِ بعدی هستن. با این روش، میتوانید نرم افزار Droolsتان را خطایابی کنین.

نکته: رویکردِ خطایابی در نرم افزارِ Drools، فقط زمانی که dialect، MVEL تا نسخه ی Drools 5.X باشه جواب میده.

مبحث آموزشی

آموزش Drools

Learn Drools

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد