`

Drools6.4动态加载规则之(一)模板的简单应用

阅读更多

1.template

drools6开始提供模板的概念;

模板能为我们提供简单的规则替换;做到简单的规则动态加载;

本例子的demo基于最新稳定版drools6.4

2.项目结构

3.pom依赖

<!--drools-->
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>6.4.0.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-decisiontables</artifactId>
    <version>6.4.0.Final</version>
</dependency>

4.代码

Message.java
package com.caicongyang.drools.templates;

import java.io.Serializable;

/**
 * @author caicongyang1
 * @version id: Message, v 0.1 16/9/29 下午3:06 caicongyang1 Exp $$
 */
public class Message implements Serializable {

    private static final long serialVersionUID = -3168739008574463191L;

    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;
    }

}
 
MyDataProvider.java
package com.caicongyang.drools.templates;

import java.util.Iterator;
import java.util.List;

import org.drools.template.DataProvider;

/**
 * @author caicongyang1
 * @version id: Message, v 0.1 16/9/29 下午3:06 caicongyang1 Exp $$
 */
public class MyDataProvider implements DataProvider {

    private Iterator<String[]> iterator;

    public MyDataProvider(List<String[]> rows) {
        this.iterator = rows.iterator();
    }

    public boolean hasNext() {
        return iterator.hasNext();
    }

    public String[] next() {
        return iterator.next();
    }
}
 
DataProviderCompilerTest.java
package com.caicongyang.drools.templates;

import java.util.ArrayList;

import org.drools.template.DataProviderCompiler;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.Message.Level;
import org.kie.api.builder.model.KieBaseModel;
import org.kie.api.builder.model.KieModuleModel;
import org.kie.api.io.KieResources;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

/**
 *
 * Drools模板实例应用
 *
 * @author caicongyang1
 * @version id: Message, v 0.1 16/9/29 下午3:06 caicongyang1 Exp $$
 */
public class DataProviderCompilerTest {

    public static void main(String[] args) {
        ArrayList<String[]> rows = new ArrayList<String[]>();
        rows.add(new String[] { "1", "status == 0" });

        MyDataProvider tdp = new MyDataProvider(rows);
        DataProviderCompiler converter = new DataProviderCompiler();
        String drl = converter.compile(tdp, "/rules/rule_template_1.drl");

        System.out.println(drl);

        KieServices kieServices = KieServices.Factory.get();
        KieResources resources = kieServices.getResources();
        KieModuleModel kieModuleModel = kieServices.newKieModuleModel();//1

        KieBaseModel baseModel = kieModuleModel.newKieBaseModel("FileSystemKBase").addPackage("rules");//2
        baseModel.newKieSessionModel("FileSystemKSession");//3
        KieFileSystem fileSystem = kieServices.newKieFileSystem();

        String xml = kieModuleModel.toXML();
        System.out.println(xml);//4
        fileSystem.writeKModuleXML(xml);//5

        String path = DataProviderCompilerTest.class.getClass().getResource("/").getPath();
        fileSystem.write("src/main/resources/rules/rule1.drl", drl);

        KieBuilder kb = kieServices.newKieBuilder(fileSystem);
        kb.buildAll();//7
        if (kb.getResults().hasMessages(Level.ERROR)) {
            throw new RuntimeException("Build Errors:\n" + kb.getResults().toString());
        }
        KieContainer kContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());

        KieSession kSession = kContainer.newKieSession("FileSystemKSession");

        Message message = new Message();
        message.setMessage("Hello World");
        message.setStatus(Message.HELLO);

        kSession.insert(message);
        kSession.fireAllRules();
        kSession.dispose();

    }

}

rule_template_1.dl
template header
RULE_ID
RULE_KEY1

package com.caicongyang.drools.templates;

import com.caicongyang.drools.templates.Message;

template "RULE"
rule "RULE_@{RULE_ID}"
    when
        m: Message(@{RULE_KEY1})
    then
        System.out.println(m.getMessage());
end
end template

更多精彩内容请继续关注我的博客http://blog.csdn.net/caicongyang

记录与分享,你我共成长 -fromcaicongyang
 
 
分享到:
评论

相关推荐

    drools从字符串中动态加载规则

    ### Drools从字符串中动态加载规则 在使用Drools规则引擎时,...综上所述,通过从字符串中动态加载规则的方式,我们可以更加灵活高效地管理和使用Drools规则引擎,这对于需要快速迭代业务逻辑的应用场景来说尤为重要。

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

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

    drools6.4+spring集成

    drools6.4+spring集成是一项将业务规则引擎Drools与Spring框架相结合的技术实践,旨在利用Drools的强大规则处理能力,结合Spring的灵活应用管理,构建高效、可维护的业务系统。在这个项目实例中,我们将深入探讨如何...

    springboot集成drools实现重新加载规则

    当我们谈论"springboot集成drools实现重新加载规则"时,这意味着我们要在Spring Boot应用中嵌入Drools,并且能够动态地更新和加载业务规则,而不必重启应用。这对于业务规则频繁变更的场景非常有用,因为这样可以...

    drools动态生成规则文件

    drools动态生成规则文件是基于Java的业务规则管理系统,它允许开发者在运行时创建、修改和执行业务规则。 Drools是Red Hat JBoss BRMS(Business Rules Management System)的一部分,它提供了一种强大的规则引擎,...

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

    Drools是一款强大的业务规则管理系统(BRMS),它提供了核心的业务规则引擎(BRE)、Web作者和规则管理应用程序(Drools Workbench)以及用于核心开发的Eclipse IDE插件。Drools能够帮助开发者快速地构建灵活、可...

    Drools7 + Springboot2 动态更新规则

    通过结合这两者,我们可以构建一个灵活且可扩展的业务规则应用,其中规则可以从数据库(如MySQL)中动态加载,以实现业务逻辑的实时更新。 首先,我们需要理解Drools的核心概念。Drools提供了一个基于规则的推理...

    drools5 规则动态加载示例

    drools5提供了一种解决方案,允许我们在运行时动态地加载和应用新的或修改过的规则,极大地提高了灵活性。 动态加载规则的核心概念是Drools的KieSession,它是规则引擎的执行环境。通过创建一个KieSession实例,...

    springboot+drools动态模板引擎

    标签“drools 动态模板”暗示了这个示例关注的是如何利用Drools进行动态规则管理,以及如何在SpringBoot环境中实现这一功能。通过这种方式,开发者可以快速响应业务变化,提高系统的可维护性和灵活性。 至于文件名`...

    基于drools7.9 动态更新rule

    Drools是一款强大的、开源的Java规则引擎,它允许开发者在运行时动态地修改业务规则,从而实现灵活的业务逻辑管理。Drools 7.9版本是其稳定的一个版本,提供了更高效的执行效率和丰富的API。本文将深入探讨如何利用...

    JAVA规则引擎JBOSS RULES(DROOLS 6.5) 动态规则

    例如,银行可能会根据市场条件实时调整贷款审批规则,而这些规则可以通过DROOLS与数据库的结合动态加载,而不需要重新部署整个应用。 为了实现动态规则,开发者需要设计一个系统,该系统能够从数据库中读取规则,...

    规则引擎Drools 之 springboot 集成、热加载

     如果对drools还不是特别熟悉的,可以看下 《规则引擎Drools 之 初识drools》这篇文章;  本文源码,github 传送门:https://github.com/vincent9309/drools:  系统架构如下: 二、项目目录结构 三、...

    drools整合apollo实现动态规则引擎

    drools整合apollo实现动态规则引擎,可以在不停服的情况下动态调整规则。无需数据库等存储,自动推送

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red ...通过这个"Drools规则引擎使用demo",你可以学习如何配置、加载规则,以及如何在Java应用程序中使用Drools进行规则的执行和事实的管理。这将为你构建智能决策系统提供坚实的基础。

    drools文档教程-规则引擎文档

    Drools 规则引擎文档教程 Drools 规则引擎是一种基于 Java 的开源规则引擎,主要用来解决...Drools 规则引擎是一个非常有用的工具,可以帮助我们解决复杂的业务逻辑问题,使得应用程序变得更加灵活、高效和可维护。

    Drools 规则流的使用介绍

    Drools 是一个开源的业务规则管理系统(BRMS),它基于Java平台,提供了强大的规则引擎和规则流(Workflow)功能。这篇文章将深入探讨Drools如何实现规则流,以及如何在实际项目中有效应用。 ### 一、Drools 概述 ...

    规则引擎Drools.NET移植版

    Drools是一款强大的业务规则管理系统,源自Java社区,以其灵活、高效和可扩展的特性而广受赞誉。它允许开发者将业务逻辑以规则的形式编写,使得业务规则可以独立于应用程序代码进行管理和更新,提高了软件的可维护性...

    Drools规则引擎从入门到精通

    Drools WorkBench是一个Web应用,用于创建、测试和管理规则。它支持规则的编辑、测试、版本控制和部署。 8. **Drools决策表** - **入门**:学习如何创建和使用决策表来定义规则。 - **加强**:了解如何构建更...

    Drools规则执行顺序

    标题 "Drools 规则执行顺序" 涉及的是一个业务规则引擎——Drools 的核心概念。Drools 是一个开源的Java决策管理平台,它允许开发者使用规则语言来编写业务逻辑,这些规则可以按特定顺序执行,以处理复杂的业务场景...

Global site tag (gtag.js) - Google Analytics