drools_09_drools_helper
RHS中的drools 對象
在 RHS 中我們可以使用 drools 對象, 該對象是 KnowledgeHelper 接口的一個實例, 它是在rule被執行時被自動注入.
KnowledgeHelper 接口的官方文檔:
https://repository.jboss.org/nexus/content/unzip/unzip/org/drools/drools-core/7.53.0.Final/drools-core-7.53.0.Final-javadoc.jar-unzip/org/drools/core/spi/KnowledgeHelper.html
幾個重要的函數
-
drools.getWrokingMemory()
該方法返回一個WorkingMemory接口的實例, 常用的stateful KieSession 就是該接口的實現類, 所以在RHS中理論上可以做很多事情, 當然我們不推薦RHS中有很復雜的邏輯. -
drools.getRule()
該方法System.out.println(drools.getRule().getName());返回 rule 本身的對象, 包括Rule 名稱, agenda group, salience 等屬性, 最常用的是, 在RHS中通過這個函數來輸出rule的名稱. -
drools.update()/insert()/delete()
同名宏函數可以認為是 drools.update()/insert()/delete() 的簡化寫法. -
drools.halt()
立即終止后面所有規則的執行, 兩個主要使用場景: (1)一系列有遞進關系的規則, 如果前置規則已經走到死胡同, 沒必要在在執行后續規則, 可以在死胡同處調用halt;
(2)調試規則文件, 在debug時先給目標rule設置一個高優先級, 然后在其RHS中調用 drools.halt(), 這樣就只會運行該規則.
drl 示例文件
package com.sample.rules
import com.sample.Order;
rule "KnowledgeHelper"
when
$order:Order(originalPrice>0)
then
$order.setAmount(100);
System.out.println(drools.getRule().getName());
drools.halt(); // KnowledgeHelper2 將不會被執行
end
rule "KnowledgeHelper2"
when
$order:Order(originalPrice>0)
then
$order.setAmount(100);
System.out.println(drools.getRule().getName());
end

浙公網安備 33010602011771號