[rules-users] Help debugging NPE
Dirk Bergstrom
dirk at juniper.net
Wed Jun 24 14:09:52 EDT 2009
Edson Tirelli was heard to exclaim, On 06/24/09 06:14:
> The problem seems not related to shadow facts, but to constraint
> resolution and fact data extraction. It might be a bug or not... need
> more info.
I've also seen the following stacktrace:
java.lang.ArrayIndexOutOfBoundsException: 40440
at org.drools.util.TupleIndexHashTable.toArray(TupleIndexHashTable.java:217)
at org.drools.reteoo.CollectNode.retractObject(CollectNode.java:260)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateRetractObject(SingleObjectSinkAdapter.java:32)
at org.drools.reteoo.AlphaNode.retractObject(AlphaNode.java:164)
at
org.drools.reteoo.SingleObjectSinkAdapter.propagateRetractObject(SingleObjectSinkAdapter.java:32)
at org.drools.reteoo.AlphaNode.retractObject(AlphaNode.java:164)
at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateRetractObject(CompositeObjectSinkAdapter.java:366)
at org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:189)
at org.drools.reteoo.Rete.retractObject(Rete.java:215)
at org.drools.reteoo.ReteooRuleBase.retractObject(ReteooRuleBase.java:211)
at
org.drools.reteoo.ReteooWorkingMemory.doRetract(ReteooWorkingMemory.java:79)
at
org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1023)
at
org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:982)
at
net.juniper.dash.data.DataSource.reconcileAssertedRecords(DataSource.java:362)
> In any case, the offending rule is not the one you showed. The
> offending rule contains a double beta constraint in a join:
I know it's not in that rule. It must be in this one, since it's the only one
that uses rli_nums:
$npi : NPIRecord( )
$pr : PRRecord( npi == "", rli != "" )
$rli : RLIRecord( id memberOf $pr.rli_nums, npi_program == $npi.synopsis )
> Can you narrow it down? Did you tried with Drools 5.0.1?
I haven't tried any of the 5.x series. Is there a guide to migrating my code
from 4.0 to 5.0? I looked on the jboss site, the wiki, the blog, and this
mailing list, but I didn't find anything. I'm under a lot of time pressure, and
changing to 5.0 doesn't look like a quick fix...
> 2009/6/24 Dirk Bergstrom <dirk at juniper.net <mailto:dirk at juniper.net>>
>
> I'm running into an NPE using Drools 4.0.7, and I'm stumped by it
> (stacktrace
> below). I made some changes to seemingly unrelated code, and this
> error started
> showing up. It would help me to understand what's going on if
> someone could
> tell me roughly what's going on here. Since the error is thrown by
> generated
> code (in what I assume is a shadow proxy), I can't tell what the
> offending null
> pointer is. I'm not even entirely sure what's triggering the bug
> (it happens
> half an hour into the run of big multi-threaded application with
> about 40K
> objects in the working memory).
>
> Is this happening because:
>
> *) getRli_nums() in one of my PRRecord objects is returning a null
> value?
>
> *) There is a null PRRecord object backing the shadow proxy?
>
> *) Some other thing is null?
>
> *) I'm running into a bug in Drools?
>
> I stuck in this rule:
>
> when
> $pr : PRRecord( rli_nums == null )
> then
> System.out.println($pr.getId());
> end
>
> And it didn't print anything, so I'm inclined to think that this is
> not a simple
> matter of something returning a null value...
>
> I'll be most appreciative of any help I can get.
>
> Here's the stacktrace:
>
> java.lang.NullPointerException
> at
> org.drools.base.net.juniper.dash.data.PRRecord13409648$getRli_nums.getValue(Unknown
> Source)
> at
> org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:127)
> at
> org.drools.base.evaluators.BaseMemberOfEvaluator.evaluateCachedRight(BaseMemberOfEvaluator.java:45)
> at
> org.drools.rule.VariableRestriction.isAllowedCachedRight(VariableRestriction.java:89)
> at
> org.drools.rule.VariableConstraint.isAllowedCachedRight(VariableConstraint.java:81)
> at
> org.drools.common.DoubleBetaConstraints.isAllowedCachedRight(DoubleBetaConstraints.java:164)
> at org.drools.reteoo.JoinNode.retractObject(JoinNode.java:189)
> at
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateRetractObject(CompositeObjectSinkAdapter.java:375)
> at
> org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:189)
> at org.drools.reteoo.Rete.retractObject(Rete.java:215)
> at
> org.drools.reteoo.ReteooRuleBase.retractObject(ReteooRuleBase.java:211)
> at
> org.drools.reteoo.ReteooWorkingMemory.doRetract(ReteooWorkingMemory.java:79)
> at
> org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1250)
> at
> org.drools.common.AbstractWorkingMemory.update(AbstractWorkingMemory.java:1203)
> at
> net.juniper.dash.data.DataSource.reconcileAssertedRecords(DataSource.java:409)
--
Dirk Bergstrom dirk at juniper.net
_____________________________________________
Juniper Networks Inc., Computer Geek
Tel: 408.745.3182 Fax: 408.745.8905
More information about the rules-users
mailing list