Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理Drools条件的布尔标志_Drools - Fatal编程技术网

处理Drools条件的布尔标志

处理Drools条件的布尔标志,drools,Drools,我们正在开发一个监控应用程序,其中我们跟踪一组应用程序中任务的处理。 我们有一套符合我们需求的drools规则,但我们有一些性能问题(会话中可能有多达50k个对象)。 我们正在寻找最好的产品 这个问题是关于bloolean标志的使用。 我们正在努力删除大部分org.drools.core.rule.constraint.MvelConstraint:异常jitting:…警告 我们经常在布尔标志上出现这样的警告 例如: rule "PropagateDeprecation" when $

我们正在开发一个监控应用程序,其中我们跟踪一组应用程序中任务的处理。 我们有一套符合我们需求的drools规则,但我们有一些性能问题(会话中可能有多达50k个对象)。 我们正在寻找最好的产品

这个问题是关于bloolean标志的使用。 我们正在努力删除大部分
org.drools.core.rule.constraint.MvelConstraint:异常jitting:…
警告

我们经常在布尔标志上出现这样的警告

例如:

rule "PropagateDeprecation"
when
    $parent:BaseChainStep( $parent.Deprecated )
    $child:BaseChainStep( $parent.Id == $child.Parent,  !$child.Deprecated )
then
    modify($child){
        setDeprecated(true)
    }
end
rule "App1_TriggerExpected"
when $chainStep:App1ChainStep(
         HasChain
         , HasParent
         , !$chainStep.Deprecated
         , Status in ("error", "closed")
         , Places != null
         , Analysis != null)
then
    ..
end
我们对$parent.Deprecated和都发出了警告$child.Deprecated

我们想了解为什么布尔标志上有这样的警告

我们还想知道警告对合成条件的影响。 例如:

rule "PropagateDeprecation"
when
    $parent:BaseChainStep( $parent.Deprecated )
    $child:BaseChainStep( $parent.Id == $child.Parent,  !$child.Deprecated )
then
    modify($child){
        setDeprecated(true)
    }
end
rule "App1_TriggerExpected"
when $chainStep:App1ChainStep(
         HasChain
         , HasParent
         , !$chainStep.Deprecated
         , Status in ("error", "closed")
         , Places != null
         , Analysis != null)
then
    ..
end
如果我们在第一个条件
hascain
上有警告,那么when子句是如何解决的? 是否也计算了其他条件(对所有App1ChainStep对象进行迭代)或仍然使用了一些“索引”来提供帮助

如果有问题,我们将使用标志作为布尔值(而不是布尔值),以确保默认值为false

编辑:

这个问题可能与扩展类有关。在我们的用例中,我们有如下内容:

declare BaseChainStep
     parent : GUID
     deprecated : boolean
end

declare App1ChainStep extends BaseChainStep
     // specific App1 fields
end
可以使用App1ChainStep对象或BaseChainStep对象在规则中操作BaseChainStep字段

 rule "deprecateApp1"
 when $app1:App1ChainStep( BusinessLogicCondition )
 then
      modify($app1) {
           setDeprecated(true)
      }
 end
然后,使用“传播不推荐”规则将不推荐标志传播到App1子级


导致警告的布尔标志在BaseChainStep类中声明。

尽管您偏离了访问属性的常规方式,但这不应触发您报告的警告。我不能用6.3.0复制这个。您应该添加(a)Drools版本(b)类BaseChainStep的Java代码,通过该代码可以使用规则重现问题,如图所示

这是编写结合布尔属性的规则的另一种(更简单)方法:

rule bool1
when
  X( big, fast )
then
  System.out.println( "big fast X" );
end
您甚至可以使用布尔运算符:

rule bool2
when
  X( big && ! fast )
then
  System.out.println( "big slow X" );
end

注意字段名的简单使用,假设使用常规命名,例如,字段的
big
、访问者的
isBig
setBig

我刚刚对我的问题进行了编辑。它可能链接到扩展类。我已经根据您在DRL代码中声明的类插入了对象,并且按照我在回答工作中所述的规则插入了对象请不要发布“可能”——如果不能复制,就无法诊断,也无法治愈。好的,我将在一个简单的测试案例中复制并重新发布。但我确实有显式使用基类的规则的警告标志(我会确认),Drools版本可能是必不可少的。