Я новичок с java и drools, и мне нужно создать java RESTful Web Services/rules engine. У нас уже есть Genesys Rule Authoring (GRAT) и Genesys Rule Engine (GRE) (версия 8.1.2), которые запускают drools версии 5.2. У нас есть необходимость взять источник пакетов GRAT и использовать их в «Lite rule engine» для наших сред разработки. Для моего 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 запустить течет слюна 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
Благодаря
Ален
Ваша функция singnature - это 'obtenirValeurParametre (String, String)', но вы пытаетесь использовать ее при первом вызове с параметрами Integer и String. – kaskelotti
С какой версией вы разработали эти «тысячи правил»? Очевидно, что это способ использовать Drools с вашими правилами. Или вы пишете тысячи правил, не замечая этой проблемы? Кроме того, код RHS никогда не должен опираться на нетривиальные функции Java (и любую функцию MVEL). – laune