Drools如何使用

2021-09-09 04:57:55 字數 1793 閱讀 8009

使用乙個新技術時。首先了解其作用,具體的這裡不再過多的闡述。

參考:

package com.hello

import com.hello.hi

rule "hello"

when

eval(true)

then

system.out.println("hello!!!");

end

從上面截圖我們可以看出drl檔案的規範

package  包

import      引入類

rule ""      規則名稱

when       規則條件(eval true 代表條件成立)

then        規則動作部分(當when部分成立時執行)

end         結束

使用drl檔案進行規則書寫的缺點:僅限於開發/懂得程式設計人員開發與維護。所以我們使用drools提供的動態編譯功能。

解決的問題:

1.不再進行書寫規則檔案。2.基於類物件與資料庫儲存的基礎可脫離程式設計師使得業務人員最快的上手規則檔案的配置。3.程式設計師在開發中只關心事實物件而無需關心業務規則。

核心**:

kieservices kieservices = kieservices.factory.get();

kiefilesystem kfs = kieservices.newkiefilesystem();

kfs.write("src/main/resources/com/drools/rules/" + 規則內容, rule.getbytes("utf-8"));

kiebuilder kiebuilder = kieservices.newkiebuilder(kfs).buildall();

if (kiebuilder.getresults().getmessages(message.level.error).size() > 0)

kiecontainer kiecontainer = kieservices.newkiecontainer(kieservices.getrepository().getdefaultreleaseid());

kiebase kbase = kiecontainer.getkiebase();

kiesession kiesession = kbase.newkiesession();

以上截圖。

重點:規則內容:也就是如圖1所示**(通過介面化的配置,程式後台的動態處理生成drl檔案)

kiesession:這個物件相信對drools有一定基礎的知道它可以幹什麼。

這裡對kiesession物件重要常用方法進行介紹

1.insert——進行事實物件的注入(示例:kiesession.insert(object))

2.setglobal——進行全域性物件的注入(示例:kiesession.setglobal("key",value))

3.fireallrules——發現並執行規則(示例:num = session.fireallrules()   num返回規則執行條數)

4.dispose——釋放資源(示例:session.dispose())

梳理一下之後的drools部落格的路線

1.動態編譯規則的資料庫設計方案

2.拼接drl語句(頭部分、基本條件部分、when部分、them部分、以及最深的一些函式等等)

3.快取實現

4.aop實現規則的執行日誌

關注作者,持續更新哦!!!

這裡只介紹這兩種方式(作者使用第二種進行drools的使用與開發)

drools使用記錄

kie是jboss裡面一些相關專案的統稱,其中我們比較熟悉的就有jbpm和drools。這些專案都有一定的關聯關係,並且存在一些通用的api,比如說涉及到構建 building 部署 deploying 和載入 loading 等 jboss通過kie將jbpm和drools等相關專案進行了乙個整合...

規則引擎 Drools的使用

專案遇到下步執行動作決策的業務,場景不同於常見的規則性業務,但也可以應用於規則引擎之中,剝離掉 中大量的邏輯判斷 同時加快決策結果的輸出。可見規則的定義是比較泛的,技術元件的應用也不是一成不變的。drools有專門的規則語法drl檔案,drools會記載drl檔案中編寫好的規則,供專案呼叫 因為一般...

為何在Drools中使用MVEL

為何在drools中使用mvel 當然大家問的第乙個問題會是為什麼選擇mvel而不是groovy,jython等等,我將原因列舉如下 快速反射模式 外掛程式式轉換器 規模自定義的語言擴充套件 靜態型別 推斷型別或者動態模式 支援可配置的語言特性 mvel遵從bsf 指令碼語言框架 不久也將會支援el...