有没有办法记录/监视Drools规则集中的规则花费的时间?
有没有办法确保一个规则不会被执行多次(在我的情况下似乎正在发生)
改善Drools表现的一般准则是什么?
目前,我正在使用一个带有100个奇数规则的DRL文件。
您需要的任何其他信息都将提供。
我想基于使用决策表的drools中越来越少的值来实现简单的规则.
在drl中实现规则很容易,例如:
rules "less than"
when Example(value < 10)
then
System.out.println("Less than 10")
end
rules "equals"
when Example(value = 10)
then
System.out.println("Equals 10")
end
rules "greater than"
when Example(value > 10)
then
System.out.println("Greater than 10")
end
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能将它翻译成drools的决策表呢?到目前为止我看到的所有例子都是在条件单元格中进行比较.甚至可以在价值单元格中进行比较吗?
我见过的所有例子都是以下格式:
CONDITION | ACTION
Example |
value |
-----------------------------------|-------------------------------------
10 | System.out.println("equals to 10")
Run Code Online (Sandbox Code Playgroud)
但这仅适用于1规则,并且完成以下操作具有不同的含义:
CONDITION | CONDITION | CONDITION | ACTION
Example
value | value > $1 | value < $1 |
-----------+------------+------------+----------------
10 | 10 | 10 | ???
Run Code Online (Sandbox Code Playgroud)
甚至有可能做到以下几点?
CONDITION …
Run Code Online (Sandbox Code Playgroud) 我们正在使用JBoss Drools将一些特别容易在我们正在构建的服务中更改业务逻辑的外部化.
这些规则可以由我们的开发人员创建和维护,这非常有效,我们拥有良好的集成和集成工作流程.
我们希望将其用途扩展到需要非常高级别定制的新服务.基本上,"专家用户"需要能够设置两种不同的规则:
"标准"规则 - 这些是我们知道的常见要求的几乎隐含的规则,我们可以构建用于设置的UI,例如仅允许在两个日期之间进行某些操作等.
"自定义"规则 - 完全脱离墙要求尽管我们可以尝试并预期我们宁愿让人们编写并测试他们自己的规则:)
我的问题是,是否有可能(实际上还有什么可以作为例子)将Drools用于1和2?基本上,要有一个固定的UI应用程序作者Drools规则有效并且在我们的UI中嵌入了"自由文本"规则编辑器?
任何建议赞赏!
我是业务规则世界的新手,但我认为我已经理解了Drools Expert和Drools Guvnor的概念,但是我仍然有点混淆了如何/何时/为什么使用Guvnor与Expert相比.而且,他们是否相互排斥或者是否有能力甚至更愿意并肩工作.下面是一些突出的主题,这些主题可以解释我的问题背后的一些解释,主要集中在应用程序的可维护性上.
Guvnor是否具有Expert中可用的所有功能以及更多功能?
我知道Guvnor是业务规则管理系统(BRMS),它控制存储(包括版本控制)规则和公开服务以使用其他应用程序.Guvnor包含用于生成规则的UI(文本和图形)以及用于运行它们的引擎,因此从这个意义上讲,我猜它包含Expert系统的所有功能.根据我的要求,我很确定Guvnor是我需要的,但是之后我还需要Drools Expert吗?
或者换句话说,Drools Expert是否提供了Guvnor中没有的东西?
Guvnor中的测试规则
我见过的关于Drools的许多教程都是从TDD示例开始的,其中规则是使用简单的jUnit测试进行测试的.一旦将规则导入Guvnor(或者只是在那里生成),有没有办法为它使用/编写单元测试?
是否应该仅通过公开接口(REST)进行测试?
如果系统的用户要开发自己的规则,我不希望他们编写任何测试.主要关注"核心"规则及其可维护性.
如果是"核心"规则,它们是否应存储在版本控制系统中,并在整个系统的预定更新中导入Guvnor?在这种情况下,可以为这些规则编写单元测试,并在构建周期中自动执行.
提前致谢.
如果有人能向我解释为什么这是非法的,我将不胜感激:
rule "some rule name"
when
$a : A($bset : bset)
$bset contains B(x == "hello")
then
//do something
end
Run Code Online (Sandbox Code Playgroud)
哪里:
public class A {
private Set<B> bset = new HashSet<B>();
//getters and setters for bset
//toString() and hashCode for A
public static class B {
private String x
//getters and setters for x
//toString() and hashCode() for B
}
}
Run Code Online (Sandbox Code Playgroud)
来自Drools eclipse插件的错误不是很有帮助.它提供以下错误:
[ERR 102]第23:16行在规则"某些规则名称"中输入'包含'不匹配
该错误出现在"bset contains ..."的行上
我已经搜索了Drools文档,以及我所拥有的一本书,并且没有发现这些例子在这方面非常具有说明性.
运行简单的helloworld示例drools项目时出现以下错误.
199 [main] ERROR org.drools.compiler.kie.builder.impl.KieContainerImpl - Unknown KieSession name: ksession-rules
java.lang.NullPointerException
at com.sample.DroolsTest.main(DroolsTest.java:24)
Run Code Online (Sandbox Code Playgroud)
码:
package com.sample;
import org.kie.api.KieServices; import
org.kie.api.runtime.KieContainer; import
org.kie.api.runtime.KieSession;
/** * This is a sample class to launch a rule. */ public class
DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
kSession.insert(message);
kSession.fireAllRules();
} catch …
Run Code Online (Sandbox Code Playgroud) 我想知道当我使用drools规则引擎时,如何在左侧表示一个对象为null?任何人都可以告诉我如何使用drools关键字"不"等等.谢谢!
我目前正在开发一个使用Optaplanner和drools的Java项目来解决Constraint Satisfaction问题.
解决方案很好.但是在解算器给我一个解决方案后,我想评估解决方案:我想知道哪些约束被违反,即哪些规则被触发了多少次.
这可能吗?我该如何开始呢?
是什么区别"Drools的骆驼服务器"和"KIE-WB执行服务器"?它们是否与远程服务器中执行规则/进程的目的相同?
工作台包含执行服务器(用于执行进程和任务),还允许您通过远程API调用各种进程和任务相关的操作.因此,您可以"作为服务"设置流程引擎,并通过远程请求和/或在必要时向执行服务器发送必要的触发器,轻松地将其集成到应用程序中(无需将其作为一部分嵌入或管理)你的申请).
drools camel服务器(drools-camel-server)模块是一个战争,你可以部署它来为任何类型的客户端应用程序远程执行KnowledgeBases.这不仅限于JVM应用程序客户端,也包括可以通过REST接口使用HTTP的任何技术.此版本的执行服务器以本机方式支持无状态和有状态会话.
我们的本地Nexus存储库在下载依赖项方面似乎不一致.它会拉下pom,甚至测试罐子......但不是我需要的主要实际罐子!因此,当我在我的中央(代理)存储库上浏览drools-compiler:org/drools/drools-compiler的索引时,我看到以下文件:
丢失的关键文件是:
drools-compiler-6.2.0.CR4.jar
当我浏览遥控器时,一切都在那里,包括关键的罐子.
当我运行mvn clean install
(通过我的IDE STS 3.6.3)时,我最终看到以下错误消息:
无法在项目上执行目标:
无法解析项目的依赖项:
无法在org.drools中收集依赖项:drools-compiler:jar:6.2.0.CR4:
无法读取org.drools的工件描述符:drools-compiler:jar :6.2.0.CR4:
找不到org.jboss.dashboard-builder:dashboard-builder-bom:pom:6.2.0.CR4 in缓存在本地存储库中,直到nexus的更新间隔才会重新尝试解析已经过去或强制更新
还有很多其他依赖项已经被拆除了,存储库已经存在很长时间了(我没有设置它,只是现在处理!)... JBoss drools不是唯一的时间我看到这一点,这只是我现在最紧迫的问题.
我用Google搜索周围,一些职位看似相关的,(这一个几乎是相同的,但没有解决),但似乎无法找到一个解决方案.已在我们的本地Jboss和Central代理中设置远程索引下载.我已经尝试清除缓存,重建索引,在我的mvn命令中添加"-U"......但无济于事.我唯一能够构建我的项目的时候是我完全绕过我的本地存储库(空.m2/settings.xml)并直接从Central或JBoss public.有没有人对这里可能发生的错误有所了解?
更新:可能有用的更多细节:在我的settingx.xml(下面)中定义为镜像的存储库'nexus'是一个Group Repository,由(按此顺序)组成:
*Central(http://repo1.maven.org/maven2 /)
*JBoss public(http://repository.jboss.org/nexus/content/groups/public/)
*我们自己上传的本地罐子的回购......
按照@ Steve的建议,我比缺少的drools编译器文件挖得更深,发现org.jboss.dashboard-builder.dashboard-builder-bom ...在Central中不存在,有趣的是,它确实存在于JBoss中.我的理解是,通过使用Repos组,它应该查询列表中的下一个回购,如果找不到的话,对吧?任何建议最受赞赏!
settings.xml中:
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>(local server)/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
Run Code Online (Sandbox Code Playgroud)
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" …
Run Code Online (Sandbox Code Playgroud) drools ×10
java ×3
jboss ×2
rule-engine ×2
eclipse ×1
jbpm ×1
kie ×1
maven ×1
nexus ×1
optaplanner ×1
performance ×1
sonatype ×1