使用junit测试drools规则的最佳做法是什么?
到目前为止,我们使用junit和dbunit来测试规则.我们有样本数据放到hsqldb.我们有几个规则包,到项目结束时,很难做出一个好的测试输入来测试某些规则而不是激发其他规则.
所以确切的问题是,如何将junit中的测试限制为一个或多个特定的测试规则?
感谢帮助,
Hubidubi
我刚刚开始使用Drools(版本5.1.0),所以请耐心等待这个问题已经得到解答.
我有一个java.util.List对象,其中包含复杂类型A的对象,其中A为:
class A {
String name;
String Value;}
Run Code Online (Sandbox Code Playgroud)
列表及其元素位于Drools引擎的工作内存中.只有当列表中元素的名称和值与特定值匹配时,是否有一种简单的方法可以触发规则?
目前,我在Drools规则中使用了一个自定义函数,它遍历列表并返回true,如果有一个符合规范的元素,但我不知道这是否是最有效和最简单的用法.
Drools和Jrules之间有区别吗?Jboss和Jrules的统治是一样的吗?什么类型的环境通常使用Drools?
简而言之,我想在运行时从规则库创建,编辑和删除规则.我很难弄清楚如何在流氓6+中做到这一点.
我知道在先前版本的drools(<= 5.6)中,有一个.drl文件的XML表示和一个用于它的API:https://docs.jboss.org/drools/release/5.6.0 .Final/drools-expert-docs/html/ch04.html#d0e8052.
从5.6开始的drools文档表明这个已弃用,它似乎在6处被完全删除.我不想使用已知没有直接升级路径的API.
由于工作流程要求以及Web用户界面的复杂性,将Guvnor或Workbench UI公开给用户进行规则编辑也不太合适.我想从Java代码创建和管理规则.
我想要一个比.drl文件的字符串模板更好的方法来创建新规则和修改规则.从Java以编程方式创建新规则的用途是什么?我做了很多搜索,但似乎无法为此找到一组Java API调用.
我想知道如何使用drools运行时在Java应用程序中使用Drools Workbench的指导决策表.我们的想法是,用户可以在工作台中定义规则,流程和一些决策表,这些表将由drools运行时获取.
仍然,出于某种原因,我无法弄清楚如何在drools中执行此操作,因为它将表存储为gdst文件,并且它似乎无法编译为drools.
使用drools,有没有办法: - 执行gdst文件,就像我使用excel决策表一样? - 或者在规则中编译gdst文件?
我一直在寻找解决方案,但找不到具体的例子......:/
我将使用大学的图书馆系统来解释我的用例.学生注册库中的系统,并提供他们的个人资料:性别,年龄,部门,之前完成的课程,目前注册的课程,书籍已经借等,每本书在图书馆系统将定义基于学生的个人资料中的借贷规则,例如,计算机算法的教科书只能由目前在该课程注册的学生借用; 另一本教科书只能由数学系的学生借用; 也可能有规则,学生最多只能借2本电脑网络书.由于借用规则,当学生在图书馆系统中搜索/浏览时,他只会看到可以借用的书籍.因此,该要求实际上归结为有效生成学生有资格借阅的书籍清单.
以下是我使用Drools对设计进行设想的方法 - 每本书都有一个规则,对学生档案有一些字段限制作为LHS,书规则的RHS只是将书籍ID添加到全局结果列表,然后是所有书籍规则被加载到RuleBase中.当学生搜索/浏览图书馆系统时,会从RuleBase创建无状态会话,并且学生的个人资料被确认为事实,然后学生可以借用的每本书都会触发其图书规则并获得完整的图书清单.学生可以在全球结果列表中借阅.
一些假设:图书馆将处理数百万本书; 我不认为图书规则太复杂,平均每条规则最多3个简单的字段限制; 系统需要处理的学生数量在100K范围内,因此负载相当重.我的问题是:如果加载了一百万本图书规则,Drools会占用多少内存?所有这些百万条规则的解雇速度有多快?如果Drools是合适的,我想听听一些有经验的用户设计这样一个系统的最佳实践.谢谢.
我目前正在教自己Drools Expert/Flow以及GWT.我想使用Drools Flow作为事件/命令总线和业务规则引擎来实现应用程序不同部分之间的松散耦合.
到目前为止,我已经从我的测试用例中获得了Expert和Flow,但是我很难确定如何在Web容器中最好地实现Flow.
我是否应该将所有脚手架放入无状态会话EJB并让每个请求从头开始设置所有内容然后运行流/规则?这似乎浪费了我的资源.我是否可以存储单个知识会话并在Web请求之间共享该会话,同时访问它,该方案是否可以扩展并且是否是线程安全的(我的猜测是否定的)?汇集知识会议是一个好主意吗?
我要求的基本上是否有上述的最佳做法?文档和示例虽然非常好,但在这些特定点上并不清楚.
我确实读过一些关于Drools Grid的东西,不确定这是否能解决我的问题,而且似乎正在开发中.如果我的问题不清楚,请说出来.
BR Magnus
在我正在进行的应用程序中,我需要定期检查成千上万个对象的资格,以获得某种服务.决策图本身采用以下形式,只是更大:
在每个端节点(圆圈)中,我需要运行一个动作(更改对象的字段,日志信息等).我尝试使用Drool Expert框架,但在这种情况下,我需要为图中的每个路径编写一条长规则,从而导致结束节点.Drools Flow似乎也没有为这样的用例构建 - 我拿一个对象,然后,根据一路上的决定,我最终进入一个终端节点; 然后又为另一个对象.或者是吗?你能给我一些这些解决方案的例子/链接吗?
更新:
Drools Flow调用可能如下所示:
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();
for(int i = 0; i < 10000; i++) {
Application app = somehowGetAppById(i);
// insert app into working memory
FactHandle appHandle = ksession.insert(app);
// app variable for action nodes
params.put("app", app);
// start a new process instance
ProcessInstance instance = ksession.startProcess("com.sample.ruleflow", params);
while(true) {
if(instance.getState() == instance.STATE_COMPLETED) {
break; …
Run Code Online (Sandbox Code Playgroud) 在我们的项目中,我们必须实现有关将某些对象映射到某些操作的业务逻辑.在某个操作最终得到解决之前,我们将为要验证的特定类型的对象提供一系列条件.换句话说,对于7种类型的对象,我们可以进行一系列操作(来自近45种动作).
我们正在考虑使用Drools写下上述规则.就效率而言,有没有人对使用Drools有一些积极/消极的经验?还有可以使用的jBPM框架(如果我没有弄错Drools在那里使用) - 任何人都熟悉该框架?也许您还有其他一些如何解决问题的想法?
我知道如何使用所有方法在KIE工作台中创建DRL文件.但是我的问题是没有使用KIE工作台,我们可以使用我们所需的值创建.drl文件.如果有任何可能性,请建议我.同样的方式建议我任何API都与此有关.提前致谢.
drools ×10
java ×6
rule-engine ×4
drools-flow ×3
rules ×3
jboss-rules ×2
architecture ×1
compilation ×1
jboss ×1
jbpm ×1
jrules ×1
junit ×1
kie ×1
state ×1