论坛首页 Java企业应用论坛

drools 4.0M2发布标注

浏览 3598 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-09  
 

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-grouprule-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>

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

更简单的依赖<o:p></o:p>

对于corecompiler的额外的依赖已经被消减。<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>

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

新的操作: "in", "not in", "memberOf", "not memberOf"<o:p></o:p>

  • 示例: <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,对于“技术”规则——这些可以是单个规则(仅仅包含whenthen部分就是全部所需)或者许多规则的整体,像你可能在过去看到的(你不需要任何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>

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics