当前位置:首页 » 操作系统 » drools源码下载

drools源码下载

发布时间: 2022-11-27 16:30:54

⑴ 求Rete算法实现代码

Rete 在拉丁语中是 ”net” ,有网络的意思。 RETE 算法可以分为两部分:规则编译( rule compilation )和运行时执行( runtime execution )。
编译算法描述了规则如何在 Proction Memory 中产生一个有效的辨别网络。用一个非技术性的词来说,一个辨别网络就是用来过滤数据。方法是通过数据在网络中的传播来过滤数据。在顶端节点将会有很多匹配的数据。当我们顺着网络向下走,匹配的数据将会越来越少。在网络的最底部是终端节点( terminal nodes )。在 Dr Forgy 的 1982 年的论文中,他描述了 4 种基本节点: root , 1-input, 2-input and terminal 。下图是 Drools 中的 RETE 节点类型:

Figure 1. Rete Nodes
根节点( RootNode )是所有的对象进入网络的入口。然后,从根节点立即进入到 ObjectTypeNode 。 ObjectTypeNode 的作用是使引擎只做它需要做的事情。例如,我们有两个对象集: Account 和 Order 。如果规则引擎需要对每个对象都进行一个周期的评估,那会浪费很多的时间。为了提高效率,引擎将只让匹配 object type 的对象通过到达节点。通过这种方法,如果一个应用 assert 一个新的 account ,它不会将 Order 对象传递到节点中。很多现代 RETE 实现都有专门的 ObjectTypeNode 。在一些情况下, ObjectTypeNode 被用散列法进一步优化。

Figure 2 . ObjectTypeNodes
ObjectTypeNode 能够传播到 AlphaNodes, LeftInputAdapterNodes 和 BetaNodes 。
1-input 节点通常被称为 AlphaNode 。 AlphaNodes 被用来评估字面条件( literal conditions )。虽然, 1982 年的论文只提到了相等条件(指的字面上相等),很多 RETE 实现支持其他的操作。例如, Account.name = = “Mr Trout” 是一个字面条件。当一条规则对于一种 object type 有多条的字面条件,这些字面条件将被链接在一起。这是说,如果一个应用 assert 一个 account 对象,在它能到达下一个 AlphaNode 之前,它必须先满足第一个字面条件。在 Dr. Forgy 的论文中,他用 IntraElement conditions 来表述。下面的图说明了 Cheese 的 AlphaNode 组合( name = = “cheddar” , strength = = “strong” ):

Figure 3. AlphaNodes
Drools 通过散列法优化了从 ObjectTypeNode 到 AlphaNode 的传播。每次一个 AlphaNode 被加到一个 ObjectTypeNode 的时候,就以字面值( literal value )作为 key ,以 AlphaNode 作为 value 加入 HashMap 。当一个新的实例进入 ObjectTypeNode 的时候,不用传递到每一个 AlphaNode ,它可以直接从 HashMap 中获得正确的 AlphaNode ,避免了不必要的字面检查。
<!--[if !supportEmptyParas]-->

2-input 节点通常被称为 BetaNode 。 Drools 中有两种 BetaNode : JoinNode 和 NotNode 。 BetaNodes 被用来对 2 个对象进行对比。这两个对象可以是同种类型,也可以是不同类型。
我们约定 BetaNodes 的 2 个输入称为左边( left )和右边( right )。一个 BetaNode 的左边输入通常是 a list of objects 。在 Drools 中,这是一个数组。右边输入是 a single object 。两个 NotNode 可以完成‘ exists ’检查。 Drools 通过将索引应用在 BetaNodes 上扩展了 RETE 算法。下图展示了一个 JoinNode 的使用:

Figure 4 . JoinNode

注意到图中的左边输入用到了一个 LeftInputAdapterNode ,这个节点的作用是将一个 single Object 转化为一个单对象数组( single Object Tuple ),传播到 JoinNode 节点。因为我们上面提到过左边输入通常是 a list of objects 。
<!--[if !supportEmptyParas]-->
Terminal nodes 被用来表明一条规则已经匹配了它的所有条件( conditions )。 在这点,我们说这条规则有了一个完全匹配( full match )。在一些情况下,一条带有“或”条件的规则可以有超过一个的 terminal node 。
Drools 通过节点的共享来提高规则引擎的性能。因为很多的规则可能存在部分相同的模式,节点的共享允许我们对内存中的节点数量进行压缩,以提供遍历节点的过程。下面的两个规则就共享了部分节点:

这里我们先不探讨这两条 rule 到的是什么意思,单从一个直观的感觉,这两条 rule 在它们的 LHS 中基本都是一样的,只是最后的 favouriteCheese ,一条规则是等于 $cheddar ,而另一条规则是不等于 $cheddar 。下面是这两条规则的节点图:

