论坛首页 Java版 JBoss

drools 4.0M2发布标注

浏览 1000 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-07-09 关键字: drools 规则库
 

Drools 4.0.0.MR2ReleaseNotes

 

 


引擎

规则流程

现在可以使用Eclipse GUI建立规则流程,并且保存为一个文件,这些文件然后可以用来控制规则的执行流程:

final PackageBuilder builder = new PackageBuilder();

builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.drl" ) ) );

final Package pkg = builder.getPackage();

final ProcessBuilder processBuilder = new ProcessBuilder();

processBuilder.addProcessFromFile( new InputStreamReader( getClass().getResourceAsStream( "ruleflow.rfm" ) ) );

 

final RuleBase ruleBase = getRuleBase();

ruleBase.addPackage( pkg );

ruleBase.addProcess( processBuilder.getProcesses()[0] );

通过执行执行应用过程来激活规则流:

workingMemory.startProcess( processId );

使用规则流分组属性指定规则属于哪一个规则流分组

该插件产生两个版本的规则流:

  • *.rf(规则流文件)包含完整的规则流,包括所有的图形信息如所有元素的坐标
  • *.rfm版本(规则流模型文件)只包含规则流的定义,没有图形信息

当增加规则流到ProcessBuilder中时需要使用*.rfm格式的文件,如果使用*.rf文件会引起异常“CannotResolveClassException”,因为该类中包含的图形信息不是Drools核心的一部分,不能被识别。

lock-on-active

一旦agenda-grouprule-flow-group开始激发它的规则,它不能接受指定lock-on-active属性设置为True的规则的任何更多的新事务,这有助于处理递归情况。

WorkingMemory 现在分成StatefulSession StatelessSession

WorkingMemory wm = ruleBase.newWorkingMemory()

WorkingMemory现在删除了,代替的是:

StatefulSession session = ruleBase.newStatefulSession();

StatelessSession session = ruleBase.newStatelessSession();

异步方法

StatefulSessionStatelessSession都支持异步方法对于working memory的动作和fireAllRules。使用DefaultExecutorService处理线程模型,它仅仅是建立一个新的模型。一个自定义的ExecutorService能够同通过使用RuleBaseConfiguration指定。

更简单的依赖

对于corecompiler的额外的依赖已经被消减。

stateful conways game of life

Conway's Game of Life 示例被更新,现在是完全状态的,这是最好的用来理解规则引擎的例子。

DSL的重新介绍

  • 新的改良的规则,完全的国际化支持(能够将LHSRHS混合,甚至关键字的重定义)

新的操作: "in", "not in", "memberOf", "not memberOf"

  • 示例:

Cheese( type in ( 'stilton', 'brie' ))
Cheese( type not in ( 'stilton', 'brie' ))
Cheese( type memberOf $myCheeseTypeList )
Cheese( type not memberOf $myCheeseTypeList )

新的自动的有益字段:this”现在可以用来作为约束fact的一个字段。

  • 现在你可以对fact的相等比较如下:

rule "keeps consistency"
when
$r : Relationship( $s: source, $t: target )
not( Source( this == $s ) )
then
retract( $r );
end

Fact不再需要默认的构造函数

  • 阴影Fact不再需要实现一个默认的无参数构造函数。它们现在也缓存hashcode以提高性能。

对断言和返回值的隐式绑定

  • 在断言和返回值中不再需要显式的绑定字段

Cheese( oldPrice : oldPrice, newPrice == ( oldPrice * 1.10 ) )

等同于:

Cheese( newPrice == ( oldPrice * 1.10 ) )

因为oldPrice已经被用户在断言返回值中隐式声明

BRMS

BRMS (商业规则管理系统)作为里程碑的一部分第一次可用了。这个组件有许多特性,这里只是简单的进行介绍(示例和手册在准备中)

Installation 安装

BRMS应用是一个war文件,这意味着要部署它只需要简单的将它放到部署目录下(如果你愿意使用默认设置,这是所有你需要做的)

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)

使用方法

Package配置

  • 一旦部署,使用"http:///drools-jbrms/"访问
  • 这将显示初始信息屏幕
  • 如果是第一次运行,你将进入“Admin”,并且选择“Manage Categories
    • 按你的意愿增加一些目录,它仅仅用于分类,而不是执行或任何其它用途
  • 规则需要Fact模型(对象模型)来工作,因此下一步你将需要去到Package管理特性。从这里你可以点击图标增加一个新Package
  • 为了装载一个模型,使用一个带有fact模型(API)的jar文件,你将使用在你的规则和代码中。然后点击装载新模型图标。当你在模型编辑界面时,你可以装载一个jar文件,从列表中选择之前你建立的Package名称。
  • 现在修改你刚刚建立的Package配置,以导入你刚刚装载的fact类型,并且保存更改。
  • 这时,Package配置好并准备使用

