1.说明

本文介绍创建Drools的Maven工程的方法,
仅使用Eclipse开发工具,
不使用Drools的相关插件,
先创建一个Maven工程,
然后引入Drools的相关依赖即可,
最后再写一个基于drl文件的Demo测试。

2.创建Maven工程

Eclipse -> File -> New -> Other... -> Maven -> Maven Project
配置名称drools-drl-examples等信息,
创建一个简单Maven工程。

3.引入Pom依赖

在pom.xml引入Drools的相关依赖,
使用drools-bom管理Drools各种jar包版本,
完整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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ai.prd</groupId>
<artifactId>drools-drl-examples</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>drools drl rule file examples</description> <properties>
<drools.version>7.47.0.Final</drools.version>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-bom</artifactId>
<version>${drools.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-mvel</artifactId>
</dependency>
</dependencies>
</project>

4.新建kmodule.xml配置文件

在src/main/resources下
新建/META-INF/kmodule.xml,
注意必须有META-INF目录,
否则Drools加载不到配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="com.sample.rules">
<ksession name="ksession-rules"/>
</kbase>
</kmodule>

新建的kbase名称为rules,
指定了规则文件在com.sample.rules包路径下,
其中新建了ksession名称为ksession-rules。
名称可以自定义,只要保证唯一就行,
包路径是保存具体规则文件的目录。

5.新建Sample.drl规则文件

在src/main/resources下
新建com/sample/rules/Sample.drl:

package com.sample.rules

import com.sample.DroolsTest.Message;

rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end rule "GoodBye"
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end

注意第一行的package一定要是com.sample.rules,
才能和kmodule.xml文件中的配置匹配上。

规则"Hello World"匹配Message类型的输入,
当Message的属性status为Message.HELLO时,
会执行打印Message的属性message等操作。
这里的语法基本上和Java相同,
还是比较容易理解的。

注意Message是Java类,
需要先导入才能使用:
import com.sample.DroolsTest.Message;

6.新建DroolsTest测试类

DroolsTest.java初始化Drools工具,
并且测试上面配置的规则,
并且Message类也定义在其内部:

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession; /**
* This is a sample class to launch a rule.
*/
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();
}
} public static class Message { public static final int HELLO = 0;
public static final int GOODBYE = 1; private String message; private int status; public String getMessage() {
return this.message;
} public void setMessage(String message) {
this.message = message;
} public int getStatus() {
return this.status;
} public void setStatus(int status) {
this.status = status;
} } }

注意这里获取KieSession的参数ksession-rules,
要和上面kmodule.xml文件中的配置一致。

7.运行测试类

执行DroolsTest的main方法,
输出结果如下:

Hello World
Goodbye cruel world

第一行输出是因为匹配上了规则"Hello World",
第二行输出是因为匹配上了规则"GoodBye",
虽然测试类中只输入了一个Message事实,
但是Message在匹配上规则"Hello World"之后,
被修改了参数,并通知Drools数据有更新,
所以能进一步匹配上规则"GoodBye"。

8.参考文章

Drools规则引擎入门demoDrools教程(基础篇)——创建项目

Drools创建Maven工程的更多相关文章

  1. Eclipse创建Maven工程报错

    问题 用Eclipse创建maven工程的时候,总是会报错,例如提示: Unable to create project from archetype [org.apache.maven.archet ...

  2. MyEclipse创建Maven工程

    先要在MyEclipse中对Maven进行设置:

  3. Myeclipse中创建Maven工程的时候没有 webapp-javaee6

    1. http://mvnrepository.com/artifact/org.codehaus.mojo.archetypes/webapp-javaee6/1.5 中有描述

  4. MyEclipse中创建maven工程

    转载:http://blog.sina.com.cn/s/blog_4f925fc30102epdv.html     先要在MyEclipse中对Maven进行设置: 到此Maven对MyEclip ...

  5. 篇一:eclipse创建maven工程

    一.概览 maven创建的项目主要分为三类:war(网页工程).jar(Java工程).pom(父工程); war:网页工程,包含webapp,用于view层 jar:Java工程,用于提供方法.se ...

  6. Eclipse创建Maven工程

    Eclipse创建Maven工程: Eclipse: New  -> Other -> Maven Project -> Next -> webapp -> Finish ...

  7. 【原】使用IDEA创建Maven工程时提示"...xxx/pom.xml already exists in VFS"的解决

    问题:使用IDEA创建Maven工程时提示"...xxx/pom.xml already exists in VFS",怎么办? 解决:如果只是删除工程,还会有这样的提示.说到底, ...

  8. Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误

    Eclispe创建maven工程缺失web.xml报web.xml is missing and <failOnMissingWebXml> is set to true的错误,一看,还缺 ...

  9. 码云创建maven工程

    码云创建maven工程步骤 1.现在码云上创建工程2.拉取到本地3.使用"touch .gitignore"命令创建.gitignore文件4.在文件中添加过滤文件: .setti ...

随机推荐

  1. Android 图片框架

    1.图片框架:Picasso.Glide.Fresco 2.介绍: picasso:和Square的网络库能发挥最大作用,因为Picasso可以选择将网络请求的缓存部分交给了okhttp实现 Glid ...

  2. spring-dm 一个简单的实例

    spring-dm2.0  运行环境,支持JSP页面 运行spring web 项目需要引用包

  3. Springboot,SSM及SSH的概念、优点、区别及缺点

    Springboot的概念: 是提供的全新框架,使用来简化Spring的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不在需要定义样板化的配置.此框架不需要配置xml,依赖于像MAVEN这 ...

  4. MFC入门示例之静态文本框、编辑框

    点击按钮计算文本框中文本长度 void CMFCApplication1Dlg::OnBnClickedButton1() { CString strInput; GetDlgItemText(IDC ...

  5. 通过spring-data-redis操作Redis

    一.操作String类型数据 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring/ ...

  6. 虚拟机快照和linux基础命令

    虚拟机快照 磁盘"快照"是虚拟机磁盘文件(VMDK)在某个点及时的副本.可以通过使用恢复到快照来保持磁盘文件和系统存储. 1.拍摄快照 拍摄快照前先关机,然后右键点击虚拟机=> ...

  7. String类源码分析

    1.String类注释说明 /** * The {@code String} class represents character strings. All * string literals in ...

  8. 【WP】【web】中学生CTF | web部分wp

    $_GET 源码: <?php show_source(__FILE__); include 'config.php'; if(!isset($_GET['args'])){ die(); } ...

  9. TPT Fusion平台升级,AUTOSAR及ViL测试功能重装上线

    TPT简介 TPT是针对嵌入式系统基于模型的测试工具,特别是针对控制系统的软件功能测试.TPT支持众多业内主流的工具平台和测试环境,可以完成V模式要求所有阶段(MiL-SiL-PiL-HiL-ViL) ...

  10. TensorFlow.NET机器学习入门【0】前言与目录

    曾经学习过一段时间ML.NET的知识,ML.NET是微软提供的一套机器学习框架,相对于其他的一些机器学习框架,ML.NET侧重于消费现有的网络模型,不太好自定义自己的网络模型,底层实现也做了高度封装. ...