Figure 5 . Node Sharing
从图上可以看到,编译后的 RETE 网络中, AlphaNode 是共享的,而 BetaNode 不是共享的。上面说的相等和不相等就体现在 BetaNode 的不同。然后这两条规则有各自的 Terminal Node 。
<!--[if !supportEmptyParas]-->
RETE 算法的第二个部分是运行时( runtime )。当一个应用 assert 一个对象,引擎将数据传递到 root node 。从那里,它进入 ObjectTypeNode 并 沿着网络向下传播。当数据匹配一个节点的条件,节点就将它记录到相应的内存中。这样做的原因有以下几点:主要的原因是可以带来更快的性能。虽然记住完全或 部分匹配的对象需要内存,它提供了速度和可伸缩性的特点。当一条规则的所有条件都满足,这就是完全匹配。而只有部分条件满足,就是部分匹配。(我觉得引擎 在每个节点都有其对应的内存来储存满足该节点条件的对象,这就造成了如果一个对象是完全匹配,那这个对象就会在每个节点的对应内存中都存有其映象。)
2. Leaps 算法:
Proction systems 的 Leaps 算法使用了一种“ lazy ”方法来评估条件( conditions )。一种 Leaps 算法的修改版本的实现,作为 Drools v3 的一部分,尝试结合 Leaps 和 RETE 方法的最好的特点来处理 Working Memory 中的 facts 。
古典的 Leaps 方法将所有的 asserted 的 facts ,按照其被 asserted 在 Working Memory 中的顺序( FIFO ),放在主堆栈中。它一个个的检查 facts ,通过迭代匹配 data type 的 facts 集合来找出每一个相关规则的匹配。当一个匹配的数据被发现时,系统记住此时的迭代位置以备待会的继续迭代,并且激发规则结果( consequence )。当结果( consequence )执行完成以后,系统就会继续处理处于主堆栈顶部的 fact 。如此反复。

rule
when
Cheese( $chedddar : name == " cheddar " )
$person : Person( favouriteCheese != $cheddar )
then
System.out.println( $person.getName() + " does likes cheddar " );
end

rule
when
Cheese( $chedddar : name == " cheddar " )
$person : Person( favouriteCheese == $cheddar )
then
System.out.println( $person.getName() + " likes cheddar " );
end

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/icefishchwd/archive/2007/01/22/1489668.aspx

⑵ drools 怎么动态配置规则

JBoss Drools的可视化规则设计工具包在Drools 4.0的时候叫drools-jbrms。
drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署为例。

第1步
按照JBoss官方提供的文档处理
删除war包中的el-api.jar
删除Tomcat的lib目录下的jsf-api.jar和jsf-impl.jar(本来不存在就不用管了)
将下载后的jboss_jsf_libs.zip解压到Tomcat的lib目录下
第2步
启动Tomcat。drools-jbrms会在Tomcat的bin目录下新建repository目录(包括很多子目录),同时会报无法启动的异常。异常信息为Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,这里我是在Tomcat/bin目录下用startup.bat启动的,如果不是这种方式repository的位置可能有所不同)

第3步
将本文提供的custom_nodetypes.xml覆盖Tomcat下的bin/repository/repository/nodetypes的同名文件。

第4步
重新启动

原因:drools-jbrms包含的某些功能在Tomcat下有问题,生成custom_nodetypes.xml时没有生成文件内容,所以报错。从网上查询,最迟2007年就有人报这个问题了。看来JBoss的对于非JBoss应用服务器的兼容问题考虑不多。

⑶ eclipse中新建了一个drools项目,将lib导入了,但始终报jar未找到

贴一下problems里面的错误

⑷ 《Java8实战》epub下载在线阅读,求百度网盘云资源

《Java 8实战》(厄马(Raoul-Gabriel Urma))电子书网盘下载免费在线阅读

链接:https://pan..com/s/1Rm1x0GetEFlztgWyPzykgg

提取码:1234

书名:Java 8实战

作者:厄马(Raoul-Gabriel Urma)

译者:陆明刚

豆瓣评分:9.2

出版社:人民邮电出版社

出版年份:2016-4-1

页数:349

内容简介:

本书全面介绍了Java 8 这个里程碑版本的新特性,包括Lambdas、流和函数式编程。有了函数式的编程特性,可以让代码更简洁,同时也能自动化地利用多核硬件。全书分四个部分:基础知识、函数式数据处理、高效Java 8 编程和超越Java 8,清晰明了地向读者展现了一幅Java 与时俱进的现代化画卷。

作者简介:

作者简介:

Raoul-Gabriel Urma

