使用junit测试drools规则的最佳做法是什么?
到目前为止,我们使用junit和dbunit来测试规则.我们有样本数据放到hsqldb.我们有几个规则包,到项目结束时,很难做出一个好的测试输入来测试某些规则而不是激发其他规则.
所以确切的问题是,如何将junit中的测试限制为一个或多个特定的测试规则?
感谢帮助,
Hubidubi
我目前正在教自己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)