Как читать память Drools для обнаружения частично совпадающих правил

Я хотел бы иметь возможность читать память Drools таким образом, чтобы я мог определить, какое условие соответствует, даже если правило не сработало в конце.

Скажи, что у меня есть это правило:

rule "MyRule"
when
   FirstFact(condition == "str")
   SecondFast(anotherCondition > 30)
then
...
end

Если я вставлю в память только объект "FirstFact" и вызову fireAllRules(), правило не будет запущено. Но все же я хотел бы отследить, что первое условие этого правила соответствовало.

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

Я думал о том, чтобы получить доступ к памяти Drools и посетить все условия, содержащиеся в дереве Rete, но я не уверен, является ли это хорошим подходом или даже возможным.

Спасибо!

1 ответ

Решение

Из-за того, как работает RETE, то, что вы пытаетесь сделать, невозможно. Пожалуйста, прочитайте этот другой вопрос, чтобы получить представление о возможном решении: Drools 7, слушатель событий, когда правило активируется (даже если оно частично соответствует)

Надеюсь, поможет,

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