Drools Runtime无法识别自定义操作员参数

时间:2018-04-20 15:57:10

标签: operators drools custom-operator

问题陈述:

我们几乎没有Date和Strings的自定义运算符,这些运算符实现了Str运算符,如下所示:https://github.com/kiegroup/drools/blob/f7ab4ee3c88d767a8cbb372c2db1afa84b20a51d/drools-core/src/main/java/org/drools/core/base/evaluators/StrEvaluatorDefinition.java

在kie.properties.conf中使用以下配置:

drools.evaluator.str = com.company.drools.operators.StrEvaluatorDefinition

对于我们创建的Custom Str运算符,Drools运行时无法区分Str [starts]和Str [ends]。

这意味着当我们在测试中运行时,我们希望Rule-1失败并且Rule-2被激活。但我们注意到的是,规则-2将不会被激活。

// Facts input into drools :
//     str1 = drools
//     str2 = dr 

rule "Rule-1"
   when message : Customer( str1 str[endsWith] str2 )
   then System.out.println("Rule - Str 1 -  fired");
end


rule "Rule-2"
   when message : Customer( str1 str[startsWith] str2 )
   then System.out.println("Rule - Str 2 - fired");
end

其他观察:

如果我们将RHS更改为如下所示的字符串文字,则规则-2将被激活。

// Facts input into drools :
//     str1 = drools
//     str2 = dr 

rule "Rule-1"
   when message : Customer( str1 str[endsWith] "abc" )
   then System.out.println("Rule - Str 1 -  fired");
end


rule "Rule-2"
   when message : Customer( str1 str[startsWith] str2 )
   then System.out.println("Rule - Str 2 - fired");
end

最后

我们删除了Str自定义运算符,然后使用了由drools提供的开箱即用的Str运算符。我们再次运行下面提到的测试,这次规则-2被激活。

// Facts input into drools :
//     str1 = drools
//     str2 = dr 

rule "Rule-1"
   when message : Customer( str1 str[endsWith] str2 )
   then System.out.println("Rule - Str 1 -  fired");
end


rule "Rule-2"
   when message : Customer( str1 str[startsWith] str2 )
   then System.out.println("Rule - Str 2 - fired");
end

需要帮助:

我们注册自定义运营商的方式是否存在问题?因为我们真的从Drools Repo复制了整个代码并创建了我们自己的运算符。但请注意执行中的不同行为。

我们还有其他运营商,比如date [before / after / equals],我们也注意到了相同的行为。我们正在使用最新版本的drools JAR。

0 个答案:

没有答案