我对以下规则有疑问:
rule "Término sin Traducción"
salience -100
dialect "mvel"
when
traductor : TraductorDeEventosTratados()
eventoGenerico : EventoGenerico() from traductor.eventoGenerico
then
System.out.println("Evento generico: " + eventoGenerico);
traductor.setEventoGenerico( null );
update( traductor );
retract( eventoGenerico );
end
当收回“eventoGenerico”时,它会导致一个NullPointerException
,就好像它不存在于工作内存中(它实际上存在,并且另一个规则将它设置eventoGenerico
为traductor
之前):
Exception executing consequence for rule "Término sin Traducción" in RULA_PROV.SYSTEM_RULES: [Error: drools.retract( eventoGenerico ): null]
[Near : {... System.out.println("Evento gen ....}]
^
[Line: 1, Column: 1]
at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1297)
但是,如果我进行这个小改动,它就可以正常工作(这验证了 eventtoGenerico 确实存在于工作内存中):
rule "Término sin Traducción"
salience -100
dialect "mvel"
when
traductor : TraductorDeEventosTratados()
eventoGenerico : EventoGenerico()
eventoGenerico2 : EventoGenerico( this == eventoGenerico ) from traductor.eventoGenerico
then
System.out.println("Evento generico: " + eventoGenerico);
traductor.setEventoGenerico( null );
update( traductor );
retract( eventoGenerico );
end
它看起来像一个错误,有什么想法吗?
提前致谢