2014-08-29 3 views
1

После того, как правила обжига, как-то значение переменной элемента действия (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 
+0

Невозможно сказать, действительно ли код Java и DRL, как показано, приводит к тому, что правило «Rule_Evaluation_15» всегда срабатывает. Если он не уволен, все свойства уведомления остаются пустыми, как вы заметили. – laune

+0

Спасибо Laune. Но вы хотите понять, как это работает, когда мы выполняем Junit и возвращаем exepcted результаты. –

+0

Вам нужно будет изучить весь код, который вы НЕ показывали, чтобы узнать причину. – laune

ответ

0

код, кажется, работает прекрасно. У входящего объекта были некоторые опечатки, из-за которых совпадение правил прерывалось каждый раз, заставляя объект возвращать нулевые значения.

Смежные вопросы