Исключение, исполняющее следствие для правила (Drools, Guvnor, JBPM5)

Я новичок в BPM, используя установщик JBPM5.4.

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

rule "TestRule"
        dialect "java"
        when
            exists (Person( name == "estaban" ))
        then
            Person.setName( "ESTABAN" );
    end

Трассировки стека:

Exception in thread "main" Exception executing consequence for rule "TestRule" in com.tcs: java.lang.NullPointerExceptio
n
    at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.j
ava:39)
    at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1297)
    at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1221)
    at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1456)
    at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)
    at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)
    at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:230)
    at com.sample.ProcessMain.main(ProcessMain.java:41)
Caused by: java.lang.NullPointerException
    at com.tcs.Rule_TestRule_063717b0a0b841d3ae5b0d9fa14879f8.defaultConsequence(Rule_TestRule_063717b0a0b841d3ae5b0d9fa148
79f8.java:7)
    at com.tcs.Rule_TestRule_063717b0a0b841d3ae5b0d9fa14879f8DefaultConsequenceInvokerGenerated.evaluate(Unknown Source)
    at com.tcs.Rule_TestRule_063717b0a0b841d3ae5b0d9fa14879f8DefaultConsequenceInvoker.evaluate(Unknown Source)
    at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1287)
    ... 6 more

1 ответ

Вам нужно связать факт, найденный в левой части, с переменной. Переписать так:

rule "TestRule"
    dialect "java"
when
    $person: Person( name == "estaban" )
then
    $person.setName( "ESTABAN" );
    update( $person );
end

Чтобы сделать это в Guvnor, когда вы добавите / измените ограничение, вы увидите диалоговое окно "Изменить ограничения для персоны". Вам необходимо ввести имя переменной, например "$person", в текстовое поле "Имя переменной".

Это заставит его изменить сгенерированный DRL:

Person( name == "estaban" )

чтобы:

$person: Person( name == "estaban" )

После того, как вы связали переменную в LHS, вам нужно изменить RHS. Выберите опцию "Изменить поле существующего факта". Затем вам нужно выбрать имя вашей переменной из предоставленного списка и указать, какое свойство нужно изменить.

Другие вопросы по тегам