Drools入门demo

第一步POM加入依赖包

<dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-api</artifactId>
  <version>7.1.0.Final</version>
</dependency>
<dependency>
  <groupId>org.kie</groupId>
  <artifactId>kie-ci</artifactId>
  <version>7.1.0.Final</version>
</dependency>

第二步 src/main/resources目录新建META-INF文件夹,并在META-INF文件夹创建新文件kmodule.xml

<?xml version="1.0" encoding="UTF-8" ?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <kbase name="DroolsBase">
        <ksession name="droolssession"/>
    </kbase>
</kmodule>

第三步 src/main/resources目录下新建drools.drl文件(文件名随意)

package test

import test.Message
import test.Message2
import test.MqttMessage
import test.Run
import test.Run2

rule "alarm"
    when
        message : Message(productId=="101",status==1)
    then
        new Run().run();
end

rule "temperature"
    when
        message2 : Message2(productId=="123",status==1)
        run2:Run2()
    then
        message2.setProductId(12345L);
        run2.run(message2);
end

rule "mqttTest"
    when
        message2:Message2()
        mqttMessage:MqttMessage(message2.productId==9999)
        run2:Run2()
    then
        run2.run(message2);
end

第四步新建Test类

package test;

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

public class Test {
    public static void main(String[] args) {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieContainer = kieServices.getKieClasspathContainer();// kmodule.xml
        //配置文件new对象
        KieSession kieSession = kieContainer.newKieSession("droolssession");
        Message message = new Message();
        message.setProductId(101L);
        message.setStatus(1);
        kieSession.insert(message);
        int i = kieSession.fireAllRules();
        System.out.println("========" + i);
        kieSession.dispose();
        
        //传输对象 及对象传参
        kieSession = kieContainer.newKieSession("droolssession");
        Message2 message2 = new Message2();
        message2.setProductId(123L);
        message2.setStatus(1);
        Run2 run2 = new Run2();
        
        kieSession.insert(message2);
        kieSession.insert(run2);
        
        int count = kieSession.fireAllRules();
        System.out.println("========" +count);
        kieSession.dispose();
        
        
        //对象中有子对象
        kieSession = kieContainer.newKieSession("droolssession");
        MqttMessage mqttMessage = new MqttMessage();
        Message2 message22 = new Message2();
        message22.setProductId(9999L);
        mqttMessage.setMessage2(message22);
        Run2 run22 = new Run2();
        
        kieSession.insert(message22);
        kieSession.insert(mqttMessage);
        kieSession.insert(run22);
        
        int count22 = kieSession.fireAllRules();
        System.out.println("========" +count22);
        kieSession.dispose();
    }
}

Run类

package test;

public class Run {
    public void run() {
        System.out.println("我run起来了Run!");
    }
}

Run2类

package test;

public class Run2 {
    public void run(Message2 message) {
        System.out.println("我run起来了Run2!"+message.getProductId());
    }
}

 

Message类

public class Message {
    private Long productId;
    private Integer status;
    

    public Long getProductId() {
        return productId;
    }

    public void setProductId(Long productId) {
        this.productId = productId;
    }

    public Integer getStatus() {
        return status;
    }

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

}

Message2类

package test;

public class Message2 {
    private Long productId;
    private Integer status;
    

    public Long getProductId() {
        return productId;
    }

    public void setProductId(Long productId) {
        this.productId = productId;
    }

    public Integer getStatus() {
        return status;
    }

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

}

MqttMessage类

package test;

public class MqttMessage {
    private Long id;
    
    private Message2 message2;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Message2 getMessage2() {
        return message2;
    }

    public void setMessage2(Message2 message2) {
        this.message2 = message2;
    }

    
}

posted on 2019-12-30 20:32  深藏的豆沙包  阅读(939)  评论(0编辑  收藏  举报

导航