在初識drools中對drl文件進行了簡單的介紹。這裏舉個例子來具體說明下。主要是寫了規則以後咱們如何用java代碼來run起來。java
drl文件內容以下:api
rule "ageUp12" when
$student: Student(age > 2)
then
$student.ageUp12();
end
rule "nameMax" when
$student: Student(name == "max")
then
$student.nameMax();
retract($student);
end
rule "class" when
$student:Student()
then
$student.toString();
retract($student);
end
rule "testList" when
$student : Student($age : age)
not Student(age < $age)
then
System.out.println("age = " + $age);
retract($student);//這裏致使了LHS的變化 而後會從新觸發規則的匹配慎用 這裏只是爲了展現排序的例子,而後這個rule能夠排序。。。。
end
咱們在文件中import了一個Student類,代碼很簡單,就是一個javaBean,裏面有兩個字段:int age和String name;而後還有幾個方法,ageUp12(),nameMax()post
而後咱們怎麼把這個文件和java代碼關聯起來呢,直接上代碼ui
KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//ResourceFactroy是個獲取各類資源的工廠,好比newUrlResource,這裏ResourceType指明瞭規則文件的類型,裏面有咱們在決策表中用到的xls哦
knowledgeBuilder.add(ResourceFactory.newClassPathResource("drools/mydrools.drl"), ResourceType.DRL);
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());
StatefulKnowledgeSession knowledgeSession = knowledgeBase.newStatefulKnowledgeSession();
Student student = new Student(13,"max");
Student student1 = new Student(11,"max");
knowledgeSession.insert(student);//具體的java類對象添加到workingMemory中。
knowledgeSession.insert(student1);
knowledgeSession.fireAllRules();
在這段代碼裏咱們看到 最後真正去執行的是一個叫作knowledgeSession的東西,這是一個會話,實現了KieSession接口,這個接口的實現類自己包含數據,規則而且執行真正的操做。在規則表裏面還會提到。orm
而後前面咱們構造了一個KnowledgeBuilder,來把規則文件加載到drools裏,而後構造了一個KnowledgeBase,並從這個KnowlegeBase中獲取一個實際操做的會話。對象
這裏對這幾個class作一下簡單介紹:排序
KnowledgeBuilder主要是加載規則文件到drools規則引擎中,用於根據規則引擎文件來構造知識倉庫。
KnowledgeBase是對一個規則文件的抽象,能夠看下他的父類接口KieBase,在英文文檔中是這麼介紹的:KieBase就是一個知識倉庫,包含了若干的規則、流程、方法等,在Drools中主要就是規則和方法,KieBase自己並不包含運行時的數據之類的,若是須要執行規則KieBase中的規則的話,就須要根據KieBase建立KieSession接口
StatefulKnowledgeSession是一個KieSession實現類,這個接口在英文文檔中是這麼介紹的:KieSession就是一個跟Drools引擎打交道的會話,其基於KieBase建立,它會包含運行時數據,包含「事實 Fact」,並對運行時數據事實進行規則運算
注:這裏用到的幾個class都是kie-api中的類,這個api在drools中的做用很是之重要,咱們在前面的博客裏已經有所講解。並且也是決策表中的主要組件。資源