专栏首页lgp20151222drool-6.5的自学demo

drool-6.5的自学demo

先丢代码地址

https://gitee.com/a247292980/drools

再丢pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yy</groupId>
  <artifactId>drools</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>drools Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
    <runtime.version>6.5.0.Final</runtime.version>
  </properties>

  <repositories>
    <repository>
      <id>jboss-public-repository-group</id>
      <name>JBoss Public Repository Group</name>
      <url>http://repository.jboss.org/nexus/content/groups/public/</url>
      <releases>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>daily</updatePolicy>
      </snapshots>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>org.kie</groupId>
      <artifactId>kie-api</artifactId>
      <version>${runtime.version}</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-core</artifactId>
      <version>${runtime.version}</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-decisiontables</artifactId>
      <version>${runtime.version}</version>
    </dependency>

    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-test</artifactId>
      <version>${runtime.version}</version>
    </dependency>

	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.12</version>
	</dependency>

  </dependencies>
</project>

 最后丢目录结构

老规矩要说的基本都在注释里面,想看的去看源码就好了,只说几个重要的

Message

pojo类

DecisionTableTest

drools使用xxx.xls的例子

public class DecisionTableTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
	        KieServices ks = KieServices.Factory.get();
    	    KieContainer kContainer = ks.getKieClasspathContainer();
//    	    写名字则取相应的ksession下的东西
//        	KieSession kSession = kContainer.newKieSession("ksession-dtables");
//            不写名字则全取了
        	KieSession kSession = kContainer.newKieSession();

            // go !
            Message message = new Message();
            message.setMessage("Hello World");
            message.setStatus(Message.HELLO);
            kSession.insert(message);
            kSession.fireAllRules();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }


}

 DroolsTest

drools操作xxxx.drl的例子

public class DroolsTest  {

    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 !
            Message message = new Message();
            message.setMessage("Hello World");
            message.setStatus(Message.HELLO);

            kSession.insert(message);
            kSession.fireAllRules();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

}

 ProcessTest

drools操作xxxx.bpmn的例子

public class ProcessTest {

    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-process");

            // start a new process instance
            kSession.startProcess("com.sample.bpmn.hello");
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

}

StatelessTest

用来区分StatelessKieSession和KieSession

public class StatelessTest {
    protected KieServices kieServices;

    protected KieContainer kieContainer;

    protected KieSession kieSession;
    protected StatelessKieSession statelessKieSession;

    @Before
    public void init() {
//从Factory得到Services
        kieServices = KieServices.Factory.get();
//        在类路径中找到的所有DRL文件
        kieContainer = kieServices.getKieClasspathContainer();
//得到kmodule的ksession
        kieSession = kieContainer.newKieSession("ksession-rules");
//stateless必须注释kmodule里全部的kbase
//		statelessKieSession=kieContainer.newStatelessKieSession();
    }

    //kieSession和statelessKieSession的调用是不一样的
    @Test
    public void testKieSession() {
        Message message = new Message();
        message.setMessage("Hello World");
        message.setStatus(Message.HELLO);

        kieSession.insert(message);
        kieSession.fireAllRules();
    }

    @Test
    public void testStatelessKieSession() {
        Message message = new Message();
        message.setMessage("Hello World");
        message.setStatus(Message.HELLO);

        statelessKieSession.execute(message);

    }
}

kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <!--<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">-->
    <!--name kbase的唯一标志
    packages 路径必须正确可少写可多写可不写
    不写的话放于根目录(不建议)
    ksession 的唯一标记-->
    <!--<kbase name="rules" packages="Drools.rules">-->
    <kbase name="rules" packages="rules">
        <!--<kbase name="rules" packages="">-->
        <!--<kbase name="rules" packages="myrules">-->
        <!--默认用最后一个-->
        <!--<kbase name="rules" packages="rules,myrules">-->
        <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>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mybatis自动生成

    ydymz
  • @Transient 理解

    transient使用小结 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 2)transient...

    ydymz
  • SSH构造struts2项目

    ydymz
  • 面试必备之乐观锁与悲观锁

    总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,...

    用户2164320
  • python基础知识之函数初阶——命名

    与命名空间有关的两个函数globals()和locals() 可以用globals()查看全局命名空间的所有定义的名字 可以用locals()查看当前命名空间的...

    py3study
  • 《代码整洁之道》读书小结

    最近晚间的加班暂时暂停了,大概已经整整一个月每天焦头烂额的写着业务代码,被各种逻辑搞的整个人都不大好了,好在是写的差不多了。

    Originalee
  • 0656-6.2.0-如何配置Haproxy高可用

    Fayson在之前的文章有提到《如何使用HAProxy实现HiveServer2负载均衡》《如何使用HAProxy实现Impala的负载均衡》集群采用了hapr...

    Fayson
  • Facebook又要重组VR部门,并将于明年推出新一代Rift头显

    在继10月底Oculus前创始人离职事件后,Facebook最近被曝出要在本周对其VR团队进行重组,从以产品为核心的事业部门机构转变为以技术功能为核心的功能性结...

    镁客网
  • Wolfram 化学工程解决方案

    利用强大的计算、统计和优化,即时交互性和内置化学数据的组合,可以立即部署的完全交互式模型来模拟您的化学过程。一个系统,一个集成的工作流程。

    WolframChina
  • Github上近8W star 的技术面试必备基础知识库

    Tech Interview Guide 技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统设计

    加米谷大数据

扫码关注云+社区

领取腾讯云代金券