2013-11-11 4 views
1

В настоящее время мы строим собственный продукт и каркас. У нас есть механизм правил, который внутренне использует MVEL API для оценки выражений.MVEL Expression Compilation занимает очень много времени

Недавно мы столкнулись с проблемой один

Пусть говорят, что я есть «правило», с большим количеством условий в гнездовой образом.

(А & & (В & & (С & & (D & & (Е & & F)))))

Пусть говорят, у меня есть более длиннее выражение, как выше. Вместо того, чтобы A, B, C и т.д. У меня есть OGNL похоже (А -> contextObjectLoanApplication.Customer.personinfo.age)

Если я скомпилировать это выражение, он принимает почти 3-4 часов, чтобы составить выражение. Есть ли выход, где я могу установить что-либо в парсере или контексте, и MVEL обрабатывает его более оптимизированным образом.

Мы почти застряли здесь, нам может понадобиться изменить весь API, который генерирует это выражение, а затем компилируется.

Так просто любопытно, может ли MVEL справиться с этим.

Благодаря

+0

для малого выражения он работает отлично , вокруг до 5-6 вложенных скобок работает нормально, но если больше, чем это гнездование, то это занимает очень много времени. –

ответ

1

анализатор MVEL является наивным или сломан, и разбирает такие выражения в показательное время относительно скобки глубины:

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

Там нет ничего, что вы можете с этим поделать, если они не исправить их синтаксический анализатор, что маловероятно.

Следующие вложенные выражения обрабатываются в геометрической прогрессии, а также:

(A ? B : (C ? D : (E ? F : (G ? H : (I ? J : K))))) 

(По состоянию MVEL 2.1.7)

+0

Я открыл [MVEL-301] (http://jira.codehaus.org/browse/MVEL-301), чтобы отслеживать это. –

+0

Спасибо, надеюсь, что он скоро будет решен. –

+0

Операции Codehaus прекратились. Кто-нибудь знает, где найти статус проблемы? – Gus

0

выпуск был открыт в MVEL-301

Смежные вопросы