我有以下Drools规则文件,我向其发送的地图填充了自定义对象(NodeElement),map是一个全局变量,因为它必须被所有规则访问,并且有另一个全局变量错误,当规则失败时填充。我已经使用了eval并能够成功执行它。经过一番研究,发现eval有一些性能问题?如何访问drools中的自定义对象的地图
我的问题是...
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<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"));
为什么不去完整的方式,并使用'FixedCurrency','TradeDate'等作为类型名称。这将*真正*使它可读;-) – laune
感谢它works.But只是问是否有更好的方法来做到这一点?它可以更有效地实现吗? –