剑桥大学计算机科学博士,软件工程师,演讲者,培训师,Cambridge Coding Academy联合创始人、CEO。曾与谷歌、eBay、甲骨文和高盛集团等大公司合作,并参与过多个创业项目。撰写过十余篇经同行审阅的技术文章,并在国际会议上发表过40多篇演讲。

Mario Fusco

Red Hat高级软件工程师,负责JBoss规则引擎Drools的核心开发。拥有丰富的Java开发经验,曾领导媒体公司、金融部门等多个行业的企业级项目开发。对函数式编程和领域特定语言等有浓厚兴趣,并创建了开放源码库lambdaj。

Alan Mycroft

剑桥大学计算机实验室计算学教授,剑桥大学罗宾逊学院研究员,欧洲编程语言和系统协会联合创始人,树莓派基金会联合创始人和理事。发表过大约100篇研究论文,指导过20多篇博士论文。他的研究主要关注编程语言及其语义、优化和实施。他与业界联系紧密,曾于学术休假期间在AT&T实验室和英特尔工作,还创立了Codemist公司,该公司设计了最初的ARM C编译器Norcroft。

⑸ 求打开*.drl文件的工具

Drools开发小组近日宣布发布Drools 2.5 正式版。

Drools 是一个建立在Rete 模式匹配运算法则基础之上的准则执行引擎。Drools 的开发团队已经采用Rete这个运算法则,所以Drools 能够使用面向对象的程序设计语言,像Java、Python 以及Groovy。2005年12月,Drools 项目以及该项目的主要负责人Mark Proctor 都加入了JBOSS。

开发小组宣布,该2.5 版本将是最后一个2.x,下一个将推出3.0。

下载地址:http://docs.codehaus.org/display/DROOLS/2006/03/01/Drools+2.5+released

⑹ drools6.1的问题,kie workbench 安装好了,但是不知道怎么使用里面的guvnor

你好!这是你下载的这个软件不全面导致的。建议重新到其他正规大网站重新下载安装试试。

⑺ drools引入eclipse后报错 Could not find default Drools runtime

先不要理它,你配好后,右键你的工程,Bulid Path-->Configure Build Path-->Drools选择你配置的Drools Runtime,记得别忘记看看你的那些引用的Jar是否已经包含了,都没问题了,重新clean一下就好了。

⑻ 如何部署JBoss Drools的可视化规则设计工具包

JBoss Drools的可视化规则设计工具包在Drools 4.0的时候叫drools-jbrms。
drools-jbrms需要JDK1.5或以上版本,本文以drools 4.0.7的drools-jbrms包在Tomcat 6.0下部署为例。

第1步
按照JBoss官方提供的文档处理
删除war包中的el-api.jar
删除Tomcat的lib目录下的jsf-api.jar和jsf-impl.jar(本来不存在就不用管了)
将下载后的jboss_jsf_libs.zip解压到Tomcat的lib目录下
第2步
启动Tomcat。drools-jbrms会在Tomcat的bin目录下新建repository目录(包括很多子目录),同时会报无法启动的异常。异常信息为Caused by: javax.jcr.RepositoryException: internal error: failed to read custom node type definitions stored in custom_nodetypes.xml: Premature end of file.: Premature end of file.
(注意,这里我是在Tomcat/bin目录下用startup.bat启动的,如果不是这种方式repository的位置可能有所不同)

第3步
将本文提供的custom_nodetypes.xml覆盖Tomcat下的bin/repository/repository/nodetypes的同名文件。

第4步
重新启动

原因:drools-jbrms包含的某些功能在Tomcat下有问题,生成custom_nodetypes.xml时没有生成文件内容,所以报错。从网上查询,最迟2007年就有人报这个问题了。看来JBoss的对于非JBoss应用服务器的兼容问题考虑不多。

