[rules-users] 5.3.0 CR1 has broken existing rules/flows

Edson Tirelli ed.tirelli at gmail.com
Mon Oct 3 16:15:33 EDT 2011


      One way of helping isolating the problem is to set a break point for a
NullPointerException. When the exception is raised do 2 things:

1. In the RuleTerminalNode where the NPE is generated, check the content of
the "rule" attribute. This will tell you the offending rule.

2. Check which reference is null in the offending line:

                item.setSalience( rule.getSalience().getValue( tuple,
                                                               this.rule,
                                                               workingMemory
) );
     Probably "item" is null.

     After that, it should be easy to isolate and simplify the 2 rules that
are raising the problem. The one with the modify in the consequence (R1) and
the other one where the NPE is occurring (R2).

     Finally, if you use the audit log, you can see the scenario where it
happens. It is probably activating R2 and before firing it, triggering a
modify that maintains it active, or some variation in the scenario.

     Once you have this data, it will be possible for us to analyze the case
and fix the problem.

     Edson


2011/10/3 Jamie <jshaw at llbean.com>

> I recently upgraded from 5.2.0 Final to 5.3.0 CR1 because I was
> experiencing
> memory leaks in 5.2.0 Final due to a known bug that was fixed in 5.3.0 CR1.
> I have a suite of FitNesse tests that exercise the majority of my rules and
> flows, and I can demonstrate that the memory leak is indeed fixed, but one
> of my tests is now failing.  If I revert back to 5.2.0 Final, all is well.
>
> I've been trying to determine the root cause for the past 3 days, but I'm
> not getting anywhere.  I suspect that it's related to an interaction
> between
> 2 rules, e.g. one rule modifies something that causes the second rule to
> fire, but the second rule chokes in the consequence when it tries to
> execute
> a modify() statement.  If I comment out the modify portion, the rule fires
> fine.
>
> I wish I could provide an example, but my implementation is too complex for
> that and I haven't been able to reproduce it in a stand-alone example.
>
> I know a stack trace probably won't tell you much, but I've included it
> below just in case.  If anyone has any ideas, I'd love to hear them.  If
> there's any additional information you think might help diagnose the
> problem, I'd be happy to provide it.
>
> Thanks,
> Jamie
>
> org.drools.runtime.rule.ConsequenceException: rule: Rule 022 - Load Buyer
> Activity
>
>        at
>
> org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
>        at
> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1101)
>        at
> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1029)
>        at
> org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1251)
>        at
>
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:708)
>        at
>
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:672)
>        at
>
> org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
>        at
>
> com.llbean.fraud.rule.engine.DroolsRulesEngine.invokeRules(DroolsRulesEngine.java:119)
>        at
>
> com.llbean.fraud.rule.engine.DroolsRulesEngine.invokeRules(DroolsRulesEngine.java:81)
>        at
>
> com.llbean.fraud.fitnesse.fixtures.tests.TestFraudRules.execute(TestFraudRules.java:116)
>        at fit.ColumnFixture.executeIfNeeded(ColumnFixture.java:57)
>        at fit.ColumnFixture.check(ColumnFixture.java:46)
>        at fit.Binding$QueryBinding.doCell(Binding.java:188)
>        at fit.ColumnFixture.doCell(ColumnFixture.java:37)
>        at fit.Fixture.doCells(Fixture.java:171)
>        at fit.Fixture.doRow(Fixture.java:165)
>        at fit.ColumnFixture.doRow(ColumnFixture.java:25)
>        at fit.Fixture.doRows(Fixture.java:159)
>        at fit.ColumnFixture.doRows(ColumnFixture.java:18)
>        at fit.Fixture.doTable(Fixture.java:153)
>        at fit.Fixture.interpretFollowingTables(Fixture.java:119)
>        at fit.Fixture.interpretTables(Fixture.java:105)
>        at fit.Fixture.doTables(Fixture.java:79)
>        at
>
> com.llbean.test.fitnesse.servletrunner.server.LLBFitServer.process(LLBFitServer.java:120)
>        at
>
> com.llbean.test.fitnesse.servletrunner.server.LLBFitServer.runTests(LLBFitServer.java:40)
>        at
>
> com.llbean.test.fitnesse.servletrunner.servlet.FitServlet.service(FitServlet.java:32)
>        at
>
> com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1530)
>        at
>
> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:829)
>        at
>
> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:458)
>        at
>
> com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:175)
>        at
>
> com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
>        at
> com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:862)
>        at
>
> com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
>        at
> com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:178)
>        at
>
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
>        at
>
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
>        at
>
> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
>        at
>
> com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
>        at
>
> com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
>        at
>
> com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
>        at
>
> com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
>        at
>
> com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
>        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
>        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
>        at
>
> com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
>        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
>        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
> Caused by: java.lang.NullPointerException
>        at
>
> org.drools.reteoo.RuleTerminalNode.createActivations(RuleTerminalNode.java:276)
>        at
>
> org.drools.reteoo.RuleTerminalNode.modifyLeftTuple(RuleTerminalNode.java:326)
>        at
>
> org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:273)
>        at
>
> org.drools.reteoo.EvalConditionNode.modifyLeftTuple(EvalConditionNode.java:234)
>        at
>
> org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyChildLeftTuple(CompositeLeftTupleSinkAdapter.java:295)
>        at org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:380)
>        at org.drools.reteoo.BetaNode.modifyLeftTuple(BetaNode.java:450)
>        at org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:446)
>        at
>
> org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateModifyObject(CompositeLeftTupleSinkAdapter.java:260)
>        at
>
> org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyObject(CompositeLeftTupleSinkAdapter.java:275)
>        at
>
> org.drools.reteoo.LeftInputAdapterNode.modifyObject(LeftInputAdapterNode.java:174)
>        at
>
> org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:461)
>        at
>
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:429)
>        at
> org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:277)
>        at
> org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:271)
>        at
> org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:459)
>        at
> org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:363)
>        at
>
> org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:298)
>        at
>
> com.llbean.droolstest.Rule_Rule_022___Load_Buyer_Activity.defaultConsequence(Rule_Rule_022___Load_Buyer_Activity.java:15)
>        at
>
> com.llbean.droolstest.Rule_Rule_022___Load_Buyer_ActivityDefaultConsequenceInvokerGenerated.evaluate(Unknown
> Source)
>        at
>
> com.llbean.droolstest.Rule_Rule_022___Load_Buyer_ActivityDefaultConsequenceInvoker.evaluate(Unknown
> Source)
>        at
> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1091)
>        ... 45 more
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/5-3-0-CR1-has-broken-existing-rules-flows-tp3390922p3390922.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
  Edson Tirelli
  JBoss Drools Core Development
  JBoss by Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20111003/4f3a0c1e/attachment.html 


More information about the rules-users mailing list