`
snoopy7713
  • 浏览: 1149721 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

开源业务规则引擎JBoss Drools入门介绍

    博客分类:
  • java
阅读更多

目 录

1 现状分析 ... 3

1.1 现状 ... 3

1.2 问题 ... 3

1.3 解决方案 ... 3

1.4 适用情景 ... 3

2 什么是规则引擎 ... 3

3 Drools 简介 ... 4

4 竞争产品比较 ... 4

5 开发环境搭建 ... 4

6 创建HelloWorld 程序 ... 6

7 规则语言 ... 10

1 现状分析

1.1 现状

在很多行业应用中比如银行、保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中。

1.2 问题

主要存在的问题有以下几个方面:

1) 当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经历开发、测试验证上线等过程,变更成本比较大。

2) 长时间系统变得越来越难以维护。

3) 开发团队一般是由一个熟悉业务的BA(业务分析人员)和若干个熟悉技术的开发人员组成,开发人员对业务规则的把握能力远不及BA,但实际上却承担了将业务规则准确无误实现的重任。

4) 系统僵化,新需求插入困难。

5) 新需求上线周期较长。

1.3 解决方案

能否让我们的业务系统更灵活一点呢?

思路:将业务规则从技术实现中提取出来,实现技术和业务分离,开发人员处理 技术、业务分析人员定义业务规则,各自做自己所擅长的事情。

方案:目前已经有比较成熟的开源产品支持,这就是本文所要介绍的Drools,我们将业务规则定义在Database或者BRMS(Business Rule Management System)中,通过管理DB或者BRMS实现业务逻辑的动态改变。

1.4 适用情景

什么时候应该使用规则引擎?

虽然规则引擎能解决我们的许多问题,但我们还需要认真考虑一下规则引擎对我

们的项目本身是否是合适的。需要关注的点有:

Ø 我的应用程序有多复杂?

对于那些只是把数据从数据库中传入传出,并不做更多事情的应用程序,最好不要使用规则引擎。但是,当在Java中有一定量的商业逻辑处理的话,可以考虑Drools的使用。这是因为很多应用随着时间的推移越来越复杂,而Drools可以让你更轻松应对这一切。

Ø 我的应用的生命周期有多久?

如果我们应用的生命周期很短,也没有必要使用Drools,使用规则引擎将会在中长期得到好处。

Ø 我的应用需要改变吗?

这个答案一般情况下是肯定的,“这世界唯一不变的只有变化”,我们需求也是这样的,无论是在开发过程中或是在开发完成以后,Drools能从频繁变化的需求中获得好处。

2 什么是规则引擎

规则引擎是基于规则的专家系统的核心部分,主要由三部分组成:规则库(Knowledge base)+Working Memory(Fact base)+推理机(规则引擎),规则引擎根据既定事实和知识库按照一定的算法执行推理逻辑得到正确的结果。

3 Drools 简介

Drools 是一个基于Charles Forgy's的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。

业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

4 竞争产品比较

与Drools功能类似的同类开源产品主要有:OpenRules、OpenLexicon等,商业产品功能比较强也比较贵,这里不做比较,主要差别如下表:

 

Drools

OpenRules

OpenLexicon

规则表示方法

支持以下四种:

The Rule Language

Domain Specific Language Decision Tables

XML Rule Language

Decision Table

无规则语言,通过Web界面配置规则,并保存在数据库中

规则算法

RETE算法

不详

不祥

规则开发

Rule IDE(Eclipse插件)

Excel

XML

Excel

基于Web的配置界面

规则知识库

支持XML、Excel、BRMS

Excel

Database

易用性

通过Rule IDE,可以方便地编辑DRL和DSL文件

业务人员直接使用Decision Table估计还是有一定的难度

不太好用

开放性

非常开放

不开放

不开放

可拓展性

通过与J2EE技术结合,具有很强的拓展性。

不太好

很不好

JSR-94 标准

支持

支持

不支持

成熟度

较低

比较新,不成熟

厂商背景

JBoss

小厂商

小厂商

5 开发环境搭建

打开Drools主页(http://www.jboss.org/drools ),我们可以看到如下界面。

clip_image002

其中,Drools Expert是我们想要的,这个是规则引擎。

Drools Guvnor这个是BRMS系统,如果我们需要将业务规则存储在BRMS中,可以安装Guvnor。

Drools Flow这个是工作流引擎,本文不作介绍。

选择Drools Expert进入如下页面:

clip_image004

下载红色的这三项。

安装Drools:

l 解压缩drools-5.0-bin.zip到任意目录,比如:D:/tools/drools/drools-5.0-bin

解压缩drools-5.0-eclipse-all.zip到eclipse的安装目录

l 启动eclipse,查看工具栏是否有drools的图标,如果有则说明安装正常。

否则,打开菜单->windows->open perspective->other->drools。如果perspective当中也没有,请删除 eclipse/configuration/org.eclipse.update目录,再重启eclipse。

l 配置drools的Runtime环境,就是要指向drools-5.0-bin目录

clip_image006

clip_image008

至此,开发环境已经搭建好了。

6 创建HelloWorld 程序

创建一个HelloWorld的程序也很简单。

l 新创建一个项目,选Drools Project

clip_image010

输入项目名称和路径:

clip_image012

选择Demo文件,这里我们全部勾选:

clip_image014

点完Finish,可以看到如下界面,我们的Demo已经创建完了。

clip_image016

运行DroolsTest和DecisionTableTest类,均可以看到有如下输出:

Hello World

Goodbye cruel world

到这里我们的HelloWorld已经创建完了,没有写一行代码,简单吧?

主要生成文件:

Sample.drl—基于DRL的规则库

Sample.xls—基于Decision table 的规则库

DroolsTest—Sample.drl的测试代码

主要代码如下:

public class DroolsTest {

public static final void main(String[] args) {

try {

// load up the knowledge base

KnowledgeBase kbase = readKnowledgeBase ();

StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger (ksession, "test");

// go !

Message message = new Message();

message.setMessage("Hello World");

message.setStatus(Message.HELLO );

ksession.insert(message);

ksession.fireAllRules();

logger.close();

} catch (Throwable t) {

t.printStackTrace();

}

}

private static KnowledgeBase readKnowledgeBase() throws Exception {

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder ();

kbuilder.add(ResourceFactory.newClassPathResource ("Sample.drl"), ResourceType.DRL );

KnowledgeBuilderErrors errors = kbuilder.getErrors();

if (errors.size() > 0) {

for (KnowledgeBuilderError error : errors) {

System.err .println(error);

}

throw new IllegalArgumentException("Could not parse knowledge.");

}

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase ();

kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

return kbase;

}

public static class Message {

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;

}

}

}

主要功能:

1) 读取并创建知识库。

2) 创建会话和事实库。

3) 调用规则引擎执行规则并输出结果。

DecisionTableTest—Sample.xls的测试代码。

7 规则语言

在我们生成的HelloWorld里我们可以有2个文件Sample.drl和Sample.xls,这2个文件都是用来定义规则库的,Sample.xls我就不介绍了,用excel打开可以看到注释。

对于Sample.drl文件,Drools定义了一套自己的语言来描述规则。

格式为:

Rule 规则名

When 相当于IF,使用java bean里面的属性进行条件判断。

Then 满足条件后执行一定的操作,在这里返回结果或者更新状态信息。

End

clip_image018

本文做入门介绍,需要更深入了解可以看Drools的在线文档。

8 在线资料

百度文库《Drools5规则引擎开发教程》

http://wenku.baidu.com/view/a6516373f242336c1eb95e7c.html

JBoss官方文档:

http://www.jboss.org/drools/documentation.html

分享到:
评论

相关推荐

    规则引擎Drools入门实战案例

    Drools入门案例 Drools基础语法 规则属性 Drools高级语法 Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名...

    开源业务规则引擎JBossDrools入门介绍

    【标题】: 开源业务规则引擎JBoss Drools入门介绍 【内容】: 在现代企业应用中,特别是在银行和保险等复杂业务领域,业务规则往往错综复杂且频繁变动。传统做法是将业务规则直接嵌入到程序代码中,但这种方法存在...

    Mastering JBoss Drools 6 for Developers

    Drools是由JBoss提供的一个开源业务规则管理(BRM)和复杂事件处理(CEP)平台。它支持多种业务逻辑管理的需求,并且能够帮助开发者构建更加智能的应用程序。Drools的核心组件包括业务规则引擎(BRE)、工作流引擎(jBPM)...

    Drools_规则引擎详解

    Drools 规则引擎是基于 Java 的开源规则引擎,由 JBoss 发布。作为一个业务规则管理系统(BRMS),Drools 提供了一个基于规则的系统,用于定义、执行和管理业务规则。Drools 的主要功能是将业务规则与应用程序逻辑...

    drools入门指南(基于drools6.2).pdf

    Drools是一款基于Java的开源业务规则管理系统(BRMS),它能够帮助开发者将复杂的业务逻辑规则从代码中分离出来,以独立的规则文件形式存储。这种方式使得规则更加灵活且易于维护,因为即使是在生产环境中,也可以...

    JBoss Rules入门资料集锦

    JBoss Rules,现名为Drools,是一款强大的开源业务规则管理系统(BRMS),它允许开发者在应用程序中嵌入复杂的业务规则。本入门资料集锦涵盖了从基础到高级的多个方面,帮助初学者全面理解并掌握如何使用JBoss Rules...

    Drools JBoss Rules 5 Developers Guide

    - **定义与背景**:Drools 是一个开源业务规则管理系统(Business Rule Management System, BRMS),它支持开发人员通过声明式编程来实现业务逻辑。Drools 由 JBoss 维护,并作为 Red Hat JBoss BRMS 的一部分。 - *...

    Drools入门手册

    Drools是JBOSS组织开发的一款开源规则引擎,基于BRMS(Business Rule Management System)系统,用于处理复杂的业务规则。它支持DMN(Decision Model and Notation),Rete算法和JPAAPI,能够处理大量规则并高效执行...

    规则引擎drools

    Drools是一款强大的开源规则引擎,它基于Java语言,由JBOSS社区开发并维护。规则引擎的核心功能是处理业务规则,将复杂的逻辑转化为易于管理和维护的规则集,使得业务决策过程更加灵活和可扩展。Drools提供了规则的...

    drools框架学习文档

    Drools 是一款强大的开源业务规则引擎,由 JBoss 社区开发,现在是 Red Hat 的一部分。它的设计目的是帮助企业和组织以灵活、高效的方式实现业务逻辑的自动化执行。Drools 提供了一个符合业界标准的规则引擎,能够...

    jboss rules 最新09年英文原版教材

    JBoss Drools 是一个开源业务规则管理系统(BRMS),它提供了一个完整的框架来定义和执行业务规则。该系统不仅支持传统的专家系统,还提供了面向对象的业务逻辑管理能力。通过 Drools,开发者可以将业务规则从应用...

    Drools JBoss Rules 5.0 Developer's Guide

    Drools 是一个开源的业务规则管理系统(Business Rule Management System, BRMS),它支持业务规则管理、工作流管理和事件驱动处理等功能。Drools 的设计目标是提供一种灵活且强大的框架,使开发人员能够轻松地将复杂...

    droolsworkflow:使用 jboss drools 的生物信息学工作流程。 来自 Ekrame Jacobi Genoscope Evry 的想法

    Drools是Red Hat公司开发的一个开源业务规则管理系统(BRMS),它提供了一个强大且灵活的规则引擎,用于执行基于特定条件的业务决策。在生物信息学中,这些条件可能包括基因序列比对、变异检测、功能预测等复杂规则...

    Drools4Demo 示例 非常不错

    Drools是一个强大的开源规则引擎,由JBOSS公司开发,现属于Red Hat公司的一部分。它提供了一个灵活、高效的框架,用于在Java应用程序中实施和执行复杂的业务规则。 Drools的核心概念包括: 1. **规则**:规则是...

    规则引擎应用实践

    Drools是JBOSS组织开发的一个开源规则引擎,它基于 Drools Expert 和 Drools Fusion 两个核心组件,能够处理静态业务规则和实时事件处理。Drools 提供了丰富的API和DSL(领域特定语言)来编写规则,使得业务人员也能...

    Drools使用手册.mht

    1. **入门指导**:介绍如何安装和配置Drools环境,包括引入Drools库到Java项目中,以及设置规则引擎的工作流程。 2. **Drools语法**:详细解释Drools规则文件的结构和语法,如`rule`关键字、`when`和`then`块,以及...

Global site tag (gtag.js) - Google Analytics