规则的异常执行结果(Drools、Guvnor、JBPM5)

规则的异常执行结果(Drools、Guvnor、JBPM5),drools,jbpm,guvnor,Drools,Jbpm,Guvnor,我是BPM新手,使用JBPM5.4安装程序 下面是取自Guvnor的my drl源代码。。 当触发规则时,我得到了错误 rule "TestRule" dialect "java" when exists (Person( name == "estaban" )) then Person.setName( "ESTABAN" ); end 堆栈跟踪: Exception in thread

我是BPM新手,使用JBPM5.4安装程序

下面是取自Guvnor的my drl源代码。。 当触发规则时,我得到了错误

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

您需要将左侧的事实绑定到变量。重新这样写:

rule "TestRule"
    dialect "java"
when
    $person: Person( name == "estaban" )
then
    $person.setName( "ESTABAN" );
    update( $person );
end
要在Guvnor中执行此操作,当您添加/修改约束时,将看到“修改个人约束”对话框。您需要在“变量名”文本框中键入变量名,如“$person”

这将导致其更改生成的DRL,从:

Person( name == "estaban" )
致:


在LHS上绑定变量后,需要修改RHS。选择“修改现有事实的字段”选项。然后,您需要从提供的列表中选择变量名,并提供要修改的属性的详细信息。

或者,您可以修改事实,这应该会更有效<代码>修改($person){setName(“ESTABAN”)}我通过引导规则形成了规则。因此,MEI无法更改代码如果您通过Guvnor中的引导式规则编辑器执行此操作,则需要将LHS上的Person绑定到变量($Person),然后在RHS上修改绑定的变量。
$person: Person( name == "estaban" )