Drools <st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.0.0</st1:chsdate>.MR2ReleaseNotes<o:p></o:p>
|
<o:p> </o:p>
|
<o:p> </o:p>
|
引擎<o:p></o:p>
规则流程<o:p></o:p>
现在可以使用Eclipse GUI建立规则流程,并且保存为一个文件,这些文件然后可以用来控制规则的执行流程:<o:p></o:p>
final PackageBuilder builder = new PackageBuilder();<o:p></o:p>
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) );<o:p></o:p>
final Package pkg = builder.getPackage();<o:p></o:p>
final ProcessBuilder processBuilder = new ProcessBuilder();<o:p></o:p>
processBuilder.addProcessFromFile( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rfm" ) ) );<o:p></o:p>
<o:p> </o:p>
final RuleBase ruleBase = getRuleBase();<o:p></o:p>
ruleBase.addPackage( pkg );<o:p></o:p>
ruleBase.addProcess( processBuilder.getProcesses()[0] );<o:p></o:p>
通过执行执行应用过程来激活规则流:<o:p></o:p>
workingMemory.startProcess( processId );<o:p></o:p>
使用规则流分组属性指定规则属于哪一个规则流分组<o:p></o:p>
该插件产生两个版本的规则流:<o:p></o:p>
- *.rf(规则流文件)包含完整的规则流,包括所有的图形信息如所有元素的坐标<o:p></o:p>
- *.rfm版本(规则流模型文件)只包含规则流的定义,没有图形信息<o:p></o:p>
当增加规则流到ProcessBuilder中时需要使用*.rfm格式的文件,如果使用*.rf文件会引起异常“CannotResolveClassException”,因为该类中包含的图形信息不是Drools核心的一部分,不能被识别。<o:p></o:p>
lock-on-active <o:p></o:p>
一旦agenda-group或rule-flow-group开始激发它的规则,它不能接受指定lock-on-active属性设置为True的规则的任何更多的新事务,这有助于处理递归情况。<o:p></o:p>
WorkingMemory 现在分成StatefulSession 和StatelessSession<o:p></o:p>
WorkingMemory wm = ruleBase.newWorkingMemory()<o:p></o:p>
WorkingMemory现在删除了,代替的是: <o:p></o:p>
StatefulSession session = ruleBase.newStatefulSession();<o:p></o:p>
StatelessSession session = ruleBase.newStatelessSession();<o:p></o:p>
异步方法<o:p></o:p>
StatefulSession和StatelessSession都支持异步方法对于working memory的动作和fireAllRules。使用DefaultExecutorService处理线程模型,它仅仅是建立一个新的模型。一个自定义的ExecutorService能够同通过使用RuleBaseConfiguration指定。<o:p></o:p>
更简单的依赖<o:p></o:p>
对于core和compiler的额外的依赖已经被消减。<o:p></o:p>
stateful <st1:city w:st="on"><st1:place w:st="on">conways</st1:place></st1:city> game of life<o:p></o:p>
Conway's Game of Life 示例被更新,现在是完全状态的,这是最好的用来理解规则引擎的例子。 <o:p></o:p>
DSL的重新介绍<o:p></o:p>
- 新的改良的规则,完全的国际化支持(能够将LHS和RHS混合,甚至关键字的重定义)<o:p></o:p>
新的操作: "in", "not in", "memberOf", "not memberOf"<o:p></o:p>
Cheese( type in ( 'stilton', 'brie' ))
Cheese( type not in ( 'stilton', 'brie' ))
Cheese( type memberOf $myCheeseTypeList )
Cheese( type not memberOf $myCheeseTypeList ) <o:p></o:p>
新的自动的有益字段:“this”现在可以用来作为约束fact的一个字段。<o:p></o:p>
- 现在你可以对fact的相等比较如下: <o:p></o:p>
rule "keeps consistency"
when
$r : Relationship( $s: source, $t: target )
not( Source( this == $s ) )
then
retract( $r );
end <o:p></o:p>
Fact不再需要默认的构造函数<o:p></o:p>
- 阴影Fact不再需要实现一个默认的无参数构造函数。它们现在也缓存hashcode以提高性能。<o:p></o:p>
对断言和返回值的隐式绑定<o:p></o:p>
- 在断言和返回值中不再需要显式的绑定字段<o:p></o:p>
Cheese( oldPrice : oldPrice, newPrice == ( oldPrice * 1.10 ) ) <o:p></o:p>
等同于: <o:p></o:p>
Cheese( newPrice == ( oldPrice * 1.10 ) ) <o:p></o:p>
因为oldPrice已经被用户在断言返回值中隐式声明<o:p></o:p>
BRMS<o:p></o:p>
BRMS (商业规则管理系统)作为里程碑的一部分第一次可用了。这个组件有许多特性,这里只是简单的进行介绍(示例和手册在准备中) <o:p></o:p>
Installation 安装<o:p></o:p>
BRMS应用是一个war文件,这意味着要部署它只需要简单的将它放到部署目录下(如果你愿意使用默认设置,这是所有你需要做的)<o:p></o:p>
The BRMS application itself is a war file, this means deploying it can be as simple as dropping it into an deploy directory (if you are happy with defaults, thats all you need to do) <o:p></o:p>
使用方法<o:p></o:p>
Package配置<o:p></o:p>
- 一旦部署,使用"http://<your server=""></your>/drools-jbrms/"访问<o:p></o:p>
- 这将显示初始信息屏幕<o:p></o:p>
- 如果是第一次运行,你将进入“Admin”,并且选择“Manage Categories”<o:p></o:p>
- 按你的意愿增加一些目录,它仅仅用于分类,而不是执行或任何其它用途<o:p></o:p>
- 规则需要Fact模型(对象模型)来工作,因此下一步你将需要去到Package管理特性。从这里你可以点击图标增加一个新Package。<o:p></o:p>
- 为了装载一个模型,使用一个带有fact模型(API)的jar文件,你将使用在你的规则和代码中。然后点击装载新模型图标。当你在模型编辑界面时,你可以装载一个jar文件,从列表中选择之前你建立的Package名称。<o:p></o:p>
- 现在修改你刚刚建立的Package配置,以导入你刚刚装载的fact类型,并且保存更改。<o:p></o:p>
- 这时,Package配置好并准备使用<o:p></o:p>
规则编制<o:p></o:p>
- 一旦你设置好至少一个目录和一个Package,你可以开始编制规则<o:p></o:p>
- 有许多种规则的格式,但从BRMS的角度来说,它们都是“assets(资产)”<o:p></o:p>
- 你通过点击规则图标(在上面)建立规则,并且输入规则名称<o:p></o:p>
- 你将不得不选择一个目录。目录提供一个观察规则的视图,将规则分开到Package中(你可以将规则显示在多个Package中),想象它们像标记一样<o:p></o:p>
- 选择“商业规则”格式<o:p></o:p>
- 这将打开一个规则建模器,它是一个导航编辑器。你可以在当前使用的package的模型上增加和修改条件和行为。当然,任何为该Package设置的DSL语法模板将有效。<o:p></o:p>
- 当前值得注意的规则格式是:<o:p></o:p>
- DSL模板规则,它是一个文本格式,能够通过在Package中定义的DSL配置使用自然语言<o:p></o:p>
- 同样也有旧的无格式的drl,对于“技术”规则——这些可以是单个规则(仅仅包含when和then部分就是全部所需)或者许多规则的整体,像你可能在过去看到的(你不需要任何import或其它依赖,它们在package中被关注)。注意,如果规则名称没有被drl包括,它将使用”assert资产”的名称<o:p></o:p>
- 你也可以装载XLS决策表。建立一个基于决策表的新的表格,然后装载,默认它与一个模板一起提供,你可以下载并整理它。<o:p></o:p>
- 当你完成了规则的编辑,你可以保存变更,或者你可以验证或“查看源码”(对有效的源代码)。<o:p></o:p>
- 你也可以从这里增加/删除目录和其它属性,如文档(如果你不确信要做什么,使用自然语言编写一个文档描述规则,然后导入它,这在后面也可以作为一个模板)。<o:p></o:p>
发现素材<o:p></o:p>
在导航的时候,你也可以使用规则特性,它显示被目录分组的内容,或者你可以使用Packaget特性,通过Package和规则类型查看。如果你知道一个asset资产的名称的一部分,你也可以使用查找器,开始输入一个规则名,它将返回所有匹配你输入的名称的asset列表(因此如果你有一个明智的命名规则,可以很快地发现素材)。<o:p></o:p>
- 目录能够像标签那样使用,你可以增加和删除它们,例如标记某些是脏的,这完全取决于你<o:p></o:p>
- 你也会注意到任何东西有一个状态,这也仅仅用来报告(如果你想可以选择忽略它)。<o:p></o:p>
部署<o:p></o:p>
- 在你修改了一些Package中的规则后,你可以去到Package特性,并且构建整个Package<o:p></o:p>
- 如果成功,你将能够下载一个二进制的Package文件,它可以用来部署到运行时系统中<o:p></o:p>
- 你也可以取一个Package的快照进行部署。这个快照在那一点上冻结了Package,这样任何并发的改变不会影响这个Package。它也使得Package在一个URL上可见"http://<your server=""></your>/drools-jbrms/org.drools.brms.JBRMS/packages/
<packagename></packagename>
/<snapshotname></snapshotname>"<o:p></o:p>
配置(可选)<o:p></o:p>
- 默认情况下,当库第一次运行时,它将在服务运行的目录中建立一个新的数据库:这由一个"repository.xml"和一个称为"repository"的目录组成。<o:p></o:p>
- 如果你想将库放在不同位置,你可以解压war文件,查找"components.xml”文件。在那里你可以看到如何更改库的根路径到其它目录(或文件系统)<o:p></o:p>
- 如果你想使用不同的RDBMS保存库内容,那也可以在配置中设置<o:p></o:p>
- 一个简单的方式是启动库,并且让它产生一个默认的"repository.xml"。<o:p></o:p>
- 然后修改"repository.xml"以使用你选择的数据库。<o:p></o:p>
BRMS使用Apache Jackrabbit JCR实现作为内容存储,它有"PersistenceManagers"的概念,这些PMs支持所有在sun下的数据库(你也可以使用文件系统)。了解更多关于为你的环境配置PM的问题,请浏览Apache Jackrabbit: http://jackrabbit.apache.org/faq.html (在repository.xml已经带有一些示例)<o:p></o:p>
- 重点注意:如果你使用一个扩展的RDBMS,那么所使用的许可应当可以建立表(至少第一次,当库进行自设置时)<o:p></o:p>
需求<o:p></o:p>
- 一个应用Server/Servlet容器能够与Java5一起工作,不需要和JEE5,只要Java5运行时即可<o:p></o:p>
- 这一限制在Boss AS <st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.0.5</st1:chsdate>和JBossWeb 1.0.1上会主动检查,但是可能在Tomcat和其它容器中可以工作(可能有新增/删除的依赖在war文件中)<o:p></o:p>
- 没有扩展数据库的需要,但可以根据需要配置一个<o:p></o:p>
<o:p> </o:p>
分享到:
相关推荐
Drools4.0是规则引擎Drools的重大升级,带来了显著的改进和新功能,旨在提高其在业务逻辑处理中的效能和灵活性。这个版本针对语言表达式、引擎性能和工具实用性进行了全方位优化,为开发者提供了更为强大的规则管理...
### Drools4.0新特性概览 Drools4.0是继Drools3.0.x系列之后的一次重大更新,不仅在语言表达、引擎性能,还有工具实用性上进行了全面的提升,引入了一系列令人瞩目的新特性。以下是Drools4.0更新的关键点: #### 1...
《Drools4.0官方使用手册中文》与《Drools5规则引擎开发教程.pdf》是两个关于Drools规则引擎的重要参考资料。Drools是一个开源的业务规则管理系统(BRMS),它允许开发者通过规则语言来实现复杂的业务逻辑,以此提高...
A.I.(Artificial Intelligence)是一个关注于“使计算机像人类一样思考“的广泛的研究领域,包括Neural Networks(神经...Drools是一个使用基于规则的方法实现的专家系统的规则引擎,更准确的说属于产生式规则系统。
【Drools4.0申请信用卡web例子】是一个基于规则引擎Drools 4.0的Web应用程序示例,它展示了如何将业务规则集成到Web应用程序中,以便于处理信用卡申请审批这样的复杂业务流程。Drools是一个强大的、开源的Java规则...
【Drools 4.0 知识点详解】 Drools 4.0 是一个重要的更新,相较于之前的 Drools 3.0.x 版本,它在多个方面进行了重大改进,包括语言表达式、引擎性能、工具实用性及业务规则管理系统(BRMS)。以下将详细阐述这些...
antlr-runtime.jar drools-compiler.jar drools-core.jar drools-decisiontables.jar drools-jsr94.jar droolsService.jar jsr94.jar jxl.jar mvel.jar xpp3.jar
1.2. 从 Drools3.0.x 向 Drools4.0.x 更新的提示 1.2.1. API 变更 升级到新版本时,开发者需要注意API的变更,可能需要调整代码以适应新的接口。Drools 4.0 对一些旧的API进行了废弃,引入了新的API来替代,以保持...
### Drools规则引擎4.0中文使用手册知识点详解 #### 一、Drools 4.0概述 **Drools 4.0**作为从Drools 3.0.x系列以来的重大更新版本,引入了一系列重要的改进和新特性。这些更新不仅包括语言表达式的增强、核心引擎...
《Drools 4.0 开发框架详解》 Drools 是一个强大的规则引擎,它基于Java语言,提供了一套完整的业务规则管理和执行的解决方案。在“Drools.jar”这个压缩包中,包含了Drools 4.0版本的所有核心组件,这将为开发者...
### 规则引擎Drools使用手册:4.0版更新要点详解 #### 一、Drools 4.0新特性概览 Drools 4.0是一次重要的更新,相较于之前的Drools 3.0.x系列,在语言表达、引擎性能以及工具实用性等方面都有显著提升。以下为此次...