После того, как правила обжига, как-то значение переменной элемента действия (notificationObj
) не задано. Однако, когда я выполняю его через класс тестирования Junit, он возвращает значения, как ожидалось. Но когда война развертывается, она возвращает нулевые значения. Можете ли вы, пожалуйста, знать, что может быть неправильным?Параметры переменных объекта действия Drools не установлены
List<Attribute> auxiliaryList = eventObject.getAuxiliary();
Attribute attributeObj = new Attribute();
Notification notificationObj = new Notification();
KnowledgeBase kBase = kBuilderUtility.buildKBase(resourceName, workSheetName);
StatefulKnowledgeSession kSession = kBase.newStatefulKnowledgeSession();
FactHandle eventObjHandle = kSession.insert(eventObject);
FactHandle attributeObjHandle = kSession.insert(attributeObj);
FactHandle notificationObjHandle = kSession.insert(notificationObj);
for (Attribute attribute : auxiliaryList) {
if (createNewNotificationObject) {
notificationObj = new Notification();
}
attributeObj.setName(attribute.getName());
attributeObj.setValue(attribute.getValue());
kSession.update(eventObjHandle, eventObject);
kSession.update(attributeObjHandle, attributeObj);
kSession.update(notificationObjHandle, notificationObj);
kSession.setGlobal("eventObj", eventObject);
kSession.setGlobal("attributeObj", attributeObj);
kSession.setGlobal("notificationObj", notificationObj);
kSession.fireAllRules();
LOGGER.debug(notificationObj.getCommunicationType());
eventObject.getNotificationCollection().add(notificationObj);
createNewNotificationObject = true;
}
Лист правил создает строку DRL, как ожидается, как указано ниже. значение Правила на C15, заголовок на C9:
rule "Rule_Evaluation_15"
when
$eventObj: Event(eventType=="ABC", sourceSystem=="ABC")
$attributeObj: Attribute(name=="old_status", value=="XYS")
then
notificationObj.setMsgDescription("ABC");;
notificationObj.setSourceSystem("XYZ");;
notificationObj.setTemplateId("12345AB");;
notificationObj.setCommunicationType("Email");;
notificationObj.setLanguage("English");;
notificationObj.setEmailAddress("[email protected]");;
notificationObj.setActionRouter("SendNowRouter");;
end
Невозможно сказать, действительно ли код Java и DRL, как показано, приводит к тому, что правило «Rule_Evaluation_15» всегда срабатывает. Если он не уволен, все свойства уведомления остаются пустыми, как вы заметили. – laune
Спасибо Laune. Но вы хотите понять, как это работает, когда мы выполняем Junit и возвращаем exepcted результаты. –
Вам нужно будет изучить весь код, который вы НЕ показывали, чтобы узнать причину. – laune