`

初始规则引擎Drools

阅读更多
        规则引擎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规则引擎时,有时我们需要实现更加灵活的规则管理方式。例如,在开发过程中,我们可能希望不通过每次修改代码或重启服务来更新业务规则,而是能够在运行时动态地更改规则。本文将详细介绍如何在Drools中...

    kie drools6.4 web规则引擎tomcat7配置

    kie drools 6.4是Red Hat公司的业务规则管理系统(BRMS)的一部分,它提供了一个强大的规则引擎,用于处理和执行基于规则的应用程序。在这个配置过程中,我们将关注如何在Windows 10环境下设置kie drools的web应用,...

    规则引擎drools

    **规则引擎Drools详解** Drools,作为一款强大的业务规则管理系统(BRMS),是JBoss企业级中间件的一部分,由Red Hat公司维护。它提供了基于Java的规则引擎,用于在应用程序中实现复杂的业务逻辑。Drools的核心功能...

    Drools规则引擎.ppt

    【Drools规则引擎】是一种基于Java的开源规则引擎,由JBoss开发并维护,用于在应用程序中分离和管理业务规则。它允许开发者使用特定的语法编写业务规则,然后在运行时动态处理这些规则,以根据输入数据做出决策。...

    基于Drools的规则引擎实例(完整、可运行eclipse工程)

    3. **规则引擎初始化**:加载规则库,创建KieSession实例,它是与规则引擎交互的主要接口。 ```java KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices....

    Drools规则引擎实现示例

    Drools是一款强大的规则引擎,它是Java开源社区JBOSS的一部分,主要用于业务规则管理。它允许开发者用一种声明式的方式定义业务规则,并在运行时高效地执行这些规则。本示例将带你深入了解如何使用Drools来实现一个...

    基于Drools规则引擎的实例

    **基于Drools规则引擎的实例** Drools是一款强大的业务规则管理系统,它基于Java语言,主要用于实现复杂的业务逻辑和决策。Drools的核心是它的规则引擎,它能够执行基于事实的推理,允许开发者编写一系列的规则来...

    用Spring boot与Drools规则引擎写的Demo

    这个“用Spring Boot与Drools规则引擎写的Demo”项目,旨在帮助初学者快速理解和应用Drools在Spring Boot环境中的工作方式。 首先,让我们了解一下Spring Boot如何集成Drools。在Spring Boot项目中引入Drools依赖,...

    springboot整合drools7.0规则引擎 #资源达人分享计划#

    SpringBoot整合Drools 7.0规则引擎是将企业级决策管理工具Drools与流行的Java微服务框架SpringBoot相结合的过程。这个整合为开发者提供了一种高效、灵活的方式来实现业务规则的管理和执行,尤其适合那些需要动态调整...

    Drools入门手册.ppt

    【Drools入门手册】是关于规则引擎的介绍,Drools是一个开源的Java规则引擎,它被设计用于实现复杂的业务逻辑和决策自动化。规则引擎是一种软件系统,它允许业务规则与应用程序的其余部分分离,使得规则的修改和管理...

    drools实例

    《 Drools 实例:深入解析实时规则引擎设计与实现》 Drools 是一款强大的开源业务规则管理系统(BRMS),它提供了高效的实时规则引擎,使得企业可以轻松地管理和执行复杂的业务逻辑。本篇文章将深入探讨 Drools 的...

    springboot+drools动态模板引擎

    而Drools则是一个强大的规则引擎,它允许我们在运行时执行基于业务规则的决策,而无需修改代码。 在SpringBoot项目中集成Drools,首先需要引入Drools的依赖。在`pom.xml`文件中添加如下Maven依赖: ```xml ...

    drools5.1 规则流示例

    - 编写Java代码:实现规则引擎的初始化,加载规则流和规则,以及插入事实对象到工作内存中。 - 运行:执行Java代码,观察规则流的执行结果。 通过学习和实践这个示例,你可以掌握如何利用Drools 5.1来设计、实现和...

    基于Spring + Drools6.4规则引擎代码实例.

    ### 基于Spring + Drools 6.4规则引擎代码实例详解 #### 知识点一:Drools规则引擎介绍与应用背景 Drools是一款强大的业务规则管理系统(BRMS),它提供了核心的业务规则引擎(BRE)、Web作者和规则管理应用程序...

    drools实现将规则和业务的区分

    Drools是Red Hat公司推出的一个开源规则引擎,它基于Java,支持复杂的业务逻辑处理。本篇文章将深入探讨如何在Spring Boot应用中结合Drools,实现规则与业务的有效区分,并通过Workbench来编写和管理规程文件,从而...

    drools-demo.zip

    标题中的"drools-demo.zip"表明这是一个关于Drools规则引擎的示例项目,而描述中提到"规则引擎简单使用案例Drools+Springboot2.X",这说明这个压缩包包含了一个使用Drools规则引擎与Spring Boot 2.x集成的简单应用。...

    drools5 规则动态加载示例

    动态加载规则的核心概念是Drools的KieSession,它是规则引擎的执行环境。通过创建一个KieSession实例,我们可以将规则集(Rules)加载到内存中,然后触发这些规则来执行决策逻辑。当规则需要更新时,我们不需要关闭...

    springboot-drools

    【标题】"springboot-drools" 是一个项目,它展示了如何将流行的Java框架Spring Boot与规则引擎Drools相结合。这个项目的核心目标是利用Drools的强大规则处理能力,通过Spring Boot的便利性来构建一个高效、灵活的...

    Java规则引擎工作原理及其应用.docx

    - 预处理:规则引擎对输入的事实进行初始化和验证。 - 匹配:规则引擎使用规则中的条件来匹配事实,找出符合条件的规则。 - 决策:对于每个匹配的规则,规则引擎执行规则中的动作。 - 后处理:更新事实或触发...

Global site tag (gtag.js) - Google Analytics