规则编制

  • 一旦你设置好至少一个目录和一个Package,你可以开始编制规则
  • 有许多种规则的格式,但从BRMS的角度来说,它们都是“assets(资产)”
  • 你通过点击规则图标(在上面)建立规则,并且输入规则名称
  • 你将不得不选择一个目录。目录提供一个观察规则的视图,将规则分开到Package中(你可以将规则显示在多个Package中),想象它们像标记一样
  • 选择“商业规则”格式
  • 这将打开一个规则建模器,它是一个导航编辑器。你可以在当前使用的package的模型上增加和修改条件和行为。当然,任何为该Package设置的DSL语法模板将有效。
  • 当前值得注意的规则格式是:
    • DSL模板规则,它是一个文本格式,能够通过在Package中定义的DSL配置使用自然语言
    • 同样也有旧的无格式的drl,对于“技术”规则——这些可以是单个规则(仅仅包含whenthen部分就是全部所需)或者许多规则的整体,像你可能在过去看到的(你不需要任何import或其它依赖,它们在package中被关注)。注意,如果规则名称没有被drl包括,它将使用”assert资产的名称
    • 你也可以装载XLS决策表。建立一个基于决策表的新的表格,然后装载,默认它与一个模板一起提供,你可以下载并整理它。
  • 当你完成了规则的编辑,你可以保存变更,或者你可以验证或“查看源码”(对有效的源代码)。
  • 你也可以从这里增加/删除目录和其它属性,如文档(如果你不确信要做什么,使用自然语言编写一个文档描述规则,然后导入它,这在后面也可以作为一个模板)。

发现素材

在导航的时候,你也可以使用规则特性,它显示被目录分组的内容,或者你可以使用Packaget特性,通过Package和规则类型查看。如果你知道一个asset资产的名称的一部分,你也可以使用查找器,开始输入一个规则名,它将返回所有匹配你输入的名称的asset列表(因此如果你有一个明智的命名规则,可以很快地发现素材)。

  • 目录能够像标签那样使用,你可以增加和删除它们,例如标记某些是脏的,这完全取决于你
  • 你也会注意到任何东西有一个状态,这也仅仅用来报告(如果你想可以选择忽略它)。

部署

  • 在你修改了一些Package中的规则后,你可以去到Package特性,并且构建整个Package
    • 如果成功,你将能够下载一个二进制的Package文件,它可以用来部署到运行时系统中
  • 你也可以取一个Package的快照进行部署。这个快照在那一点上冻结了Package,这样任何并发的改变不会影响这个Package。它也使得Package在一个URL上可见"http:///drools-jbrms/org.drools.brms.JBRMS/packages/ /"

配置(可选)

  • 默认情况下,当库第一次运行时,它将在服务运行的目录中建立一个新的数据库:这由一个"repository.xml"和一个称为"repository"的目录组成。
  • 如果你想将库放在不同位置,你可以解压war文件,查找"components.xml”文件。在那里你可以看到如何更改库的根路径到其它目录(或文件系统)
  • 如果你想使用不同的RDBMS保存库内容,那也可以在配置中设置
    • 一个简单的方式是启动库,并且让它产生一个默认的"repository.xml"
    • 然后修改"repository.xml"以使用你选择的数据库。

BRMS使用Apache Jackrabbit JCR实现作为内容存储,它有"PersistenceManagers"的概念,这些PMs支持所有在sun下的数据库(你也可以使用文件系统)。了解更多关于为你的环境配置PM的问题,请浏览Apache Jackrabbit: http://jackrabbit.apache.org/faq.html (在repository.xml已经带有一些示例)

    • 重点注意:如果你使用一个扩展的RDBMS,那么所使用的许可应当可以建立表(至少第一次,当库进行自设置时)

需求

  • 一个应用Server/Servlet容器能够与Java5一起工作,不需要和JEE5,只要Java5运行时即可
    • 这一限制在Boss AS 4.0.5JBossWeb 1.0.1上会主动检查,但是可能在Tomcat和其它容器中可以工作(可能有新增/删除的依赖在war文件中)
  • 没有扩展数据库的需要,但可以根据需要配置一个

 

   
论坛首页 Java版 JBoss

跳转论坛:
JavaEye推荐