我是 java 和 drools 的新手,我必须构建一个 java RESTful Web 服务/规则引擎。我们已经拥有运行 drools 5.2 版的 Genesys Rule Authoring (GRAT) 和 Genesys Rule Engine (GRE)(8.1.2 版)。我们需要获取 GRAT 包的源代码并将它们用于我们的开发环境的“精简规则引擎”。对于我的 POC,我已经安装了 drools 5.2 并创建了一个可以像我想要的那样消化我的包和火规则的项目。但是对于某些包我有这种错误:
BuildError: Unable to Analyse Expression $routingparams.priority = obtenirValeurParametre($routingparams.priority,"100");
$routingparams.target1 = obtenirValeurParametre($routingparams.target1, "AVGRP_GPAP_AEP_TA_MDP_E");:
[Error: unable to resolve method using strict-mode: com.desjardins.gtd.dpsccc.routage.gpap.routingparams.ObtenirValeurParametre.obtenirValeurParametre(java.lang.Integer, java.lang.String)]
[Near : {... ngparams.priority = obtenirValeurParametre($routin ....}]
如果您查看最后的包,您会看到函数 obtenirValeurParametre(String, String)。您还将看到使用 (Integer, String) 调用此函数,并且错误在此行。在 drools 包中,我不能具有不同参数的相同功能。我尝试使用“drools.dialect.mvel.strict”=false,但它不会改变任何东西。
KnowledgeBuilderConfiguration kbConfig =KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
kbConfig.setProperty("drools.dialect.mvel.strict", "false");
System.setProperty("drools.dialect.mvel.strict", "false");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( kbConfig );
由于 GRE 像我一样运行 drools 5.2 并且它适用于 GRE,我认为它必须存在一个解决方案,然后添加 .toString() 或类似的东西。考虑到我们有很多包,其中一些有上千条规则,我不想对每条规则进行调整。
有人有解决这些问题的想法吗?他/她将是我的英雄!
package com.desjardins.gtd.dpsccc.routage.gpap.routingparams
import java.util.*;
function String obtenirValeurParametre(String valeurActuelle, String parametre){
if(parametreEstVide(parametre)) return "";
if("*".equals(parametre)) return valeurActuelle;
else return parametre;
}
function boolean parametreEstVide(String parametre){
if(parametre.startsWith("{") && parametre.endsWith("}")) return true;
else return false;
}
declare RoutingParams
target1: String
priority: Integer
end
declare ContexteInteraction
destination: String
end
#from row number: 1
rule "Row 1 DT-6249 UNIT_Test Alain"
salience 99000
agenda-group "level1"
dialect "mvel"
when
ContexteInteraction( destination == 'GPAP_AEP_TA_MDP')
$routingparams:RoutingParams();
$contexteInteraction:ContexteInteraction();
then
$routingparams.priority = obtenirValeurParametre($routingparams.priority,'100')
$routingparams.target1 = obtenirValeurParametre($routingparams.target1, 'AVGRP_GPAP_AEP_TA_MDP_E')
end
谢谢
阿兰