InfoQ发布了一个关于规则引擎的介绍Real-World Rule Engines,原文 http://www.infoq.com/articles/Rule-Engines
ONJava上也有两篇文章:
Give Your Business Logic a Framework with Drools http://www.onjava.com/lpt/a/6093
Using Drools in Your Enterprise Java Application http://www.onjava.com/lpt/a/6160
下面总结一下其中的精华:
大多数web和企业Java应用可以分成三个部分:一个和用户交互的前台, 一个和后台系统,例如数据库交互的服务层,以及他们中间的业务逻辑。 现在使用框架构建前台和后台系统已经成为普遍共识(例如, Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但却没有一个标准的方法来构建业务逻辑。一些框架,例如 EJB 和 Spring 只在一个高层实现业务逻辑,但对于我们组织逻辑代码没有任何帮助,所以,为什么没有一个框架来替换冗繁,易错的if...then语句呢,这个框架应该和其它前台或后台框架一样,易于配置,具有可读性和重用性。下面我们将介绍Drools 规则引擎,这个来解决我们问题的框架。
下面是一个典型的Java业务逻辑的代码
if ((user.isMemberOf(AdministratorGroup)
&& user.isMemberOf(teleworkerGroup))
|| user.isSuperUser(){
// more checks for specific cases
if((expenseRequest.code().equals("B203")
||(expenseRequest.code().equals("A903")
&&(totalExpenses<200)
&&(bossSignOff> totalExpenses))
&&(deptBudget.notExceeded)) {
//issue payments
} else if {
//check lots of other conditions
}
} else {
// even more business logic
}
这是大多数程序员写业务逻辑的方法,但是有以下的问题:
- 如果用户有另一个选项,例如("C987") ,那么需要修改上面的代码,当代码很长的时候,修改代码是难于维护的
- 我们如何保证代码的正确性,这个代码只有程序员能够看到,真正的使用者,业务人员无法看到这个代码
- 很多应用程序有相同的业务逻辑,如果某个业务改变了,如何保证其他业务逻辑的一致性
- 业务逻辑能否不合java语言绑定?
- 业务逻辑能否用其他的脚本语言。
Java下的规则引擎标准就是JSR94,它的实现主要有JessJenaDrools
Drools中,一个典型的业务逻辑的配置,如下
<?xml version="1.0"?>
<rule-set name="BusinessRulesSample"
xmlns="http://drools.org/rules"
xmlns:java="http://drools.org/semantics/java"
xmlns:xs
="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation
="http://drools.org/rules rules.xsd
http://drools.org/semantics/java java.xsd">
<!-- Import the Java Objects that we refer
to in our rules -->
<java:import>
java.lang.Object
</java:import>
<java:import>
java.lang.String
</java:import>
<java:import>
net.firstpartners.rp.StockOffer
</java:import>
<!-- A Java (Utility) function we reference
in our rules-->
<java:functions>
public void printStock(
net.firstpartners.rp.StockOffer stock)
{
System.out.println("Name:"
+stock.getStockName()
+" Price: "+stock.getStockPrice()
+" BUY:"
+stock.getRecommendPurchase());
}
</java:functions>
<rule-set>
<!-- Ensure stock price is not too high-->
<rule name="Stock Price Low Enough">
<!-- Params to pass to business rule -->
<parameter identifier="stockOffer">
<class>StockOffer</class>
</parameter>
<!-- Conditions or 'Left Hand Side'
(LHS) that must be met for
business rule to fire -->
<!-- note markup -->
<java:condition>
stockOffer.getRecommendPurchase() == null
</java:condition>
<java:condition>
stockOffer.getStockPrice() < 100
</java:condition>
<!-- What happens when the business
rule is activated -->
<java:consequence>
stockOffer.setRecommendPurchase(
StockOffer.YES);
printStock(stockOffer);
</java:consequence>
</rule>
</rule-set>
一条规则就是rule-set中的rule,如果有很多规则,就要写很多的rule。
上面规则的意思是判断股票价格是否小于100,如果100这个标准改变了,那么只要修改这个规则文件,而不用去修改源代码了
分享到:
相关推荐
Java规则引擎-Drools的介绍及应用 Java规则引擎是一种基于规则的专家系统,起源于人工智能领域。规则引擎技术是一项非常有吸引力的技术,它可以模拟人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的...
### Java规则引擎——Drools的深度解析与应用探索 #### 一、规则引擎与基于规则的专家系统 规则引擎,作为软件开发领域的一项关键技术,其核心在于模仿人类的决策过程,通过预定义的规则集对输入数据进行分析,...
规则引擎技术是一项很有吸引力的技术....然后重点介绍了Java规则引擎技术的规范和一个采用XML和java语言实现的规则引擎--Drools.最后给出了利用Drools解决实际问题的范例并探讨了该技术的不足和发展前景
【Drools】JAVA规则引擎 -- Drools Drools 是一个开源的业务规则管理系统(BRMS),它基于Java语言,提供了强大的规则引擎,帮助企业快速实现业务规则的编写、管理和执行。Drools 受到了广泛的欢迎,尤其在那些需要...
Java规则引擎Drools是一种强大的业务规则管理系统,它允许开发者将复杂的业务逻辑以规则的形式分离出来,便于管理和维护。Drools是基于Model Driven Architecture(MDA)的,它支持RuleML和Business Rule Markup ...
JAVA 规则引擎 -- Drools Drools 是一个基于 Java 的规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。 知识点...
kie-drools-wb,这个名字代表着Drools工作台(Drools Workbench)的运行时库,它是 Drools 高级规则引擎的重要组成部分。Drools 是一个开源的业务规则管理系统(BRMS),它提供了一种高效、灵活的方式来编写、测试和...
**EasyRules**是一个轻量级的Java规则引擎,旨在简化规则引擎的使用。它的设计目标是易于学习和使用,同时保持足够的功能来满足大多数业务需求。EasyRules支持通过JSON文件定义规则,这使得非技术背景的用户也能方便...
Drools是一款强大的规则引擎,而Drools Workbench则为它提供了一个直观的、基于Web的开发环境。这里我们关注的是这个版本能够在Tomcat 7.0.85上顺利运行,这为开发者提供了极大的便利。 首先,我们要了解Drools。...
Drools是基于Java的规则引擎,它使用规则语言(DRL)来编写业务规则,使企业能够灵活地管理其操作和决策。 在6.4.0版本中,kie-drools 提供了以下核心功能和知识点: 1. **规则引擎**:Drools的核心是一个强大的...
- **JBoss Drools**:Drools是开源的Java规则引擎,它基于MVEL和Java的规则语言,提供强大的规则推理和工作流功能。 - **JESS**:JESS(Java Expert System Shell)是一个基于Lisp的规则引擎,虽然不如前两者流行...
《Java规则引擎_Drools的介绍及应用》一文深入探讨了规则引擎技术在软件开发领域的应用,尤其聚焦于Java规则引擎Drools的特性和实施。规则引擎,作为一项吸引人的技术,其核心在于模仿人类专家的决策过程,通过预...