规则引擎drools6.x和之前的版本变化很大,对规则引擎研究尚浅,对其中实现原理以及框架的具体结构不够了解,留着以后试着去慢慢研究,只是记录一下自己在实际中的应用。
第一步我们创建一个工厂类,这个类来创建KieSession和StatelessKieSession对象。这两个对象是我们可以处理我们定义好的规则。现阶段我们只要认为这两个对象是根据我们的规则文件来创建。
package com.sun.util;
import org.drools.core.event.DebugRuleRuntimeEventListener;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.Message;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.StatelessKieSession;
public class KieSessionFactory {
private static KieSession kieSession;
private KieSessionFactory() {
}
/**
*
* @title disposeKieSession
* @description TODO (清空对象)
* @return void
*/
public static void disposeKieSession() {
if (kieSession != null) {
kieSession.dispose();
kieSession = null;
}
}
/**
*创建KieSession对象
*/
public static KieSession newKieSession(String classPath) throws Exception {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
Resource resource = kieServices.getResources().newClassPathResource(classPath);
resource.setResourceType(ResourceType.DRL);
kfs.write(resource);
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
if (kieBuilder.getResults().getMessages(Message.Level.ERROR).size() > 0) {
throw new Exception();
}
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieBase kBase = kieContainer.getKieBase();
KieSession kieSession = kBase.newKieSession();
kieSession.addEventListener(new DebugRuleRuntimeEventListener());
return kieSession;
}
/**
*创建StatelessKieSession
*/
public static StatelessKieSession newStatelessKieSession(String classPath) throws Exception {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
Resource resource = kieServices.getResources().newClassPathResource(classPath);
resource.setResourceType(ResourceType.DRL);
kfs.write(resource);
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
if (kieBuilder.getResults().getMessages(Message.Level.ERROR).size() > 0) {
throw new Exception();
}
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieBase kBase = kieContainer.getKieBase();
StatelessKieSession kiesession = kBase.newStatelessKieSession();
return kiesession;
}
}
第二步定义规则文件,规则文件是*.drl格式,规则文件有自己的具体语法和关键词,我们通过查看drools的API来进行详细的了解。建议将规则文件定义到类路径下面。
package com.company.license
//list any import classes here.
import bean.Applicant;
import bean.Application;
//declare any global variables here
rule "Is of valid age"
salience 1
lock-on-active true
when
a: Applicant( age < 18 )
then
a.setValid(false);
end
rule "pass valid age"
salience 1
lock-on-active true
when
a: Applicant( age >= 18 )
then
a.setValid(true);
end
rule "Application was made this year"
when
$a : Application( dateApplied > "01-jan-2009" )
then
$a.setValid( false );
end
第三步来创建两个JavaBean对象,这是我们上面规则文件中引用的两个对象。
public class Applicant {
private String name;
private int age;
private boolean valid;
public Applicant() {
}
public Applicant(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 boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
}
public class Application {
private Date dateApplied;
private boolean valid;
public Date getDateApplied() {
return dateApplied;
}
public void setDateApplied(Date dateApplied) {
this.dateApplied = dateApplied;
}
public boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
}
这里我们初次使用StatelessKieSession来调用我们的规则
KieServices kieServices = KieServices.Factory.get();
StatelessKieSession kSession = KieSessionFactory.newStatelessKieSession("resources/test.drl");
Applicant applicant = new Applicant("Mr John Smith", 16);
Application application = new Application();
/**
* 多个对象
*/
kSession.execute(Arrays.asList(new Object[] { application, applicant }));
if (applicant.isValid()) {
System.out.println("pass");
} else {
System.out.println("pass denied");
}
System.out.println(application.isValid());
KieCommands kieCommands = kieServices.getCommands();
@SuppressWarnings("rawtypes")
List<Command> cmds = new ArrayList<Command>();
cmds.add(kieCommands.newInsert(new Applicant("Mr John Smith", 19), "mrSmith", true, null));
ExecutionResults results = kSession.execute(kieCommands.newBatchExecution(cmds));
applicant = (Applicant) results.getValue("mrSmith");
System.out.println(applicant.isValid());
分享到:
相关推荐
在使用Drools规则引擎时,有时我们需要实现更加灵活的规则管理方式。例如,在开发过程中,我们可能希望不通过每次修改代码或重启服务来更新业务规则,而是能够在运行时动态地更改规则。本文将详细介绍如何在Drools中...
kie drools 6.4是Red Hat公司的业务规则管理系统(BRMS)的一部分,它提供了一个强大的规则引擎,用于处理和执行基于规则的应用程序。在这个配置过程中,我们将关注如何在Windows 10环境下设置kie drools的web应用,...
**规则引擎Drools详解** Drools,作为一款强大的业务规则管理系统(BRMS),是JBoss企业级中间件的一部分,由Red Hat公司维护。它提供了基于Java的规则引擎,用于在应用程序中实现复杂的业务逻辑。Drools的核心功能...
【Drools规则引擎】是一种基于Java的开源规则引擎,由JBoss开发并维护,用于在应用程序中分离和管理业务规则。它允许开发者使用特定的语法编写业务规则,然后在运行时动态处理这些规则,以根据输入数据做出决策。...
3. **规则引擎初始化**:加载规则库,创建KieSession实例,它是与规则引擎交互的主要接口。 ```java KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices....
Drools是一款强大的规则引擎,它是Java开源社区JBOSS的一部分,主要用于业务规则管理。它允许开发者用一种声明式的方式定义业务规则,并在运行时高效地执行这些规则。本示例将带你深入了解如何使用Drools来实现一个...
**基于Drools规则引擎的实例** Drools是一款强大的业务规则管理系统,它基于Java语言,主要用于实现复杂的业务逻辑和决策。Drools的核心是它的规则引擎,它能够执行基于事实的推理,允许开发者编写一系列的规则来...
这个“用Spring Boot与Drools规则引擎写的Demo”项目,旨在帮助初学者快速理解和应用Drools在Spring Boot环境中的工作方式。 首先,让我们了解一下Spring Boot如何集成Drools。在Spring Boot项目中引入Drools依赖,...
SpringBoot整合Drools 7.0规则引擎是将企业级决策管理工具Drools与流行的Java微服务框架SpringBoot相结合的过程。这个整合为开发者提供了一种高效、灵活的方式来实现业务规则的管理和执行,尤其适合那些需要动态调整...
【Drools入门手册】是关于规则引擎的介绍,Drools是一个开源的Java规则引擎,它被设计用于实现复杂的业务逻辑和决策自动化。规则引擎是一种软件系统,它允许业务规则与应用程序的其余部分分离,使得规则的修改和管理...
《 Drools 实例:深入解析实时规则引擎设计与实现》 Drools 是一款强大的开源业务规则管理系统(BRMS),它提供了高效的实时规则引擎,使得企业可以轻松地管理和执行复杂的业务逻辑。本篇文章将深入探讨 Drools 的...
而Drools则是一个强大的规则引擎,它允许我们在运行时执行基于业务规则的决策,而无需修改代码。 在SpringBoot项目中集成Drools,首先需要引入Drools的依赖。在`pom.xml`文件中添加如下Maven依赖: ```xml ...
- 编写Java代码:实现规则引擎的初始化,加载规则流和规则,以及插入事实对象到工作内存中。 - 运行:执行Java代码,观察规则流的执行结果。 通过学习和实践这个示例,你可以掌握如何利用Drools 5.1来设计、实现和...
### 基于Spring + Drools 6.4规则引擎代码实例详解 #### 知识点一:Drools规则引擎介绍与应用背景 Drools是一款强大的业务规则管理系统(BRMS),它提供了核心的业务规则引擎(BRE)、Web作者和规则管理应用程序...
Drools是Red Hat公司推出的一个开源规则引擎,它基于Java,支持复杂的业务逻辑处理。本篇文章将深入探讨如何在Spring Boot应用中结合Drools,实现规则与业务的有效区分,并通过Workbench来编写和管理规程文件,从而...
标题中的"drools-demo.zip"表明这是一个关于Drools规则引擎的示例项目,而描述中提到"规则引擎简单使用案例Drools+Springboot2.X",这说明这个压缩包包含了一个使用Drools规则引擎与Spring Boot 2.x集成的简单应用。...
动态加载规则的核心概念是Drools的KieSession,它是规则引擎的执行环境。通过创建一个KieSession实例,我们可以将规则集(Rules)加载到内存中,然后触发这些规则来执行决策逻辑。当规则需要更新时,我们不需要关闭...
【标题】"springboot-drools" 是一个项目,它展示了如何将流行的Java框架Spring Boot与规则引擎Drools相结合。这个项目的核心目标是利用Drools的强大规则处理能力,通过Spring Boot的便利性来构建一个高效、灵活的...
- 预处理:规则引擎对输入的事实进行初始化和验证。 - 匹配:规则引擎使用规则中的条件来匹配事实,找出符合条件的规则。 - 决策:对于每个匹配的规则,规则引擎执行规则中的动作。 - 后处理:更新事实或触发...