一 前言
最早对Drools感兴趣,是起源于规则引擎.当时是希望能找一个开源工具来做一些规则的处理. 在官方网站上翻了半天资料,却发现Drools一直在强调它不只是一个简单的规则引擎,而是更多的引入工作流的概念. 之后最大的感触就是Drools牵涉到的东西比较多,甚至有一种依照Drools可以创造整个世界的感觉-- 这个世界本身不就是由各种规则/流程/事件构成的么? 这也是本文标题的由来. 以后会对Drools的各方面有一个比较深入的了解,因此这篇文章只是用来做简单的介绍,希望能在短时间内能让其他人对Drools做什么,怎么做,有一个直观的了解,以后遇到相关应用的场景时,能想到Drools的解决方案.
二.从规则引擎的应用场景说起
昨天讲解PPT的时候有人问到Drools和If-else的本质区别在哪里.我想了想,还是想引用一句话来表述自己的感受. "南京一高职学生为了给男友发鲸鱼宝宝的短信涉嫌伪造健康证明捐精买iphone4。。。。"2.1 各种棋类游戏
象棋围棋五子棋跳棋军棋扑克牌三国杀杀人游戏强权外交等等等等.游戏本身就是规则的代名词. 2.2 业务规则 超市打折,汇率计算等等等等. 2.3 相通的场景 这些场景可能有一些相通的点,在这儿我可能总结的不会太全面,稍稍罗列一下:- 单条规则相对简单
- 规则数量相对庞大
- 规则之间会有冲突
- 一条规则本身会触发另一条规则
- 规则有可能会产生变动(很多时候可能唯一需要变动的就是规则)
规则文件的使用
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();