[jboss-jira] [JBoss JIRA] Commented: (JBRULES-2810) NullPointerException in Drools 5.1.1 - retractLeftTuple()

Mark Proctor (JIRA) jira-events at lists.jboss.org
Thu Dec 23 11:14:17 EST 2010


    [ https://issues.jboss.org/browse/JBRULES-2810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12572214#comment-12572214 ] 

Mark Proctor commented on JBRULES-2810:
---------------------------------------

This means the NPE is in evaluation of the actual expression:
    at com.wellsfargo.GeneratedRules.Rule_RS8247_3_3_RF6366_54_50012769_0.predicate0(Rule_RS8247_3_3_RF6366_54_50012769_0.java:9)
    at com.wellsfargo.GeneratedRules.Rule_RS8247_3_3_RF6366_54_50012769_0Predicate0Invoker.evaluate(Rule_RS8247_3_3_RF6366_54_50012769_0Predicate0Invoker.java:23)
    at org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:272)

The actual expression shows it's an implicit field:
        Employment
        (
            parentId == $parentBorrowerId
            , $parentEmploymentId : myId
            , selfEmployedIndicator == true
            , eval(((employmentDuration.getYear() * 12) + employmentDuration.getMonth())>= 12)
            , eval(((employmentDuration.getYear() * 12) + employmentDuration.getMonth())<  24)
        )

My gut feeling here is the problem is simple, employmentDuration is null. There is a very each check for this. Make a boolean method that returns true that takes "this" is a parameter

boolean dump(Employment employment) {
   log( employment + ":" + employment.getEmploymentDuration() )
}

            , eval( dump( this ) && ((employmentDuration.getYear() * 12) + employmentDuration.getMonth())>= 12)
            , eval( dump( this ) && ((employmentDuration.getYear() * 12) + employmentDuration.getMonth())<  24)

The above should illustrate this. I believe this is probably related to user error code and not related to the original report which we do believe to be a bug.

Mark

> NullPointerException in Drools 5.1.1 - retractLeftTuple()
> ---------------------------------------------------------
>
>                 Key: JBRULES-2810
>                 URL: https://issues.jboss.org/browse/JBRULES-2810
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: drools-core
>    Affects Versions: 5.1.1.FINAL
>         Environment: WIndows Server 2K3 (32-bit) - JBoss 5 AS, Drools 5.1.1 Final, 
>            Reporter: Tom Murphy
>            Assignee: Mark Proctor
>
> We recently switched to Drools 5.1.1 in our testing environments, and we are seeing a NullPointerException on a number of rule base / test case combinations. These all worked fine in 5.0.1. 
> The rule in question is relatively simple, but the rule base is complex. 
> It's difficult to send a test case, because the exception appears to occur only in large rule bases and layered rule flows.
> We have had to roll back to Drools 5.0.1 and are unable to adopt 5.1.1 until this is resolved.
> The relevant stack trace info is below. 
> com.wellsfargo.ARGenT.Execution.ARGenTRunTimeException - org.drools.runtime.rule.ConsequenceException: rule: RS7673.1.3_RF6365_83_50011728
> ...
> Caused by:
> rule: RS7673.1.3_RF6365_83_50011728
> 	at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
> 	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927)
> 	at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856)
> 	at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071)
> 	at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785)
> 	at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751)
> 	at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
> ...
> Caused by:
> null
> 	at org.drools.reteoo.RightInputAdapterNode.retractLeftTuple(RightInputAdapterNode.java:154)
> 	at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:217)
> 	at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateRetractRightTuple(SingleLeftTupleSinkAdapter.java:124)
> 	at org.drools.reteoo.JoinNode.retractRightTuple(JoinNode.java:151)
> 	at org.drools.reteoo.ModifyPreviousTuples.retractTuples(ModifyPreviousTuples.java:132)
> 	at org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:176)
> 	at org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1442)
> 	at org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1349)
> 	at org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:183)
> 	at org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:196)
> 	at com.wellsfargo.GeneratedRules.Rule_RS7673_1_3_RF6365_83_50011728_0.defaultConsequence(Rule_RS7673_1_3_RF6365_83_50011728_0.java:9)
> 	at com.wellsfargo.GeneratedRules.Rule_RS7673_1_3_RF6365_83_50011728_0DefaultConsequenceInvoker.evaluate(Rule_RS7673_1_3_RF6365_83_50011728_0DefaultConsequenceInvoker.java:29)
> 	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917)
> 	at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856)
> 	at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071)
> 	at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785)
> 	at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751)
> 	at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
> ...
> The line identified in in the exception from retractLeftTuple is in the for loop, and it references factHandle without first checking for null:
>         // retrieve handle from memory
>         final InternalFactHandle factHandle = (InternalFactHandle) memory.remove( tuple );
>  >>>>>> for ( RightTuple rightTuple = factHandle.getFirstRightTuple(); rightTuple != null; rightTuple = (RightTuple) rightTuple.getHandleNext() ) {
>             rightTuple.getRightTupleSink().retractRightTuple( rightTuple,
>                                                               context,
>                                                               workingMemory );
>         }
>         factHandle.setFirstRightTuple( null );

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list