Drools - Gỡ lỗi
Có nhiều cách khác nhau để gỡ lỗi dự án Drools. Ở đây, chúng tôi sẽ viết một lớp Tiện ích để cho bạn biết quy tắc nào đang được kích hoạt hoặc kích hoạt.
Với cách tiếp cận này, bạn có thể kiểm tra tất cả các quy tắc đang được kích hoạt trong dự án Drools của bạn. Đây là Lớp Tiện ích của chúng tôi
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());
}
}
Phương pháp đầu tiên help in quy tắc được kích hoạt cùng với một số thông tin bổ sung mà bạn có thể chuyển dưới dạng Chuỗi qua tệp DRL.
Quy tắc thứ hai helper in xem quy tắc cụ thể có được kích hoạt hay không.
Chúng tôi đã thêm một trong các phương thức Tiện ích trong mỗi tệp DRL. Chúng tôi cũng đã thêm chức năng nhập trong tệp DRL (Pune.drl). bên trongthenmột phần của quy tắc, chúng tôi đã thêm lệnh gọi hàm tiện ích. Pune.drl sửa đổi được đưa ra bên dưới. Các thay đổi được đánh dấu bằng màu xanh lam.
Pune.drl được sửa đổi
//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
Tương tự, chúng tôi đã thêm chức năng tiện ích khác trong tệp DRL thứ hai (Nagpur.drl). Đây là mã đã sửa đổi -
Nagpur.drl được sửa đổi
// 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
Chạy lại chương trình và nó sẽ tạo ra kết quả sau:
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
Cả hai hàm tiện ích đều được gọi và nó cho biết quy tắc cụ thể có được gọi hay không. Trong ví dụ trên, tất cả các quy tắc đang được gọi, nhưng trong một ứng dụng doanh nghiệp, chức năng tiện ích này có thể thực sự hữu ích để gỡ lỗi và tìm hiểu xem một quy tắc cụ thể có bị kích hoạt hay không.
Sử dụng Phối cảnh gỡ lỗi trong Eclipse
Bạn có thể gỡ lỗi các quy tắc trong quá trình thực thi ứng dụng Drools của mình. Bạn có thể thêm các điểm ngắt vào hậu quả của các quy tắc của mình và bất cứ khi nào gặp phải điểm ngắt như vậy trong quá trình thực thi các quy tắc, việc thực thi sẽ tạm thời dừng lại. Sau đó, bạn có thể kiểm tra các biến đã biết tại thời điểm đó như khi bạn thực hiện trong Ứng dụng Java và sử dụng các tùy chọn gỡ lỗi thông thường có sẵn trong Eclipse.
Để tạo một điểm ngắt trong tệp DRL của bạn, chỉ cần bấm đúp vào dòng mà bạn muốn tạo điểm ngắt. Hãy nhớ rằng, bạn chỉ có thể tạo một điểm ngắt trongthenmột phần của quy tắc. Một điểm ngắt có thể được loại bỏ bằng cách nhấp đúp vào điểm ngắt trong trình chỉnh sửa DRL.
Sau khi áp dụng các điểm ngắt, bạn cần gỡ lỗi ứng dụng của mình dưới dạng ứng dụng Drools. Các điểm ngắt của Drools (các điểm ngắt trong tệp DRL) sẽ chỉ hoạt động nếu ứng dụng của bạn đang được gỡ lỗi dưới dạng ứng dụng Drools. Đây là cách bạn cần làm như vậy -
Khi bạn gỡ lỗi ứng dụng của mình dưới dạng ứng dụng Drools, bạn sẽ thấy điều khiển trên tệp DRL như được hiển thị trong ảnh chụp màn hình sau:
Bạn có thể thấy các biến và giá trị hiện tại của đối tượng tại điểm gỡ lỗi đó. Điều khiển tương tự của F6 để di chuyển đến dòng tiếp theo và F8 để nhảy đến điểm gỡ lỗi tiếp theo cũng được áp dụng ở đây. Bằng cách này, bạn có thể gỡ lỗi ứng dụng Drools của mình.
Note - Phối cảnh gỡ lỗi trong ứng dụng Drools chỉ hoạt động nếu phương ngữ là MVEL cho đến khi Drools 5.x.