我正在向drools会话插入多个事实并在会话上调用fire All规则。如果任何一个事实失败,则会引发异常,并且不会为其余事实执行规则。
我的问题是:
//我的scala代码段:
val ruleSession:KieSession = kBase.newKieSession();
ruleSession.insert(fact1);
ruleSession.insert(fact2);
ruleSession.insert(fact3);
ruleSession.fireAllRules()
ruleSession.dispose()
让我知道任何有用的想法。谢谢
这应该符合第一个要求。
val ruleSession:KieSession = kBase.newKieSession();
ruleSession.insert(fact1);
ruleSession.fireAllRules()
ruleSession.insert(fact2);
ruleSession.fireAllRules()
ruleSession.insert(fact3);
ruleSession.fireAllRules()
ruleSession.dispose()
正如注释(由Prog\u G提供)中的上述链接所述,我实现了ConsequenceExceptionHandler,并在handleException方法中优雅地处理了异常,我记录了失败的事实,并将其从执行进一步的规则中删除,下面给出了示例代码。希望这对有类似用例的人有所帮助。
//Drools会话创建
KieBaseConfiguration kconfig = new RuleBaseConfiguration();
kconfig.setProperty(ConsequenceExceptionHandlerOption.PROPERTY_NAME, "com.xxx.RuleExceptionHandler"); // set my exception handler name to RuleBaseConfiguration
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieBase kieBase = kContainer.newKieBase("ims-hw-rules",kconfig); // create KieBase passing the config
KieSession kSession = kieBase.newKieSession();
//ConsequenceExceptionHandler实现。
public class RuleExceptionHandler implements ConsequenceExceptionHandler{
@Override
public void handleException(Match match, RuleRuntime workingMemory, Exception exception) {
//if(exception instanceof MyException) {
if(match.getObjects().size() >0) {
for (Object object : match.getObjects()) {
JSONData fact = (JSONData) object;
//logFailedFact(fact);
}
}
if(match.getFactHandles()!= null) {
for (FactHandle factHandle : match.getFactHandles()) {
workingMemory.delete(factHandle); // delete the failed fact from executing remaining rules.
}
}
//}
}
}
我不知道为什么,但JBehave没有考虑给定故事中的失败。如果givenstory出现故障,它将不执行该故事的其余步骤,但将执行给定故事的其余部分。下面是一个例子: 例如,如果Story2.story失败,我预计给定故事的其余部分和最后2个步骤都没有执行。但事实的确如此。 有人知道为什么吗?如果一个步骤或故事失败,我怎么能让所有故事都失败? 我还注意到,报告的统计数据只反映了最后一个给定的故事和后
在我的Jenkins管道中,我通常使用< code>post声明函数向我发送电子邮件,以防管道出现故障。 函数的简单语法如下: 在上面的电子邮件中,我还想提到管道的哪个阶段(假设管道有5到6个阶段)失败了。我该怎么做?任何帮助都非常感谢。 上述要求的扩展将是向用户提供实际的错误日志(失败阶段的错误日志),也作为失败通知电子邮件的一部分。 想法是,当用户收到来自 jenkins 的失败通知时,他应该
是否可以使用Hibernate Spring对以下内容进行建模。 公开会议 我使用Spring TransactionTemplate,它同时执行会话事务生存期范围。 原因是,有时我在业务流程中有几个阶段,我希望在每个阶段完成后提交。但是,我希望继续使用相同的持久对象。如果每个事务都有一个单独的会话,则会出现暂时/分离的异常,因为原始会话已关闭。 这有可能吗?
我有一个问题,如果我的服务上有一个客户端调用两个方法,它就会失败,因为第二个方法中的事务没有与之关联的会话。但是,如果我将这两种方法组合到服务中,并从客户机代码中调用其中一种方法,它就会成功。 谁能给我解释一下为什么会这样? 考虑下面的代码: 所以这里发生的事情是,在我的客户机代码中(它不知道事务),如果我调用#getChildrenFor(id),我就没事了。但如果我打电话: 然后hiberna
在规则执行期间,我将在内存中“插入”新的事实对象,当规则触发完成时,我需要读取这些对象。在规则课程之外,我如何阅读这些事实? 我尝试过从会话外部(即在“fire All规则()”方法之前)使用outIdfier插入事实。但是,因为我可能不知道在规则会话期间可能会插入多少Account ing周期事实,或者即使它会被插入,这种方法似乎不合适。 会计期间事实: 执行代码: 我的规则。drl公司