[jboss-jira] [JBoss JIRA] (JBRULES-3293) Array size restriction causes collect/accumulute to fail
Pavel Kudryashov (Created) (JIRA)
jira-events at lists.jboss.org
Fri Nov 18 04:31:41 EST 2011
Array size restriction causes collect/accumulute to fail
--------------------------------------------------------
Key: JBRULES-3293
URL: https://issues.jboss.org/browse/JBRULES-3293
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: drools-core
Affects Versions: 5.3.0.Beta1
Reporter: Pavel Kudryashov
Assignee: Mark Proctor
If try to create ArrayList by collect with size restriction and then execute accumulate on it, environment fails. If remove ArrayList size restriction or don't use accumulate, everything works fine.
Here is the example code.
==================================================
rule "Large transaction"
when
//select last 3 transaction
$lastTransactions : ArrayList(size == 3) from collect(TransactionCompleted() over window:length(3))
//calculate average sum
accumulate(TransactionCompleted($amount : amount) from $lastTransactions, $averageAmount : average($amount))
//find large transactions
$largeTransaction : TransactionCompleted(amount > 2 * $averageAmount) over window:length(1)
then
situationsReporter.report("Large transaction");
end
==================================================
If rewrite the code the other way it works fine:
==================================================
rule "Large transaction"
when
//select last 3 transaction
$lastTransactions : ArrayList() from collect(TransactionCompleted() over window:length(3))
//calculate average sum
accumulate(TransactionCompleted($amount : amount) from $lastTransactions, $averageAmount : average($amount))
//check if we have exactly 3 transactions
eval($lastTransactions.size() == 3)
//find large transactions
$largeTransaction : TransactionCompleted(amount > 2 * $averageAmount) over window:length(1)
then
situationsReporter.report("Large transaction");
end
==================================================
But if in the latter piece of code move eval($lastTransactions.size() == 3) above accumulate() it will fail the same as the first piece of code:
==================================================
Exception in thread "Thread-4" org.drools.runtime.rule.ConsequenceException: rule: Transaction completed
at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1093)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1022)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1243)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)
at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
at org.siemens.reaf.reasoning.cep.DroolsEngine.processEvents(DroolsEngine.java:393)
at org.siemens.reaf.reasoning.cep.SensorEventsProcessor$ProcessingWorker.run(SensorEventsProcessor.java:36)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.drools.reteoo.ReteooWorkingMemory$EvaluateResultConstraints.execute(ReteooWorkingMemory.java:576)
at org.drools.common.PropagationContextImpl.evaluateActionQueue(PropagationContextImpl.java:265)
at org.drools.rule.SlidingLengthWindow.assertRightTuple(SlidingLengthWindow.java:114)
at org.drools.rule.BehaviorManager.assertRightTuple(BehaviorManager.java:84)
at org.drools.reteoo.AccumulateNode.assertObject(AccumulateNode.java:247)
at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:451)
at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:379)
at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:204)
at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:241)
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:332)
at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:293)
at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:905)
at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:180)
at org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:174)
at org.siemens.reaf.reasoning.cep.Rule_Transaction_completed_0.defaultConsequence(Rule_Transaction_completed_0.java:9)
at org.siemens.reaf.reasoning.cep.Rule_Transaction_completed_0DefaultConsequenceInvoker.evaluate(Rule_Transaction completed_0DefaultConsequenceInvoker.java:36)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1083)
... 8 more
==================================================
Thank you.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list