KIE(二):Drools簡單介紹

1.規(guī)則

??規(guī)則是運作規(guī)律所遵循的法則。比如 1+1=2,紅燈停,綠燈行。他們都是當滿足某一些條件時,接下來要做某些事情。所以規(guī)則可以簡化成 當 。。。的時候,做。。。。事。

2.規(guī)則引擎drools

??是什么:drools是業(yè)務規(guī)則管理系統,具有基于前向鏈接和后向鏈接推理的規(guī)則引擎。

??做什么:drools可以快速可靠地評估業(yè)務規(guī)則和復雜的事件處理。規(guī)則引擎也是創(chuàng)建專家系統的基本構建塊。

??怎么做:將業(yè)務策略從程序中抽離出來,用一套定義好的語言來編寫業(yè)務規(guī)則,通過數據的輸入,來決定不同的業(yè)務決策。這是drools做的內容。

3.業(yè)務場景

??3.1.存在一個非常復雜的場景,即使對于商業(yè)專家也難以完全定義

??3.2.沒有已知或定義明確的算法解決方案

??3.3.有不穩(wěn)定需求,需要經常更新

??3.4.需要快速做出決策,通常是基于部分數據量

4.規(guī)則結構

??一條規(guī)則由包名,規(guī)則名,規(guī)則的條件(left hand side),規(guī)則的結果(right hand side)構成。

5.規(guī)則例子

以下是一個簡單的例子:基本drl文件:

package sample
import sample.DroolTest.Message;

rule "helloWorld"
    when
    m : Message( status == Message.HELLO, myMessage : message )
    then
     System.out.println( myMessage );
            m.setMessage( "Goodbye  world" );
            m.setStatus( Message.GOODBYE );
            update( m );
end

rule "GoodBye"
    when
        Message( status == Message.GOODBYE, myMessage : message)
    then
        System.out.println(myMessage);
end

基本規(guī)則就是以上drl中的內容。上文包含了兩條規(guī)則。

6.Java中如何運用一條規(guī)則

以下是規(guī)則構建器的創(chuàng)造,及規(guī)則的加載方式,規(guī)則構建庫,以及規(guī)則的執(zhí)行運用

public class DroolTest {

        public static final void main(String[] args) {
            try {
                // load up the knowledge base
                KnowledgeBase kbase = readKnowledgeBase();
                StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();//創(chuàng)建會話
                KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
                // go !
                Message message = new Message();
                message.setMessage("Hello World");
                message.setStatus(Message.HELLO);
                ksession.insert(message);//插入
                ksession.fireAllRules();//執(zhí)行規(guī)則
                logger.close();//關閉
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }

        private static KnowledgeBase readKnowledgeBase() throws Exception {
            KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();//創(chuàng)建規(guī)則構建器
            kbuilder.add(ResourceFactory.newClassPathResource("sample/helloWorld.drl"), ResourceType.DRL);//加載規(guī)則文件,并增加到構建器
            KnowledgeBuilderErrors errors = kbuilder.getErrors();
            if (errors.size() > 0) {//編譯規(guī)則過程中發(fā)現規(guī)則是否有錯誤
                for (KnowledgeBuilderError error: errors) {System.out.println("規(guī)則中存在錯誤,錯誤消息如下:");
                    System.err.println(error);
                }
                throw new IllegalArgumentException("Could not parse knowledge.");
            }
            KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();//創(chuàng)建規(guī)則構建庫
            kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());//構建器加載的資源文件包放入構建庫
            return kbase;
        }

        public static class Message {

            public static final int HELLO = 0;
            public static final int GOODBYE = 1;

            private String message;

            private int status;

            public String getMessage() {
                return this.message;
            }

            public void setMessage(String message) {
                this.message = message;
            }

            public int getStatus() {
                return this.status;
            }

            public void setStatus(int status) {
                this.status = status;
            }

        }

}

輸出的內容

Hello World
Goodbye  world
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這是在知乎中別人邀請回答一個問題,就簡單發(fā)表一些個人看法。 第一,首先讓用戶認可你,如何讓用戶認可你,簡單說兩點:...
    黎虹閱讀 9,472評論 0 1
  • 格列佛介紹了小人國居民的情況,概括了小人國的風俗法律學術教育,還有他的一位貴婦的辯護。
    馬帥祺閱讀 375評論 0 0
  • 1 若蘭是一個母親,她有一個七歲的兒子,本來還有一個愛她的丈夫,但是后來才認清,那所謂的“愛”只是她一廂情愿的想法...
    且聽風鈴1986閱讀 503評論 4 31
  • 今天到孩子學校:被孩孑(同學)們的友誼驚呆:青春不散場我們不離不棄!說的多好!使我想起《一個也不能少》的電影!集體...
    c8092ba96944閱讀 149評論 0 2

友情鏈接更多精彩內容