Мы работаем над приложением мониторинга, в котором мы следим за обработкой задачи в наборе приложений. У нас есть набор правил слюни, соответствующих нашим потребностям, но у нас есть некоторые проблемы с производительностью (у нас может быть легко до 50 тыс. Объектов в сеансе). Мы ищем лучшие pacticesБулевские флаги, выполняющие условия Drools
Этот вопрос касается использования флага bloolean. Мы работаем для удаления большей части из org.drools.core.rule.constraint.MvelConstraint: Exception jitting: ...
предупреждений.
Мы часто предупреждаем о булевых флагах.
, например, в:
rule "PropagateDeprecation"
when
$parent:BaseChainStep($parent.Deprecated)
$child:BaseChainStep($parent.Id == $child.Parent, !$child.Deprecated)
then
modify($child){
setDeprecated(true)
}
end
мы должны предупредить как на $ parent.Deprecated и $ child.Deprecated!.
Мы хотели бы понять, почему существует предупреждение для булевых флагов.
Мы хотели бы знать также последствия предупреждения на сложенных условиях. Например в:
rule "App1_TriggerExpected"
when $chainStep:App1ChainStep(
HasChain
, HasParent
, !$chainStep.Deprecated
, Status in ("error", "closed")
, Places != null
, Analysis != null)
then
..
end
если мы Предупреждать о первом состоянии HasChain
, как разрешило когда положение? Также оцениваются другие условия (с итерацией по всем объектам App1ChainStep), или какой-то «индекс» по-прежнему используется?
Если его вопрос, мы используем флаги как логические (а не булевы), чтобы обеспечить значение false по умолчанию.
Edit:
Проблема может быть связана с расширенных классов. В нашем случае использования у нас есть что-то вроде:
declare BaseChainStep
parent : GUID
deprecated : boolean
end
declare App1ChainStep extends BaseChainStep
// specific App1 fields
end
BaseChainStep поля можно манипулировать в правилах, использующих объекты App1ChainStep или объекты BaseChainStep.
rule "deprecateApp1"
when $app1:App1ChainStep(BusinessLogicCondition)
then
modify($app1) {
setDeprecated(true)
}
end
Затем флаг, устаревший, распространяется на детей App1 с использованием правила «PropagateDeprecation».
Булевский флаг, вызывающий предупреждение, объявляется в классе BaseChainStep.
Я только что добавил редактирование по моему вопросу. Это может быть связано с расширенными классами. –
Я вставил объекты в соответствии с вашими классами, объявленными в коде DRL, и правила, которые я изложил в своем ответе, работают нормально. - Пожалуйста, не публикуйте «maybes» - если он не может быть воспроизведен, он не может быть диагностирован и его невозможно вылечить. – laune
Хорошо, я воспроизведу на простой тестовый случай и отправлю. Но у меня действительно есть предупреждение о флажках для правил, использующих базовые классы явно (я подтвержу). –