最近我正在使用drools,我想对一些对象进行一些特殊的检查。我需要在规则的when部分使用函数,但是我得到了一个错误。示例:
function boolean newFunction(int a){
if(a>0)
return true;
else
return false;
}
rule "new rule"
salience 100
dialect "mvel"
when
eval(newFunction(1))
then
System.out.println("OK");
end我得到的错误总是:
unable to resolve method using strict-mode: java.lang.Object.newFunction(java.lang.Integer)when部分中的函数不支持drools吗?
谢谢!
发布于 2012-09-26 23:44:49
简短的答案是:不。
这是因为事实需要在工作记忆中。
您可以做的是,有一个规则,它从工作内存中获取某个类的所有类型,在then部分中应用一个函数,并在工作内存中插入新的值。
编辑
这个答案最初是在2012年发布的,并不是很相关,因为更新版本的drools确实支持when子句上的函数。
发布于 2014-12-24 01:22:28
MVEL或集成bug -函数调用适配器很可能没有装箱/取消装箱原始类型。我看到这个问题很老了,但是这个问题已经被修复了(用6.3.0-SNAPSHOT进行了测试)。对于旧版本,我会尝试使用盒装类型: function boolean newFunction( Integer A) ...
发布于 2015-02-04 03:40:24
根据上面选择的答案,经过一些实验,我发现可以创建一个外部java方法,它的类可以导入到规则文件中,并封装在MVEL函数包装器(Boolean)中,然后可以将其作为eval语句的参数从LHS调用。
[External Java POJO_Class.myMethod]
import com.mypackage.POJO_Class;
function Boolean myFunctionName() {
POJO_Class myClass = new POJO_Class();
return myClass.myMethod(Parameters);
}
rule "Test Rule"
when
eval ( myFunctionName(parameters) )
then
endhttps://stackoverflow.com/questions/12604741
复制相似问题