`
lylyb
  • 浏览: 90469 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类
最新评论

Java规则引擎(转)

    博客分类:
  • JAVA
阅读更多
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,它的实现主要有Jess Jena Drools

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规则引擎说明

    "java规则引擎说明" Java规则引擎是指使用Java语言开发的一种规则引擎,能够根据事实对象和规则文件计算规则结果。下面是Java规则引擎的详细说明: 一、规则引擎介绍 规则引擎是指能够根据事实对象和规则文件计算...

    Java规则引擎与其API

    总结而言,Java规则引擎及其API(JSR-94)是为了解决业务逻辑与技术实现的分离问题,使得业务规则可以独立于应用程序代码进行管理和更新。随着标准的不断完善,规则引擎的使用将更加便捷,有助于提升企业软件系统的...

    JAVA规则引擎原理

    Java 规则引擎原理主要涉及将商业决策逻辑与应用程序代码分离,使得业务规则可以在运行时动态管理和修改,以适应不断变化的企业环境。...Java规则引擎如Drools、JESS等提供了实现这一目标的框架和工具。

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

    Java规则引擎是一种强大的工具,它允许程序在运行时根据预定义的规则进行决策。规则引擎的核心概念是将业务逻辑从应用程序代码中分离出来,使得业务规则可以被独立地创建、修改和管理。这种方式大大提高了软件的灵活...

    Java规则引擎相关论文_Java规则引擎_

    Java规则引擎是一种强大的工具,它允许程序在运行时执行基于业务规则的决策。这些规则可以是复杂的逻辑,涉及多个条件和操作,而规则引擎则负责管理和执行这些规则,使得业务逻辑与应用程序的主体代码分离,提高了...

    Java规则引擎---Drools的介绍及应用

    ### Java规则引擎——Drools的深度解析与应用探索 #### 一、规则引擎与基于规则的专家系统 规则引擎,作为软件开发领域的一项关键技术,其核心在于模仿人类的决策过程,通过预定义的规则集对输入数据进行分析,...

    java规则引擎开发教程全

    【Java规则引擎开发教程全】 Java规则引擎是一种用于在应用程序中动态执行业务规则的技术,它允许开发者将业务逻辑从核心代码中分离出来,方便管理和维护。Drools是一款基于Java的开源规则引擎,广泛用于构建复杂的...

    基于Java的规则引擎--java规则引擎

    - **JBoss Drools**:Drools是开源的Java规则引擎,它基于MVEL和Java的规则语言,提供强大的规则推理和工作流功能。 - **JESS**:JESS(Java Expert System Shell)是一个基于Lisp的规则引擎,虽然不如前两者流行...

    java规则引擎

    总的来说,Java规则引擎是应对复杂业务逻辑动态变化的解决方案,它通过规则引擎API和标准化的规则语言,促进了业务规则与应用程序的解耦,提高了软件的灵活性和可维护性。未来的发展趋势可能会更加注重规则语言的...

    Java规则引擎技术研究

    ### Java规则引擎技术研究 #### 摘要与引言 Java规则引擎作为一种重要的软件组件,在现代企业级应用中扮演着关键角色。它能够帮助企业在不断变化的市场环境中快速适应新的业务需求,通过将业务逻辑从核心代码中...

    Java规则引擎技术研究.pdf

    "Java规则引擎技术研究" Java规则引擎技术是指使用Java语言来实现的规则引擎技术,它提供了高效的规则处理算法,能够对企业业务逻辑与规章制度等规则进行演绎、归纳和处理。 Java规则引擎技术的研究和应用是为了...

    Java规则引擎的工作原理及其实际应用

    ### Java规则引擎的工作原理及其实际应用 #### 规则引擎技术概述 规则引擎技术作为一种灵活且高效的业务逻辑管理工具,在现代软件开发中扮演着至关重要的角色。尤其在Java社区,规则引擎的应用越来越广泛,它不仅...

    规则引擎-Java调用规则

    本篇主要介绍如何在Java环境中调用规则引擎,具体包括三种方法:Java类直接调用规则包、通过规则服务调用和通过SOAP方式调用。 1. **Java类调用规则包** 在Java项目中,首先需要配置类路径,将规则引擎的相关库...

    Java规则引擎技术研究.mht

    Java规则引擎 jrools Drools

    URULE是一款基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各.zip

    URULE是一款基于RETE算法的纯Java规则引擎,提供规则集、决策表、决策树、评分卡,规则流等各

    java规则引擎Drools基础

    Java规则引擎Drools是基于Java平台的企业级规则引擎,它允许开发者以声明式的方式定义业务规则,并在运行时高效地执行这些规则。Drools是JBOSS的一个开源项目,广泛应用于金融、保险、电信等领域,用于实现复杂的...

    Java规则引擎Drools的介绍及应用

    Java规则引擎技术的规范主要是指JSR 94(Java规则引擎 API),这是Java社区发布的旨在统一不同规则引擎之间操作的标准。JSR 94定义了一套Java应用程序接口(API),这些API允许应用程序使用规则引擎,而不需要了解...

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

    ### Java规则引擎工作原理及其应用 #### 摘要 Java规则引擎作为一种强大的技术工具,被广泛应用于现代软件开发之中,特别是在需要灵活处理业务逻辑的场景下。它能够有效地将业务决策逻辑与程序代码分离,使得业务...

Global site tag (gtag.js) - Google Analytics