package benx;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;
public class DroolsTest {
private RuleBase rules;
/**
* @param args
* @throws IOException
* @throws DroolsParserException
*/
public static void main(String[] args) throws DroolsParserException,
IOException {
DroolsTest rule = new DroolsTest();
rule.init("benx.drl");
Person per = new Person("benx", "27");
List<Object> list = new ArrayList<Object>();
list.add(per);
rule.executeRules(list, null);
System.out.println(per.getName());
}
/**
* 初始化规则引擎
*
* @param rulesFile
* @throws DroolsParserException
* @throws IOException
*/
public void init(String rulesFile) throws DroolsParserException,
IOException {
Reader source1 = new InputStreamReader(this.getClass()
.getResourceAsStream("/" + rulesFile));
PackageBuilder builder = new PackageBuilder();
/**
* 可以加载多个drl,执行时会遍历多个drl 等同于一个drl包含了多个drl内容
*/
builder.addPackageFromDrl(source1);
Package pkg = builder.getPackage();
rules = RuleBaseFactory.newRuleBase();
rules.addPackage(pkg);
}
/**
*
* @param obs
*/
public void executeRules(List<Object> obs, Map<String, Object> map) {
WorkingMemory workingMemory = rules.newStatefulSession();
if (obs != null) {
for (Object ob : obs) {
workingMemory.insert(ob);
}
}
if (map != null) {
for (String key : map.keySet()) {
workingMemory.setGlobal(key, map.get(key));
}
}
workingMemory.fireAllRules();
}
}
package benx;
public class Person {
private String name;
private String age;
public Person() {
super();
}
public Person(String name, String age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
package demo;
import benx.Person;
//规则名称,一个drl里面的规则名称必须是唯一
rule "rule 1"
//salience为优先级,数字越大就越优先执行
salience 1
//当规则在推论中对fact进行修改后,可能会导致该规则的重新激活,引起递归。设置no-loop为true可以阻止该规则被再次激活
no-loop true
//在同名activation-group中的规则将以互斥的方式激发。这个意思时在这个组中第一条被
//激发的规则将取消其它规则的激发,即使它们已经在激发队列中。Activation-group属性
//可以是任何字符,只要所有你需要放在同一个组中的规则中的activation-group属性是相
//同的即可
activation-group "find person"
//执行的条件
when
person : Person( name == "benx")
//条件达到后执行
then
System.out.println("rule 1");
person.setName("xiongjinAAA");
end
rule "rule 2"
salience 2
no-loop true
activation-group "find person"
when
person : Person( name == "benx")
then
System.out.println("rule 1");
person.setName("xiongjinAAA");
end
分享到:
相关推荐
从基础讲起,结合应用场景,由浅到深细化讲解drools规则引擎的的相关知识,并结合具体实例,演示功能的使用和注意事项。后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括...
1. **规则语言与DSL**:讲解Drools的DRL(Drools Rule Language)以及如何使用领域特定语言(DSL)来编写更符合业务语境的规则。 2. **规则生命周期**:解释规则的加载、激活、执行和撤销过程,以及如何在运行时...
在这个"Drools规则引擎使用demo"中,我们将深入探讨Drools的核心概念、工作原理以及如何通过实际操作来运用它。 1. **Drools核心概念**: - **规则(Rule)**:是Drools中的基本单位,包含条件(LHS,左侧)和行动...
为了更好地理解和应用Drools,你可以阅读“规则引擎Drools在J2EE项目开发中的应用.pdf”这份文档,它将详细讲解如何在实际项目中集成和使用Drools,包括规则的编写、引擎的配置、以及与J2EE环境的交互等内容。...
通过阅读"Drools5规则引擎开发教程.pdf",你将了解如何配置和使用Drools5,以及如何利用其强大功能解决实际业务问题。学习Drools5不仅有助于提升你的业务逻辑处理能力,还能帮助你更好地实现业务规则的管理和维护。
Drools7 之 HelloWorld 主要介绍了 Drools7 的基本使用方法,包括规则文件、规则属性和定时器和日历等内容。 规则是 Drools 的核心概念,主要包括规则文件、规则属性和定时器和日历等内容。规则文件是 Drools 的...
《Drools5规则引擎学习研究》 Drools,原名JBoss Rules,是一个强大的开源业务规则管理系统,由JBoss公司开发,基于Charles Forgy的RTE算法,专为Java设计。它允许业务分析师和审核人员以直观的方式查看和验证业务...
- **灵活的规则语言**:使用Drools Expert的DRL(Drools Rule Language)编写规则,易于理解和编写。 - **工作记忆(Working Memory)**:存储规则执行过程中的事实对象,允许规则引擎与应用状态进行交互。 - **规则...
为了更好地理解和使用Drools,开发者需要学习Drools的API,掌握如何创建和管理知识库,以及如何与Drools交互。同时,熟悉DRL(Drools Rule Language)语法也是必不可少的,因为这是编写规则的主要方式。 总结来说,...
这个实例可能还包括了一个简单的Web应用程序,使用Servlet或Spring MVC等技术,接收用户提交的申请信息,然后调用drools服务进行审批。部署到Tomcat这样的应用服务器后,用户可以通过浏览器界面提交申请,后台drools...
Drools 提供了一个强大的规则语言(DRL - Drools Rule Language)来声明规则,并且集成了工作流引擎,使得业务流程管理成为可能。在 IT 领域,Drools 广泛应用于金融、保险、医疗等行业的决策自动化。 ** 在 IDEA ...
3. **规则语法**:掌握Drools的DRL(Drools Rule Language)语言,学习如何编写规则,包括条件语句(LHS,左侧)和动作语句(RHS,右侧)。 4. **规则的加载与执行**:学习如何使用KieSession加载规则,并通过...
Drools不仅仅是一个简单的规则引擎,它还提供了完整的生命周期管理工具,帮助企业更好地管理和部署业务规则。 #### 三、Drools规则集文件语法 Drools规则通常使用Drools Rule Language (DRL)编写,这是一种简洁而...
### Drools5规则引擎开发文档知识点详解 #### 一、Drools5规则引擎简介 Drools是一款基于Java的开源规则引擎,广泛应用于业务逻辑处理领域,它可以帮助开发者快速地构建灵活且复杂的业务规则系统。Drools支持多种...
1. **Drools语法**: 使用Drools规则语言(DRL)编写规则,DRL是一种类似SQL的语言,可以定义规则条件和行动。 2. **规则格式**: 每条规则由"when"部分(条件)和"then"部分(行动)组成。例如:`when $customer : ...
这包括使用DRL(Drools Rule Language)编写规则,以及通过Guvnor(Drools的规则管理系统)进行规则的存储、版本管理和测试。DRL是一种声明式语言,类似于SQL,用于定义业务规则。 然后,教程会深入探讨Drools的...
Drools提供了一个灵活的框架,包括规则语言(DRL)、工作内存、事实对象和执行引擎等关键组件,使得业务规则的管理变得简单且高效。 在Drools中,规则语言DRL(Drools Rule Language)是编写规则的主要工具。DRL...
2. **规则语言(DRL)**:Drools使用Domain Specific Language(领域特定语言)编写规则。DRL是一种声明性的编程语言,让非程序员也能理解业务规则。文档会详细介绍DRL的语法和结构,包括条件、动作、规则定义等。 ...
drools是中国大数据技术领域中广泛使用的规则引擎之一,特别是在决策管理和业务逻辑自动化方面。Drools 6.5是该框架的一个稳定版本,提供了强大的规则处理能力,支持复杂的业务规则编写、执行和管理。本实例将详细...
Drools是一个基于Java的业务规则管理系统(BRMS),它提供了强大的业务...熟练掌握Drools的开发和使用,需要对规则引擎的基本原理、Drools的环境搭建、规则文件的编写、高级功能的运用以及性能优化等方面有深入的理解。