規則引擎版本,drools6.5.0 finaljava
eclipse:Neonapi
JDK1.8session
今天主要是在規則的when部分加入了多個fact對象。eclipse
對於working memory存在多個fact的情形,其實和單個fact對象是相似的。須要注意的是,咱們須要將多個多想都要插入working memory中才行。工具
下面是試驗的代碼,以前我已經在eclipse上安裝了drools的插件,因此個人代碼是在drools生成的木板上直接進行修改的。測試
針對本次試驗,重要的幾個文件以下this
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(); } } }