gpt4 book ai didi

java - 如何访问 drools 中自定义对象的映射

转载 作者:太空宇宙 更新时间:2023-11-04 14:55:59 25 4
gpt4 key购买 nike

我有以下 Drools 规则文件,我向其中发送填充了自定义对象(NodeElement)的 map , map 是一个全局变量,因为它必须由所有规则访问,还有另一个全局变量错误,当规则失败时会填充该变量。我已经使用了 eval 并且能够成功执行它。经过一些研究,发现 eval 有一些性能问题?

我的问题是...

1)性能问题可以忽略不计吗?

2) 使用 eval 是一种好的做法吗?

3)我是否必须重写这些规则?最好的方法是什么?

import java.util.Map;
import com.infodev.pojo.NodeElement;
import com.main.Errors;
import com.validation.DateValidation;

global java.util.Map map;
global com.main.Errors errors;


rule "Fixed / Floating ccy rule"

when
eval(!((NodeElement)map.get("FixedCurrency")).getValue().equals(((NodeElement)map.get("FloatingCurrency")).getValue()))
then
errors.addError( "Currency", "Fixed currency should be same as Floating currency" );
end

rule "Payment / Settlement date rule"

when
eval(!(DateValidation.paymentDateValidation(((NodeElement)map.get("tradeDate")).getValue(),((NodeElement)map.get("paymentDate")).getValue())))

then
errors.addError(map.get("paymentDate").toString(), "Payment date should be after trade date" );

end

map 是:

Map<String, NodeElement> map = new HashMap<String, NodeElement>();
map.put("FixedCurrency", new NodeElement("FixedCurrency", "USD"));
map.put("FloatingCurrency", new NodeElement("FloatingCurrency", "UD"));
map.put("tradeDate", new NodeElement("tradeDate", "2012-01-22"));
map.put("paymentDate",new NodeElement("paymentDate", "2012-01-2"));

最佳答案

既然可以使用与 Map 的键相同的字符串来识别 NodeElement,为什么不直接将 NodeElement 插入到 session 中呢?通过这样做,您可以像这样重写规则:

rule "Fixed / Floating ccy rule"
when
$n1: NodeElement( id == "FixedCurrency")
$n2: NodeElement( id == "FloatingCurrency", value != $n1.value)
then
errors.addError( "Currency", "Fixed currency should be same as Floating currency" );
end

rule "Payment / Settlement date rule"
when
$n1: NodeElement( id == "tradeDate")
$n2: NodeElement( id == "paymentDate", value != $n1.value)
eval(!(DateValidation.paymentDateValidation($n1.value, $n2.value)))
then
errors.addError($n2.value.toString(), "Payment date should be after trade date" );
end

我无法告诉您像这样重写规则是否会提高您的性能。这也取决于其他事情。我认为通过这种新方法你确实得到的一件事是可读性。

希望对你有帮助

关于java - 如何访问 drools 中自定义对象的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23195024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com