博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Drools源于规则引擎
阅读量:6463 次
发布时间:2019-06-23

本文共 1766 字,大约阅读时间需要 5 分钟。

一 前言 

     最早对Drools感兴趣,是起源于规则引擎.当时是希望能找一个开源工具来做一些规则的处理. 
     在官方网站上翻了半天资料,却发现Drools一直在强调它不只是一个简单的规则引擎,而是更多的引入工作流的概念. 
     之后最大的感触就是Drools牵涉到的东西比较多,甚至有一种依照Drools可以创造整个世界的感觉-- 这个世界本身不就是由各种规则/流程/事件构成的么? 这也是本文标题的由来. 
     以后会对Drools的各方面有一个比较深入的了解,因此这篇文章只是用来做简单的介绍,希望能在短时间内能让其他人对Drools做什么,怎么做,有一个直观的了解,以后遇到相关应用的场景时,能想到Drools的解决方案. 

 

二.从规则引擎的应用场景说起 

     昨天讲解PPT的时候有人问到Drools和If-else的本质区别在哪里.我想了想,还是想引用一句话来表述自己的感受.
          "南京一高职学生为了给男友发鲸鱼宝宝的短信涉嫌伪造健康证明捐精买iphone4。。。。" 

2.1 各种棋类游戏 

     象棋围棋五子棋跳棋军棋扑克牌三国杀杀人游戏强权外交等等等等.游戏本身就是规则的代名词. 
2.2 业务规则 
     超市打折,汇率计算等等等等. 
  
2.3 相通的场景 
     这些场景可能有一些相通的点,在这儿我可能总结的不会太全面,稍稍罗列一下: 
   
   

  •      单条规则相对简单
  •      规则数量相对庞大
  •      规则之间会有冲突
  •      一条规则本身会触发另一条规则
  •      规则有可能会产生变动(很多时候可能唯一需要变动的就是规则)

    
    这个时候用规则引擎来处理这些事情就相对来说容易多了.不过,Drools做的远远不止这些. 
    
三 Drools的构成.    
    目前的最新稳定版本是5.2.0.Final(23-Jun-2011). 现在由JBoss维护,分成五个模块. 
     下面就简单的介绍下每一个模块的内容,可以大致的了解下Drools的发展方向和可以用来解决问题的范畴.    
3.1 Guvnor     
     Guvnor是一个通过Web界面可以管理,更改规则的工具,也可以提供Repository的服务.(似乎各种开源软件里都会提供这样的Web管理界面,Heritrix,Nutch,AllGeography等等等等).支持Dsl和QA.  
     
3.2 Expert          
     传统的规则引擎,应该说Drools的核心,也是前身.通过Rete算法来实现模式匹配. 
     
3.3 Jbpm5 
     工作流的处理交给了JBPM5这个模块.这个模块我了解的不多,大概知道的是除了工作流之外还提供了各种各样的集成(Camel,Spring,Osgi等等,感觉这个模块本身的规划不是特别清晰).其中Camel适用于路由转发.有了解的较多的朋友可以指教一下,或者以后有时间我会再了解一下相关的内容.      
      
3.4 Fusion 
     用于做的处理.本来是不太懂CEP的,这个概念接触的不算多.不过看到了Wiki上的一个例子,大概明白一些. 
     摘录如下: 
    

规则文件的使用

 

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();  kbuilder.add(ResourceFactory.newClassPathResource("demo.drl"), ResourceType.DRL);    KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();  kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());  StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();    Employee employee=new Employee("段三品");  employee.setClockedAt(System.currentTimeMillis());    ksession.insert(employee);  ksession.fireAllRules();

 

转载于:https://www.cnblogs.com/springcloud/p/8082772.html

你可能感兴趣的文章
Tiny语言执行环境TM机源码
查看>>
PE文件之资源讲解
查看>>
windows 7/mac编译cocos2d-x-3.2*的android工程报错
查看>>
MYSQL导入导出.sql文件(转)
查看>>
git review报错一例
查看>>
Tomcat在Linux上的安装与配置
查看>>
《信息安全系统设计基础》 课程教学
查看>>
Linux平台下使用rman进行oracle数据库迁移
查看>>
全栈工程师学习Linux技术的忠告
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
C# Dictionary用法总结
查看>>
SVN服务器使用(二)
查看>>
反射获取内部类以及调用内部类方法
查看>>
C语言 - pthread
查看>>
谈Linq To Sql的优劣--纯个人观点
查看>>
HDU 4996 Revenge of LIS(DP)
查看>>
App里面如何正确显示用户头像
查看>>
DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
查看>>
Android中的PID和UID
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>