.xyz做网站怎么样,中国网站建设公司排行,wordpress购买会员升级,凡科网是干嘛用的jboss drools这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是#xff1a;SAP收购了我公司当前的规则引擎#xff0c;而Drools是我们将寻找的另一种选择#xff0c;只要有人有能力提高概念验证的能力。 尽管似乎有大量的文档#xff0c;但是我总是会通过示例来发… jboss drools 这篇文章是关于我如何掌握JBoss Drools的 。 其背后的原因是SAP收购了我公司当前的规则引擎而Drools是我们将寻找的另一种选择只要有人有能力提高概念验证的能力。 尽管似乎有大量的文档但是我总是会通过示例来发现它是有帮助的这就是我在这里要做的事情。乍一看流口水令人生畏它由以下内容组成 Drools Expert 规则引擎 作为开发人员这是我开始的地方它们的实际规则和实现。 我稍后将讨论的其他部分是 Drools Guvnor BRMS / BPMS 流口水流程 流程/工作流程 Drools Fusion 事件处理/时间推理 Drools Planner 自动计划 因此开始。 首先我只想弄湿我只下载Eclipse插件和二进制文件 需要安装Eclipse插件用于更新站点 。 将二进制文件解压缩到目录然后将Eclipse插件设置指向该目录。 eclipse插件将允许您创建一个Drools项目其中包括“ Drools库”但是如果您正在使用Maven则需要指向Drools依赖项的JBoss版本库 KnowledgeRuntimeLoggerFactory需要XStream您可以从中获取标准的Maven回购 以下是我的POM project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelversion4.0.0/modelVersiongroupIdjavaitzen.drools/groupIdartifactidLearningToDrool/artifactIdversion0.0.1-SNAPSHOT/versionbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationsource1.6/sourcetarget1.6/target/configuration/plugin/plugins/buildpropertiesdrools.version5.1.1/drools.version/propertiesrepositoriesrepositorynameJBoss/nameidJBoss/idurlhttp://repository.jboss.org/nexus/content/groups/public-jboss//url/repository/repositoriesdependenciesdependencygroupIdorg.drools/groupIdartifactIddrools-core/artifactIdversion${drools.version}/version/dependencydependencygroupIdorg.drools/groupIdartifactiddrools-compiler/artifactIdversion${drools.version}/version/dependencydependencygroupIdorg.drools/groupIdartifactIddrools-api/artifactIdversion${drools.version}/version/dependencydependencygroupIdcom.thoughtworks.xstream/groupIdartifactIdxstream/artifactIdversion1.3.1/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.8.1/versionscopetest/scope/dependency/dependencies/project 要添加规则请在src / main / rules上单击鼠标右键-新建-其他…Drools / Rule资源请确保选择“单个规则”。 这给您留下了一个空的drl文件 package javaitzen.drools.rulesrule A stand alone rulewhen#conditionsthen #actions
end 为了理解和使用规则语言我阅读了Drools文档和示例项目。 实际上让我有点了解的是基本语法以及规则中对象的处理方式我确实很难找到任何可以简单解释其内容的内容因此我将对其进行介绍。 关于变量名的注释..它们不需要带有$但是在示例中使用了它没有它很快就会变得很混乱。 现在逐步了解规则的各个部分 package javaitzen.drools.rulesimport javaitzen.drools.RoolVOrule Basic Rulewhen$vo : RoolVO( stringValue Learning to drool, $booleanVal : booleanValue )eval( $booleanVal )then System.out.println( First Rule ); $vo.setStringValue(Done.);
end 包和import关键字很容易解释在when之后发生的事情不是。 实际发生的“ $ voRoolVOstringValue “学习流口水”$ booleanValbooleanValue”中发生的事情是 stringValue “学习流口水” –这是一个约束它使我们能够找到知识库中所有具有getStringValue值等于“学习流口水”的RoolVO对象。 如果有多个符合RoolVO的实例我们将多次执行此规则这些实例也称为匹配对象。 您还可以有多个约束以“”分隔。 $ booleanValbooleanValue –我们正在声明一个名为boolean的新布尔变量类型为$ booleanVal并从isBooleanValue获取其值。 $ voRoolVO –我们正在声明一个名为$ vo的RoolVO类型的新局部变量。 下一行 “ eval$ booleanVal” –计算布尔变量对于要调用的规则的“ then”部分需要将其评估为true。 然后 System.out.println“第一条规则” –标准系统输出。 $ vo.setStringValue“ Done。”; –将与约束匹配的当前RoolVO对象上的String值设置为Done。 执行基本规则所需的主要类/接口如下 org.drools.KnowledgeBase及其工厂 org.drools.KnowledgeBaseFactory 这是所有相关知识定义的存储库 它包含规则流程功能类型模型。 org.drools.builder.KnowledgeBuilder及其工厂org.drools.builder.KnowledgeBuilderFactory 将源文件.drl.xsl转换/解析为KnowledgeBase可以理解的KnowledgePack。 由知识库创建的StatefulKnowledgeSession .newStatefulKnowledgeSession; 该会话用于与实际规则引擎进行通信。 引用Drools JavaDocs StatefulKnowledgeSession是与规则引擎进行交互的最常用方法。 StatefulKnowledgeSession允许应用程序与引擎建立迭代对话对于同一组数据推理过程可能会被多次触发。 我为前面描述的规则编写了一个简单的测试。 package javaitzen.drools;import static org.junit.Assert.assertEquals;import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.junit.Before;
import org.junit.Test;public class TestBasicRules {private KnowledgeBase kbase;Beforepublic void setup() {KnowledgeBuilder kbuilder KnowledgeBuilderFactory.newKnowledgeBuilder();kbuilder.add(ResourceFactory.newClassPathResource(basic.drl), ResourceType.DRL);KnowledgeBuilderErrors errors kbuilder.getErrors();if (errors.size() 0) {for (KnowledgeBuilderError error: errors) {System.err.println(error);}throw new IllegalArgumentException(Could not parse knowledge.);}kbase KnowledgeBaseFactory.newKnowledgeBase();kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());}Testpublic void testBasic() {StatefulKnowledgeSession ksession kbase.newStatefulKnowledgeSession();KnowledgeRuntimeLogger logger KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, test);RoolVO vo new RoolVO();vo.setStringValue(Learning to drool);vo.setBooleanValue(true);ksession.insert(vo);ksession.fireAllRules();for (Object o: ksession.getObjects()) {if(o instanceof RoolVO) {assertEquals(Done., ((RoolVO) o).getStringValue());}} logger.close();}} 老实说从我在第一个任务中所见Drools并不像Quickrules那样直观。 但是在下面我将开始研究规则流决策表功能以及指导规则的使用 那些与DSL特定域语言构造合作的人希望确实允许创建更直观的规则。 以前我经历了基本语法和要求以开发和测试规则。 现在扩展一下Drools文档实际上是相当不错的只有一小部分所以我将尝试仅关注一些主要主题。 首先我需要做一些事情以使规则能够使用maven从您的测试中运行默认情况下.drls不在类路径中一种简单的解决方法是将以下内容添加到POM中 buildresourcesresourcedirectorysrc/main/rules/directory/resource/resources
/build 现在更多规则场景和用法 集合 查询a的内容可以通过2种方式完成contains和memberOf区别在于与memberOf一起使用的集合必须是变量。 DRL rule Use a Collectionwhen$vo : RoolVO( listValue contains items )then $vo.setStringValue(Done.);logger.log(Level.INFO,Used a collection);
end 常用表达 您还可以将正则表达式与关键字Matches和Not Matches一起用作选择条件。 DRL rule Use a Regular Expressionwhen$vo : RoolVO( stringValue matches (0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d))then $vo.setStringValue(Done.);logger.log(Level.INFO,Found the date with a regular expression dd/mm/yyyy);
end 全局变量 您可以定义全局变量不应在代码中有时使用它们以在方法之间或在这种情况下在规则之间传递信息。 而是应使用它们来提供规则使用的数据或服务。 一个示例可能是某个特定于应用程序的记录器或者可能是在应用程序启动时加载的恒定查找数据。 考试 public class TestBasicRules {private KnowledgeBase kbase;private Logger javaLogger Logger.getLogger(testLogger);Testpublic void testGlobal() {StatefulKnowledgeSession ksession kbase.newStatefulKnowledgeSession();RoolVO vo new RoolVO();vo.setStringValue(Global);ksession.insert(vo);ksession.setGlobal(logger, javaLogger);ksession.fireAllRules();checkDone(ksession); } DRL package javaitzen.drools.rulesimport javaitzen.drools.RoolVO
import java.util.logging.Levelglobal java.util.logging.Logger logger;rule Use a Global when$vo : RoolVO( stringValue Global)then $vo.setStringValue(Done.);logger.log(Level.INFO,Logging with a global);
end 规则属性 根据规则您可以指定属性其中有许多。 我只会提到几个方便的例子引用官方文档 无环 默认值false 类型布尔型 当规则的结果修改了事实后可能导致规则再次激活从而导致递归。 将no-loop设置为true意味着将忽略为当前数据集创建激活的尝试。 显着性 默认值0 类型整数 显着性是一种优先级形式在激活队列中对具有较高显着性值的规则进行排序时将赋予它们较高的优先级。 方言 默认值由程序包指定 类型字符串 可能的值“ java”或“ mvel” 该方言在LHS或RHS代码块中的任何代码表达式中都使用了该语言。 当前有两种方言可用Java和MVEL。 虽然可以在包级别指定方言但此属性允许包定义被规则覆盖。 生效日期 默认值不适用 类型字符串包含日期和时间定义 仅当当前日期和时间在日期有效属性之后时规则才能激活。 日期过期 默认值不适用 类型字符串包含日期和时间定义 如果当前日期和时间在date-expires属性之后则无法激活规则。 指导规则 指导性规则编辑器似乎允许您在代码中可以做的所有事情无论是视觉上还是对于那些非开发人员而言都可能更直观。 唯一需要做的就是确保将要使用的对象导入到.package中与创建的.brl文件相同的位置。 决策表 我认为世界实际上是在电子表格上运行的。 我们都喜欢认为它仅是因为我们和我们的高级应用程序才起作用但事实是与任何其他单个应用程序相比全世界都将错失电子表格。 满足我们需求的业务人员了解电子表格其中一些表格比我们的开发人员更好这是决策表上最大的一笔奖励。 乍一看Drools决策表看上去确实不像Quickrules那样简单地交付给业务用户但实际上它被清晰地分为“代码”和“数据”。 现在将决策表分解为各个部分…… 在创建决策表时eclipse插件为您提供了一个示例我将通过该示例进行工作。 C2关键字规则集仅说明此电子表格是一个规则集程序包。 D2规则集程序包名称。 在此行下您可以指定以下可选关键字 顺序的–右边的单元格可以为true或false。 如果为true则使用显着性来确保规则从上到下触发。 导入–右侧的单元格包含要导入的类的逗号分隔列表。 变量–右边的单元格可以包含Drools支持的全局声明。 这是一种类型后跟一个变量名。 如果需要多个变量请用逗号分隔。 C3 / D4注释标题和实际注释。 C5RuleTable关键字和名称。 “ RuleTable”关键字必须出现在第一个条件列的顶部。 您可以在工作表上有多个规则表它们必须仅由一行分隔。 C6将列标记为CONDITION列G6为ACTION执行此操作。 您需要至少一个表才有效。 如果“条件”列中没有数据则该条件不适用。 其他列可选关键字是 优先级–这表明该列的值将设置显着性 持续时间–这将设置规则行的持续时间值。 NO-LOOP –与drl中的相同它指定是否不允许循环规则。 C7该行中的此列和后续列定义规则表中引用的实际变量。 C8行中的此列和后续列指定我们从何处获取数据。 第9行和B列只是标签/标题使数据更易于理解可以隐藏所有其他字段和列以免吓到“技术含量较低”的人。 然后B9内的表就是非开发人员定义的特定规则数据希望直接从规范中定义。 我已经将此项目上载到我的Google代码项目中以防有人需要。 我的决策表有一个小问题因为我是在家里而不是在Microsoft Office上运行OpenOffice该插件需要Excel因此它在我的项目中留下了一个难看的红色X但是它在IDE外部可以很好地打开并且仍然可以在Maven中进行编译。 在下一篇文章中我将看一看“规则流”然后开始处理古弗诺尔怪兽 参考 学习流口水……第1部分和学习流口水……第2部分来自我们的JCG合作伙伴 Zen博客中的Zen领域的 Brian Du Preez。 翻译自: https://www.javacodegeeks.com/2012/02/jboss-drools-getting-started.htmljboss drools