Слюни - прекратить выполнение правила следствия

Мы используем drools и позволяем нашим пользователям вводить свои собственные правила и последствия правил drools. Тем не менее, чтобы сделать все эти слюни более надежными, нам нужно убедиться, что бесконечные циклы или другие блокирующие объекты не блокируют всю систему.

Для циклов правил (правило A -> правило B -> правило A -> ...) у нас приняты меры. Тем не менее, все еще можно использовать что-то вроде

for(int i=0; i<1000000; i++) {
    doSomething();
}

Проблема в том, что мы не можем избежать всего этого с помощью черных списков или чего-то еще, поэтому нам нужна мера слюней, чтобы сделать это.

С помощью session.halt() на текущей KnowledgeSession не прерывает последующую часть. session.dispose() приводит к тому, что последствия запускаются, хотя сессия уже мертва, а это не то, что нам нужно.

Я также не нашел "максимального времени выполнения", которое могло бы ограничить время, которое может быть выполнено последствию до его завершения.

Также попытался добавить хук к beforeActivationFired, который запускает поток, который ждет 10 секунд, а затем использует agendaItem.cancel() а также удаление правила из базы данных. Бесполезно, следствие правила продолжало работать.

Любые идеи будут полезны.

0 ответов

Другие вопросы по тегам