drools規則引擎筆記(二)

規則引擎版本,drools6.5.0 finaljava

eclipse:Neonapi

JDK1.8session

今天主要是在規則的when部分加入了多個fact對象。eclipse

對於working memory存在多個fact的情形,其實和單個fact對象是相似的。須要注意的是,咱們須要將多個多想都要插入working memory中才行。工具

下面是試驗的代碼,以前我已經在eclipse上安裝了drools的插件,因此個人代碼是在drools生成的木板上直接進行修改的。測試

針對本次試驗,重要的幾個文件以下this

image

package com.audi.dto;

public class TestDTO
{
    private String condition;
    private String action;
    public String getCondition()
    {
        return condition;
    }
    public void setCondition(String condition)
    {
        this.condition = condition;
    }
    public String getAction()
    {
        return action;
    }
    public void setAction(String action)
    {
        this.action = action;
    }
    
}

 

 

package com.audi.util;

public class TestUtils
{
    public static String testDrl()
    {
        return "true";
    }
}

 

下面的這段代碼是規則的內容(其實語法和java很類似),注意下面的import語句,要在包名的末級加上*號,不然會報錯:spa

package com.sample
 
import com.audi.dto.*;
import com.audi.util.*;
 
rule "testUtil"
    when
        $util:TestUtils();
        $dto:TestDTO($util.testDrl()=="true");
    then
        $dto.setAction("sucess...");
        System.out.println("------------hhhhhhhhhhhhhhh-------------");
end

 

下面是drools自動生成的xml文件,其實就是配置drools的三種規則文件的方式:插件

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="rules" packages="rules">
        <ksession name="ksession-rules"/>
    </kbase>
    <kbase name="dtables" packages="dtables">
        <ksession name="ksession-dtables"/>
    </kbase>
    <kbase name="process" packages="process">
        <ksession name="ksession-process"/>
    </kbase>
</kmodule>

 

下面是規則的測試代碼,尤爲要注意kSession.insert(new TestUtils());這一句,這就是把這個工具類插入working memory的代碼,沒了它會致使規則的when部分爲false,從而致使規則匹配失敗。code

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.audi.dto.TestDTO;
import com.audi.util.TestUtils;

/**
 * This is a sample class to launch a rule.
 */
public class DroolsTestUtil
{

    public static final void main(String[] args)
    {
        try
        {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-rules");

            // go !
            TestDTO dto = new TestDTO();
            dto.setCondition("test");
            kSession.insert(new TestUtils());
            kSession.insert(dto);
            kSession.fireAllRules();
            System.out.println("------------開始匹配-------------");
            if (null == dto.getAction())
            {
                System.out.println("------------匹配失敗-------------");
            }
            else
            {
                System.out.println("------------匹配成功-------------");
                System.out.println(dto.getAction());
            }
        } catch (Throwable t)
        {
            t.printStackTrace();
        }
    }

}

 

image

相關文章
相關標籤/搜索