天天看點

Drools 文法

Drools 文法

規則文法

package: package 的名字是随意的,不必必須對應實體路徑

import: 導入外部變量

規則的編譯與運作要通過Drools 提供的各種API 來實作。

API 分為三類:規則編譯、規則收集、規則執行

主要API:

KnowledgeBuilder 用來在業務代碼中收集已經編寫好的規則,對這些規則檔案進行編譯,最終産生一批編譯好的規則包 knowledgePackage 給其他程式使用。

KnowledgeBase

StatefulKnowledgeSession

StatelessKnowledgeSession

它們起到了對 規則檔案進行收集、編譯、查錯、插入fact、設定global、執行規則或者規則流

KnowledgeBuilder

   用來在業務代碼中收集已經編寫好的規則,對這些規則檔案進行編譯,最終産生一批編譯好的規則包 knowledgePackage 給其他程式使用。KnowledgeBuilder在編譯規則的時候可以通過其提供的hasErrors()方法得到編譯規則過程中發現規則是否有錯誤,如果有的話通過其提供的getErrors()方法将錯誤列印出來,以幫助我們找到規則當中的錯誤資訊。

KnowledgeBuilder kbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();   
kbuilder.add(ResourceFactory.newClassPathResource("test.drl", Test.class),ResourceType.DRL); 

if(kbuilder.hasErrors()){ 
  System.out.println("規則中存在錯誤,錯誤消息如下:"); 
  KnowledgeBuilderErrors kbuidlerErrors=kbuilder.getErrors(); 
  for(Iterator iter=kbuidlerErrors.iterator();iter.hasNext();)
  { 
    System.out.println(iter.next()); 
  } 
}

Collection<KnowledgePackage> kpackage=kbuilder.getKnowledgePackages();//産生規則包的集合      

  

通過KnowledgeBuilder編譯的規則檔案的類型可以有很多種,如.drl檔案、.dslr檔案或一個xls檔案等。

 KnowledgeBase

  KnowledgeBase 是Drools 提供的用來收集應用當中知識(knowledge)定義的知識庫對象

      可以包含 普通的規則(rule)、規則流(rule flow)、函數定義(function)、使用者自定義對象(type model)

   kenowledgeBase 本身不包含任何業務資料對象(fact)。

  業務對象是插入到 knowledgeBase 産生的兩種類型的Session對象中(StatefulKnowledgeSession 和 StatelessKnowledgeSession),通過Session對象可以觸發規則執行和開始一個規則流執行

  KnowledgeBaseConfiguration對象是一個用來存放規則引擎運作時相關環境參數定義的配置對象

StatefulKnowledgeSession

法以釋放相關記憶體資源。

  在drools 規則引擎中,fact 所承擔的作用就是講規則中要用到的業務資料從應用當中傳入進來,對于規則當中産生的資料及狀态的變化通常不用fact 傳出。如果需要資料傳出,那麼 設定global對象來實作。

在spring的applicationContext.xml中,加入:

<kie:import releaseId-ref="ksession-releaseId" enableScanner="true" scannerInterval="300000"/>

<kie:releaseId id="ksession-releaseId" groupId="com.test" artifactId="epay-risk" version="LATEST"/>

<bean id="kiePostProcessor"

            class="org.kie.spring.annotations.KModuleAnnotationPostProcessor"/>

繼續閱讀