- 浏览: 1149721 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
目 录
在很多行业应用中比如银行、保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中。
主要存在的问题有以下几个方面:
1) 当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经历开发、测试验证上线等过程,变更成本比较大。
2) 长时间系统变得越来越难以维护。
3) 开发团队一般是由一个熟悉业务的BA(业务分析人员)和若干个熟悉技术的开发人员组成,开发人员对业务规则的把握能力远不及BA,但实际上却承担了将业务规则准确无误实现的重任。
4) 系统僵化,新需求插入困难。
5) 新需求上线周期较长。
能否让我们的业务系统更灵活一点呢?
思路:将业务规则从技术实现中提取出来,实现技术和业务分离,开发人员处理 技术、业务分析人员定义业务规则,各自做自己所擅长的事情。
方案:目前已经有比较成熟的开源产品支持,这就是本文所要介绍的Drools,我们将业务规则定义在Database或者BRMS(Business Rule Management System)中,通过管理DB或者BRMS实现业务逻辑的动态改变。
什么时候应该使用规则引擎?
虽然规则引擎能解决我们的许多问题,但我们还需要认真考虑一下规则引擎对我
们的项目本身是否是合适的。需要关注的点有:
Ø 我的应用程序有多复杂?
对于那些只是把数据从数据库中传入传出,并不做更多事情的应用程序,最好不要使用规则引擎。但是,当在Java中有一定量的商业逻辑处理的话,可以考虑Drools的使用。这是因为很多应用随着时间的推移越来越复杂,而Drools可以让你更轻松应对这一切。
Ø 我的应用的生命周期有多久?
如果我们应用的生命周期很短,也没有必要使用Drools,使用规则引擎将会在中长期得到好处。
Ø 我的应用需要改变吗?
这个答案一般情况下是肯定的,“这世界唯一不变的只有变化”,我们需求也是这样的,无论是在开发过程中或是在开发完成以后,Drools能从频繁变化的需求中获得好处。
规则引擎是基于规则的专家系统的核心部分,主要由三部分组成:规则库(Knowledge base)+Working Memory(Fact base)+推理机(规则引擎),规则引擎根据既定事实和知识库按照一定的算法执行推理逻辑得到正确的结果。
3 Drools 简介
Drools 是一个基于Charles Forgy's的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。
业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。
与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 |
小厂商 |
小厂商 |
打开Drools主页(http://www.jboss.org/drools ),我们可以看到如下界面。
其中,Drools Expert是我们想要的,这个是规则引擎。
Drools Guvnor这个是BRMS系统,如果我们需要将业务规则存储在BRMS中,可以安装Guvnor。
Drools Flow这个是工作流引擎,本文不作介绍。
选择Drools Expert进入如下页面:
下载红色的这三项。
安装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目录
至此,开发环境已经搭建好了。
创建一个HelloWorld的程序也很简单。
l 新创建一个项目,选Drools Project
输入项目名称和路径:
选择Demo文件,这里我们全部勾选:
点完Finish,可以看到如下界面,我们的Demo已经创建完了。
运行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的测试代码。
在我们生成的HelloWorld里我们可以有2个文件Sample.drl和Sample.xls,这2个文件都是用来定义规则库的,Sample.xls我就不介绍了,用excel打开可以看到注释。
对于Sample.drl文件,Drools定义了一套自己的语言来描述规则。
格式为:
Rule 规则名
When 相当于IF,使用java bean里面的属性进行条件判断。
Then 满足条件后执行一定的操作,在这里返回结果或者更新状态信息。
End
本文做入门介绍,需要更深入了解可以看Drools的在线文档。
8 在线资料
百度文库《Drools5规则引擎开发教程》
http://wenku.baidu.com/view/a6516373f242336c1eb95e7c.html
JBoss官方文档:
http://www.jboss.org/drools/documentation.html
发表评论
-
一个例子全部说明java泛型中的K,V,T,E,?,object的意思及其用法
2013-03-07 11:09 70491.意思 jdk中的K,V,T,E等泛型名称很多人以为 ... -
Log4j 把不同包的日志打印到不同位置
2012-11-29 08:23 1150需要的包和测试的代码下载附件! 如果需要将不同的日 ... -
Java多线程发展简史
2012-09-16 14:25 1037转自:http://www.raychase.ne ... -
Java编码易疏忽的十个问题
2012-09-06 08:52 914在Java编码中,我们容易 ... -
网络编程
2012-09-04 13:30 971计算机网络基础 什么是计算机网络 把分布在 ... -
获取Java程序运行的路径 | 获取当前jar包的路径
2012-09-04 11:55 14082经过试验,不管是否是 Jar 包,不管是否是 Tom ... -
java的concurrent用法详解
2012-08-03 11:28 1020我们都知道,在JDK1.5之前,Java中要进行业务并发时 ... -
Java程序员必知的8大排序
2012-07-05 09:56 10278 种排序之间的关系: ... -
Comparator与Comparable的区别
2012-07-05 08:38 1219当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用C ... -
RSA算法Java实现
2012-06-27 08:22 1416Java代码 package c ... -
队列阻塞浅析
2012-06-17 18:10 932这几天所做的项目中涉及到了队列阻塞机制,通过研究整理如下 ... -
Java面试过程中会遇到的问题
2012-06-13 13:04 11441、abstract的method是否可同时是static,是 ... -
【解惑】深入jar包:从jar包中读取资源文件
2012-06-13 13:02 1101我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。 ... -
java 处理文件路径中的空格
2012-06-13 12:57 1539问题背景: windows下有个目录名称Program ... -
java内存分配机制
2012-06-13 12:52 1172通过这几天对一个 ... -
byte[]转化成其他数据类型
2012-05-14 16:41 1656Java与其他语言数据类型之间的转换方法实例程序 /*** ... -
java中byte转换int时为何与0xff进行与运算
2012-05-14 16:39 1071java中byte转换int时为何 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2012-05-14 16:31 6460工作项目需要在 java 和 c/c++ 之间进行 ... -
利用 Base64 缩短 UUID 至22位
2012-04-15 18:57 7175UUID还是比较常用的,尤其在web应用里。 有时在UR ... -
图解Java中的值传递与引用传递(更新版)
2012-04-09 12:49 1179编程的人,都会遇到值传递与引用传递的困惑,不过很快都会迎 ...
相关推荐
Drools入门案例 Drools基础语法 规则属性 Drools高级语法 Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名...
【标题】: 开源业务规则引擎JBoss Drools入门介绍 【内容】: 在现代企业应用中,特别是在银行和保险等复杂业务领域,业务规则往往错综复杂且频繁变动。传统做法是将业务规则直接嵌入到程序代码中,但这种方法存在...
Drools是由JBoss提供的一个开源业务规则管理(BRM)和复杂事件处理(CEP)平台。它支持多种业务逻辑管理的需求,并且能够帮助开发者构建更加智能的应用程序。Drools的核心组件包括业务规则引擎(BRE)、工作流引擎(jBPM)...
Drools 规则引擎是基于 Java 的开源规则引擎,由 JBoss 发布。作为一个业务规则管理系统(BRMS),Drools 提供了一个基于规则的系统,用于定义、执行和管理业务规则。Drools 的主要功能是将业务规则与应用程序逻辑...
Drools是一款基于Java的开源业务规则管理系统(BRMS),它能够帮助开发者将复杂的业务逻辑规则从代码中分离出来,以独立的规则文件形式存储。这种方式使得规则更加灵活且易于维护,因为即使是在生产环境中,也可以...
JBoss Rules,现名为Drools,是一款强大的开源业务规则管理系统(BRMS),它允许开发者在应用程序中嵌入复杂的业务规则。本入门资料集锦涵盖了从基础到高级的多个方面,帮助初学者全面理解并掌握如何使用JBoss Rules...
- **定义与背景**:Drools 是一个开源业务规则管理系统(Business Rule Management System, BRMS),它支持开发人员通过声明式编程来实现业务逻辑。Drools 由 JBoss 维护,并作为 Red Hat JBoss BRMS 的一部分。 - *...
Drools是JBOSS组织开发的一款开源规则引擎,基于BRMS(Business Rule Management System)系统,用于处理复杂的业务规则。它支持DMN(Decision Model and Notation),Rete算法和JPAAPI,能够处理大量规则并高效执行...
Drools是一款强大的开源规则引擎,它基于Java语言,由JBOSS社区开发并维护。规则引擎的核心功能是处理业务规则,将复杂的逻辑转化为易于管理和维护的规则集,使得业务决策过程更加灵活和可扩展。Drools提供了规则的...
Drools 是一款强大的开源业务规则引擎,由 JBoss 社区开发,现在是 Red Hat 的一部分。它的设计目的是帮助企业和组织以灵活、高效的方式实现业务逻辑的自动化执行。Drools 提供了一个符合业界标准的规则引擎,能够...
JBoss Drools 是一个开源业务规则管理系统(BRMS),它提供了一个完整的框架来定义和执行业务规则。该系统不仅支持传统的专家系统,还提供了面向对象的业务逻辑管理能力。通过 Drools,开发者可以将业务规则从应用...
Drools 是一个开源的业务规则管理系统(Business Rule Management System, BRMS),它支持业务规则管理、工作流管理和事件驱动处理等功能。Drools 的设计目标是提供一种灵活且强大的框架,使开发人员能够轻松地将复杂...
Drools是Red Hat公司开发的一个开源业务规则管理系统(BRMS),它提供了一个强大且灵活的规则引擎,用于执行基于特定条件的业务决策。在生物信息学中,这些条件可能包括基因序列比对、变异检测、功能预测等复杂规则...
Drools是一个强大的开源规则引擎,由JBOSS公司开发,现属于Red Hat公司的一部分。它提供了一个灵活、高效的框架,用于在Java应用程序中实施和执行复杂的业务规则。 Drools的核心概念包括: 1. **规则**:规则是...
Drools是JBOSS组织开发的一个开源规则引擎,它基于 Drools Expert 和 Drools Fusion 两个核心组件,能够处理静态业务规则和实时事件处理。Drools 提供了丰富的API和DSL(领域特定语言)来编写规则,使得业务人员也能...
1. **入门指导**:介绍如何安装和配置Drools环境,包括引入Drools库到Java项目中,以及设置规则引擎的工作流程。 2. **Drools语法**:详细解释Drools规则文件的结构和语法,如`rule`关键字、`when`和`then`块,以及...