MVEL表达式编译需要很长时间

时间:2013-11-11 16:03:52

标签: java mvel

我们目前正在构建自己的产品和框架。我们有一个规则引擎,它在内部使用MVEL API来计算表达式。

最近我们遇到了一个问题

假设我有一个“规则”,嵌套方式有很多条件。

(A&&(B&&(C& amp;(D&(E& F))))))

假设我有更长的表达方式,如上所述。而不是A,B,C等,我有类似的想法 (A - > contextObjectLoanApplication.Customer.personinfo.age)

如果我编译这个表达式,编译表达式大约需要3-4个小时。 有什么方法可以在解析器或上下文中设置任何内容,MVEL以更优化的方式处理它。

我们几乎被困在这里,要么我们可能需要更改生成此表达式的整个API然后进行编译。

所以只要好奇MVEL是否可以解决这个问题。

由于

2 个答案:

答案 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

中打开