注:本文提供的custom_nodetypes.xml为drools-jbrms在JBoss应用服务器部署时生成的,内容如下:
<?xml version="1.0" encoding="UTF-8"?><nodeTypes xmlns:drools=".jboss.org/drools-repository/1.0" xmlns:fn=".w3.org/2005/xpath-functions" xmlns:fn_old=".w3.org/2004/10/xpath-functions" xmlns:jcr=".jcp.org/jcr/1.0" xmlns:mix=".jcp.org/jcr/mix/1.0" xmlns:nt=".jcp.org/jcr/nt/1.0" xmlns:rep="internal" xmlns:sv=".jcp.org/jcr/sv/1.0" xmlns:xs=".w3.org/2001/XMLSchema" xmlns:xml=".w3.org/XML/1998/namespace"><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:categoryNodeType" primaryItemName=""><supertypes><supertype>mix:referenceable</supertype><supertype>nt:hierarchyNode</supertype></supertypes><childNodeDefinition autoCreated="false" defaultPrimaryType="drools:categoryNodeType" mandatory="false" name="*" onParentVersion="COPY" protected="false" sameNameSiblings="false"><requiredPrimaryTypes><requiredPrimaryType>drools:categoryNodeType</requiredPrimaryType></requiredPrimaryTypes></childNodeDefinition></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:packageNodeType" primaryItemName=""><supertypes><supertype>drools:versionableNodeType</supertype><supertype>nt:folder</supertype></supertypes><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="*" onParentVersion="COPY" protected="false" requiredType="undefined"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:compiledPackage" onParentVersion="COPY" protected="false" requiredType="Binary"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:externalURI" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:header" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="true" mandatory="true" multiple="false" name="drools:archive" onParentVersion="COPY" protected="false" requiredType="Boolean"><defaultValues><defaultValue>false</defaultValue></defaultValues></propertyDefinition><childNodeDefinition autoCreated="false" defaultPrimaryType="" mandatory="false" name="*" onParentVersion="IGNORE" protected="false" sameNameSiblings="false"><requiredPrimaryTypes><requiredPrimaryType>drools:versionableAssetFolder</requiredPrimaryType></requiredPrimaryTypes></childNodeDefinition></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:assetNodeType" primaryItemName=""><supertypes><supertype>drools:versionableNodeType</supertype></supertypes><propertyDefinition autoCreated="false" mandatory="false" multiple="true" name="drools:categoryReference" onParentVersion="COPY" protected="false" requiredType="Reference"><valueConstraints><valueConstraint>drools:categoryNodeType</valueConstraint></valueConstraints></propertyDefinition><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:packageName" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:dateExpired" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:dateEffective" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="*" onParentVersion="COPY" protected="false" requiredType="undefined"/><propertyDefinition autoCreated="true" mandatory="true" multiple="false" name="drools:archive" onParentVersion="COPY" protected="false" requiredType="Boolean"><defaultValues><defaultValue>false</defaultValue></defaultValues></propertyDefinition><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:attachmentFileName" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:binaryContent" onParentVersion="COPY" protected="false" requiredType="Binary"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:content" onParentVersion="COPY" protected="false" requiredType="String"/></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:versionableAssetFolder" primaryItemName=""><supertypes><supertype>mix:versionable</supertype><supertype>nt:folder</supertype></supertypes><childNodeDefinition autoCreated="false" defaultPrimaryType="" mandatory="false" name="*" onParentVersion="IGNORE" protected="false" sameNameSiblings="false"><requiredPrimaryTypes><requiredPrimaryType>drools:versionableNodeType</requiredPrimaryType></requiredPrimaryTypes></childNodeDefinition></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:versionableNodeType" primaryItemName=""><supertypes><supertype>mix:versionable</supertype><supertype>nt:hierarchyNode</supertype></supertypes><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:stateReference" onParentVersion="COPY" protected="false" requiredType="Reference"><valueConstraints><valueConstraint>drools:stateNodeType</valueConstraint></valueConstraints></propertyDefinition><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:checkinComment" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:createdDate" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:versionNumber" onParentVersion="COPY" protected="false" requiredType="Long"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:title" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:lastModified" onParentVersion="COPY" protected="false" requiredType="Date"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:lastContributor" onParentVersion="COPY" protected="false" requiredType="String"><defaultValues><defaultValue/></defaultValues></propertyDefinition><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:creator" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:type" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:source" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:subject" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:relation" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:rights" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:coverage" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="false" multiple="false" name="drools:publisher" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:description" onParentVersion="COPY" protected="false" requiredType="String"/><propertyDefinition autoCreated="false" mandatory="true" multiple="false" name="drools:format" onParentVersion="COPY" protected="false" requiredType="String"/></nodeType><nodeType hasOrderableChildNodes="false" isMixin="false" name="drools:stateNodeType" primaryItemName=""><supertypes><supertype>mix:referenceable</supertype><supertype>nt:hierarchyNode</supertype></supertypes></nodeType></nodeTypes>

热点内容
ifconfiglinux 发布:2024-05-06 03:47:59 浏览:532
c语言开发集成环境 发布:2024-05-06 03:47:06 浏览:607
脚本uzi比赛视频 发布:2024-05-06 03:46:19 浏览:822
php给文本框赋值 发布:2024-05-06 03:21:24 浏览:26
androidjsonkey 发布:2024-05-06 03:07:31 浏览:732
python主线程子线程 发布:2024-05-06 03:07:20 浏览:764
android系统截屏 发布:2024-05-06 02:57:51 浏览:777
android居左 发布:2024-05-06 02:40:26 浏览:45
网页设置的密码如何删除 发布:2024-05-06 02:20:30 浏览:926
如何查看snmp配置信息 发布:2024-05-06 02:19:48 浏览:489