【问题标题】:Drools action object member variables not set未设置 Drools 操作对象成员变量
【发布时间】:2014-08-29 13:18:58
【问题描述】:

触发规则后,不知何故未设置操作对象 (notificationObj) 成员变量值。但是,当我通过 Junit 测试类执行它时,它会按预期返回值。但是当战争被部署时,它返回空值。你能告诉我可能出了什么问题吗?

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("test@gmail.com");;
     notificationObj.setActionRouter("SendNowRouter");;
end

【问题讨论】:

  • 没有办法说 Java 和 DRL 代码是否会导致规则“Rule_Evaluation_15”被触发。如您所见,如果未触发,则所有 Notification 属性均保持为空。
  • 感谢 Laune。但是想了解当我们执行 Junit 并返回执行结果时它是如何工作的。
  • 您必须检查所有未显示的代码才能了解原因。

标签: java drools


【解决方案1】:

代码似乎运行良好。传入的对象有一些拼写错误,导致规则匹配每次都失败,从而导致对象返回空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2013-12-09
    • 2023-04-09
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多