我有一个如下所示的对象:
class License{
private field1;
private field2;
private boolean active;
private String activeMessage;
private boolean processed = false;
//Getter and setter methods
}
我要做的是,根据field1和field2的值,我需要设置isActive标志和相应的消息。但是,如果field1或field2的规则被激发,我需要停止规则处理。也就是说,我只需要执行1个成功的规则。
我在一篇文章中读到,执行Ksession.FireAllRules(1)可以解决这个问题。但是fireAllRules()方法在Drools6中不可用。我也试着把一个返回;语句在每个规则的末尾。那也帮不了我。
rule "Check field1"
when
$obj : License(getField1() == "abc" && isProcessed() == false)
then
System.out.println("isProcessed >>>>>> "+$obj.isProcessed());
$obj.setActive(true);
$order.setActiveMessage("...");
$order.setProcessed(true);
end
rule "Check field2"
when
$obj : License(getField2() == "def" && isProcessed() == false)
then
System.out.println("isProcessed >>>>>> "+$obj.isProcessed());
$obj.setActive(true);
$order.setActiveMessage("...");
$order.setProcessed(true);
end
kieService = KieServices.Factory.get();
kContainer = kieService.getKieClasspathContainer();
kSession = kContainer.newStatelessKieSession();
kSession.execute(licenseObj);
谢了。
你的问题包含许多错误。
FireAllRules
在Drools6中消失绝对不是真的。您可能已经查看了javadoc索引,以找到四个(4!)此方法在org.kie.api.runtime.rule
包中的重载版本,该包位于接口statefulrulesession
中。
通过组合触发约束,您可以轻松地避免只触发两个规则中的一个规则的问题:
rule "Check field1 and field2"
when
$lic: License(getField1() == "abc" || getField2() == "def" )
//...
then
$lic.setXxx(...);
end
rule "Check field1 and field2"
when
$lic: License(getField1() == "abc" || getField2() == "def",
! active )
//...
then
modify( $lic ){ setActive( true ) }
end
我在同一个drl文件中有两个Drools规则,如下所示: 我的想法是用第一条规则处理所有处于临界状态的事件。然后使用第二个规则,如果任何阀门有警报,这是由“如果临界”规则设置的,发送一个短信。 你知道吗?用口水可能吗?
我们在决策表中实现了一个场景,如果某个规则成功地执行了规则的操作部分,就可以退出其余规则的执行。假设我有50条规则,第5条规则表示保险索赔无效,那么我们将索赔设置为对象无效,那么就不需要执行其余的规则。如何才能做到这一点。请建议
问题内容: 从数据库表和solr中读取数据后,我编写了一个脚本来更新数据库表。我正在使用asyn.waterfall模块。问题在于,成功完成所有操作后,脚本不会退出。我使用过的数据库连接池也认为可能正在创建脚本以无限期等待。我想将此脚本放在crontab中,如果无法正确退出,它将不必要地创建大量实例。 问题答案: 我刚刚经历了这个问题。 仅仅使用的问题是我正在处理的程序正在创建句柄,但从未销毁它们
问题内容: 我是android开发的新手,现在我的启动器活动仅显示5秒钟,之后我要检查用户是否已登录并无法正常工作并执行操作。 这是我的代码。 问题答案: 您可以使用Handler来添加一些延迟。按如下所示调用方法,使其在5秒钟后执行。 注意: 请勿使用那样的线程, 因为它将阻塞您的UI并使其无响应。
我们目前正在将jBPM(7.37.final)规则部署到一个Kie执行服务器,并使用执行服务器自动公开的REST API调用规则。 但是由于一些体系结构的限制,我们不能使用REST API调用规则。该选项是执行一个基于jar(kie服务器客户机或其他)的集成,并从客户机(java应用程序)远程调用执行服务器上的规则。 Virges Vinay
我知道Drools中的“显着性”提供了对规则执行顺序的控制。但上面是一个例子,说明了当“显着性”不再能帮助我时所面临的问题。 在这里,我有三条规则正在相继执行: 我期望第三条规则被触发,并且控制台中有“规则被触发”行,但它没有被执行。 据我所知,问题在于规则评估阶段,当所有三个规则在执行前同时评估,然后才根据它们的“显着性”回合执行。 在评估的那一刻,$resource1.amount是5,这就是