Использование Drools для обеспечения обработки ошибок и управления последствиями - PullRequest
2 голосов
/ 07 мая 2010

Я работаю над модулем, целью которого является обработка исключений Java и определение стратегии для их устранения.Исключениями могут быть вещи, о которых я знаю (явные бизнес-исключения, например TransformationException), или более общие вещи среды (ошибки JMS, ошибки ввода-вывода и т. Д.)

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

Я хочу написать правило, которое будет явно соответствовать исключениям, с которыми я знаю, как обращаться (например, TransformationException), и иметь другое правило, которое перехватывает «все остальное»

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

Как бы мне написать такие исключительные правила, не полагаясь на особенности, чтобы управлять порядком выполнения(это кажется плохой практикой из того, что я прочитал)?

У меня есть решение, которое меня не устраивает, и результат зависит от порядка, в котором правила определены в моем .drl.

Ответы [ 2 ]

0 голосов
/ 09 мая 2010

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

0 голосов
/ 07 мая 2010

Я бы предложил использовать высокую значимость для исключительных правил и меньшую значимость для общих правил. В качестве альтернативы вы можете использовать группы повесток дня, чтобы сначала выполнить конкретные правила, а затем правило «поймать все».

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

...