我们目前正在构建自己的产品和框架。我们有一个规则引擎,它在内部使用MVEL API来计算表达式。
最近我们遇到了一个问题
假设我有一个“规则”,嵌套方式有很多条件。
(A&&(B&&(C& amp;(D&(E& F))))))
假设我有更长的表达方式,如上所述。而不是A,B,C等,我有类似的想法 (A - > contextObjectLoanApplication.Customer.personinfo.age)
如果我编译这个表达式,编译表达式大约需要3-4个小时。 有什么方法可以在解析器或上下文中设置任何内容,MVEL以更优化的方式处理它。
我们几乎被困在这里,要么我们可能需要更改生成此表达式的整个API然后进行编译。
所以只要好奇MVEL是否可以解决这个问题。
由于
答案 0 :(得分:1)
MVEL的解析器是天真的或破坏的,并且在指数时间内根据括号深度解析这些表达式:
(A && (B && (C && (D && (E && F)))))
除非他们修复解析器,否则你无能为力。
以下嵌套表达式也会以指数方式解析:
(A ? B : (C ? D : (E ? F : (G ? H : (I ? J : K)))))
(自MVEL 2.1.7起)
答案 1 :(得分:0)
问题已在MVEL-301
中打开