drools 6.5 决策表使用详解编程语言
drools 决策表的使用。
本文结构
1.何时使用决策表
2.决策表
3.决策表配置
4.年龄分类小例子
何时使用决策表——如果规则能够被表达为模板+数据的格式,那你 应该考虑使用决策表。决策表中的每一行就是对应模板的一行数据,将产生一个规则。
运行决策表——Drools 引擎所部署的系统中执行决策表。首先,决策表转换 成的Drools规则语言(DRL),然后执行规则引擎需求。这意味着它是可能的业务规则的变更,无需停止和启动,或重新部署任何软件。
决策表是另一种规则的表现形式
特别是当你的规则有遵循类似的模式或者模板
希望有这样一个电子表格视图管理规则
实现了规则与数据的分离
全局配置部分
RuleSet:定义包名
Import:指定导入的class,包括类方法
Variables:指定全局变量
Notes:输入任何内容
Functions:本地方法
RuleTable 部分
CONDITION:指定单个规则的条件,条件不写的话默认就是==
ACTION:指定rule的结果
PRIORITY:指定rule的 salience属性
No-loop:指定rule的no-loop熟悉
其它更多的配置请参考drools手册 (drools-expert-docs)
例子,此处例子大家可以大致看一下,下面会有详细例子
4.年龄分类小例子规则如下:
年龄 age =12 少年
年龄 age 12 age =24 青年
年龄 age 24 age =65 中年
年龄 age 65 老年
RuleSet : 包名
Import :导入我需要的类,也就是 pojo 对象
Functions : 写了一个函数,主要用于输出
RuleTabel : 写了规则名(随意写)
第6行写了 定义了每一列含义,参考上面给出的表格,查看含义。
第7行写了条件需要用到的对象。
第8行写了判断条件和 执行结果
第9行,写的是每列的定义(没什么用处,我都没有写完。)
第10-13行是我的四个规则。
其中的 美元符号 1,美元符号 2 是传递的参数的占位符。
4.3 pojo对象public class Person { private String name; private int age; private String desc; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String toString() { return [name= + name + ,age= + age + ,desc= + desc + ] } }4.4 kmodule.xml
如果没有 kmodule.xml 文件,在META-INF 文件夹下新建kmodule.xml 文件填写如下内容。
?xml version= 1.0 encoding= UTF-8 ? kmodule xmlns= http://jboss.org/kie/6.0.0/kmodule !--决策表-- kbase name= PersonAgeKB packages= com.us.personTemp ksession name= PersonAgeKS / /kbase /kmodule4.5 test类
public class personTemp { static KieSession getSession() { KieServices ks = KieServices.Factory.get(); KieContainer kc = ks.getKieClasspathContainer(); return kc.newKieSession( PersonAgeKS } public static void run(){ KieSession ks = getSession(); Person p1 = new Person( 奥巴马 , 68); Person p2 = new Person( 普京 , 32); Person p3 = new Person( 朴槿惠 , 18); Person p4 = new Person( 川普 , 10); Person p5 = new Person( 金正恩 , 66); System.out.println( before p1 : + p1); System.out.println( before p2 : + p2); System.out.println( before p3 : + p3); System.out.println( before p4 : + p4); System.out.println( before p5 : + p5); ks.insert(p1); ks.insert(p2); ks.insert(p3); ks.insert(p4); ks.insert(p5); int count = ks.fireAllRules(); System.out.println( 总执行了 + count + 条规则------------------------------ System.out.println( after p1 : + p1); System.out.println( after p2 : + p2); System.out.println( after p3 : + p3); System.out.println( after p4 : + p4); System.out.println( after p4 : + p5); ks.dispose(); } public static void main(String[] args) { run(); } }
输出
before p1 : [name=奥巴马,age=68,desc=null]
before p2 : [name=普京,age=32,desc=null]
before p3 : [name=朴槿惠,age=18,desc=null]
before p4 : [name=川普,age=10,desc=null]
before p5 : [name=金正恩,age=66,desc=null]
name:金正恩 desc:老年
name:奥巴马 desc:老年
name:普京 desc:中年
name:朴槿惠 desc:青年
name:川普 desc:少年
总执行了5条规则——————————
after p1 : [name=奥巴马,age=68,desc=老年]
after p2 : [name=普京,age=32,desc=中年]
after p3 : [name=朴槿惠,age=18,desc=青年]
after p4 : [name=川普,age=10,desc=少年]
after p4 : [name=金正恩,age=66,desc=老年]
参考资料:http://blog.csdn.net/u013115157/article/details/52025744
源码:https://github.com/527515025/DroolsExample
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15229.html
cjavaxml相关文章
- Java 线程 Executor 框架详解与使用编程语言
- struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性详解编程语言
- java.nio.channels.Pipe使用例子详解编程语言
- 使用 java.awt.Graphics2D 画线详解编程语言
- 关于在Struts2的Action中使用domain模型接收参数的问题详解编程语言
- Python 字符串操作及string模块使用详解编程语言
- 我的第五个网页制作:pre、html转义、abbr标签的使用详解编程语言
- Proguard使用最新,最全教程,亲自试验详解编程语言
- 如何使用webservice来校验一个邮箱的有效性:详解编程语言
- jsp使用uploadify前台上传文件详解编程语言
- log4j2 不使用配置文件,动态生成logger对象详解编程语言
- Spring Cloud(七):使用SVN存储分布式配置中心文件和实现refresh详解编程语言
- 【原创】使用.NET Core 1.0创建一个Self-Contained控制台应用详解编程语言
- java缓存适合使用的情况详解编程语言
- PHP中使用OpenSSL生成RSA公钥私钥及进行加密解密示例(非对称加密)详解编程语言
- Golang指针基本介绍及使用案例详解编程语言
- php 5.5使用 array_column的方法详解编程语言
- 使用CG3Z向服务器添加文件时,报错:No physical path is configured for logical file name EHS_FTAPPL_2详解编程语言
- Locust的使用二详解编程语言
- 使用twised实现一个EchoServer详解编程语言
- Python3.x:使用PyMysql连接Mysql数据库详解编程语言