我是java和drools的新手,我必須構建一個java REST風格的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(字符串,字符串)。你也會看到這個函數調用(整數,字符串),錯誤在這一行。在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 params時使用它。 – kaskelotti
你開發了哪些版本的「成千上萬的規則」?顯然這是按照你的規則使用Drools的方法。還是你寫了成千上萬的規則,卻沒有注意到這個問題?而且,RHS代碼不應該依賴非平凡的Java特性(以及任何MVEL特性)。 – laune