[rules-users] Drools 5.5 divide by 0 exception

Davide Sottara dsotty at gmail.com
Fri Nov 1 14:35:30 EDT 2013


Am I wrong or these are not the (only) rules that are being run?

1) The exception is thrown as the consequence of a rule called

com.nasdaq.rms.nq.status.Rule_Calculate_Firm_Participation_Ratio_cfb033f33c2b404fb2bff8e1b9af0175

"Rule Calculate Firm Participation Ratio", which is not shown.

2) The Rule "Add baseline to context..." modifies a $firm which is not
bound anywhere
in that rule..

3) Looking at the stack trace, the consequence happens in a MVEL
Constraint, which
is in an Alpha Node immediately after an ObjectTypeNode. This usually
means that
the failing constraint is the first in the pattern, which is not the
case in your
"Calculate  Participation Ratio".
(to Wolfgang's point: it is not mandatory, since "and" is commutative,
but this is what
usually happens in practice)

You also have multiple threads... is that "avgVolume" computed using an
accumulate
somewhere? I wonder if there are critical races.....

On 11/01/2013 11:17 AM, gboro54 wrote:
> Agreed. In this case it is possible to move to the RHS...but I have to ask
> what if I need to use the math as part of a constraint. Is it not safe to
> assume the divisor is 0 even if I do the check? That seems like an issue as
> I do have cases which this will be required
>
>
> Stephen Masters wrote
>> Given that you don’t seem to using the result as a constraint, then I
>> can’t see any benefit to it being on the LHS. So yes, It would be better
>> on the RHS.
>>
>> Steve
>>
>>
>> On 1 Nov 2013, at 17:58, Wolfgang Laun <
>> wolfgang.laun@
>> > wrote:
>>
>>> I can anticipate the answer where OP says that there is a constraint
>>> restricting argVolume to > 0. However, I don't think that independent
>>> constraints such as we see them in this rule are evaluated as if they
>>> were in a single logical expression, with Java semantics.
>>>
>>> The seductive possibility of binding to a half-baked expression (i.e.,
>>> $ratio:(volumeAccumulations["total"]/consolidatdVolume.avgVolume))
>>> should be discarded. This value can safely be computed on the RHS
>>> where the denominator's  value being !=0 is asserted.
>>>
>>> -W
>>>
>>> On 01/11/2013, Stephen Masters <
>> stephen.masters@
>> > wrote:
>>>> Divide by zero exceptions usually occur when you try to divide by zero.
>>>>
>>>> So … first question … is consolidatdVolume.avgVolume ever zero?
>>>>
>>>>
>>>> On 1 Nov 2013, at 16:17, gboro54 <
>> gboro54@
>> > wrote:
>>>>> I have rules like the following:
>>>>>
>>>>> rule "Add Baseline to Context if it does not exists exists or not
>>>>> greater
>>>>> then 0"
>>>>> 	no-loop true
>>>>> 	when
>>>>> 		$context:Context($id:id,baselineParticipation==null ||
>>>>> 				
>>>>> baselineParticipation.baselineRatio==null||baselineParticipation.baselineRatio==0)
>>>>> 	then
>>>>> 		modify($firm) {setBaselineParticipation(new
>>>>> BaselineParticipation($id,new
>>>>> BigDecimal(0.00485)))};
>>>>> 		
>>>>> end
>>>>>
>>>>> rule "Calculate Participation Ratio"
>>>>> 	no-loop true
>>>>> 	when
>>>>> 	
>>>>> $context:Context(consolidatdVolume!=null,consolidatdVolume.avgVolume>0,
>>>>> 				  
>>>>> volumeAccumulations["total"]!=null,volumeAccumulations["total"]>0,
>>>>> 				  
>>>>> $ratio:(volumeAccumulations["total"]/consolidatdVolume.avgVolume))
>>>>> 	then
>>>>> 		ConcurrentMap calculatedRatios=$firm.getCalculatedRatios();
>>>>> 		calculatedRatios.put("fparticipationRatio",new BigDecimal($ratio));
>>>>> 		modify($firm){setCalculatedRatios(calculatedRatios)};
>>>>> end
>>>>>
>>>>> Despite the checks I get the following exception and any insight into
>>>>> why
>>>>> would be great:
>>>>>
>>>>> Exception executing consequence for rule "Calculate Firm Participation
>>>>> Ratio" in com.nasdaq.rms.nq.status: java.lang.ArithmeticException: / by
>>>>> zero
>>>>> Exception executing consequence for rule "Calculate Firm Participation
>>>>> Ratio" in com.nasdaq.rms.nq.status: java.lang.ArithmeticException: / by
>>>>> zero
>>>>> 	at
>>>>> org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
>>>>> 	at
>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1297)
>>>>> 	at
>>>>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1221)
>>>>> 	at
>>>>> org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1456)
>>>>> 	at
>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)
>>>>> 	at
>>>>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)
>>>>> 	at
>>>>> org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:230)
>>>>> 	at
>>>>> com.nasdaq.fq.rms.workflow.processor.rules.PerformanceStatusAssignmentProcessor.doWork(PerformanceStatusAssignmentProcessor.java:156)
>>>>> 	at
>>>>> com.ften.ssr.workqueue.WorkItemRunnable.run(WorkItemRunnable.java:48)
>>>>> 	at
>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>>>>> 	at
>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>>>> 	at java.lang.Thread.run(Thread.java:724)
>>>>> Caused by: java.lang.ArithmeticException: / by zero
>>>>> 	at ConditionEvaluatorda6271cf5a744b6bbdb9c717cae2edb7.evaluate(Unknown
>>>>> Source)
>>>>> 	at
>>>>> org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:200)
>>>>> 	at
>>>>> org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157)
>>>>> 	at org.drools.reteoo.AlphaNode.modifyObject(AlphaNode.java:154)
>>>>> 	at
>>>>> org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:507)
>>>>> 	at
>>>>> org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:432)
>>>>> 	at org.drools.reteoo.AlphaNode.modifyObject(AlphaNode.java:157)
>>>>> 	at
>>>>> org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:507)
>>>>> 	at
>>>>> org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:432)
>>>>> 	at
>>>>> org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:314)
>>>>> 	at
>>>>> org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:265)
>>>>> 	at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:483)
>>>>> 	at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:383)
>>>>> 	at
>>>>> org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:337)
>>>>> 	at
>>>>> com.nasdaq.rms.nq.status.Rule_Calculate_Firm_Participation_Ratio_cfb033f33c2b404fb2bff8e1b9af0175.defaultConsequence(Unknown
>>>>> Source)
>>>>> 	at
>>>>> com.nasdaq.rms.nq.status.Rule_Calculate_Firm_Participation_Ratio_cfb033f33c2b404fb2bff8e1b9af0175DefaultConsequenceInvokerGenerated.evaluate(Unknown
>>>>> Source)
>>>>> 	at
>>>>> com.nasdaq.rms.nq.status.Rule_Calculate_Firm_Participation_Ratio_cfb033f33c2b404fb2bff8e1b9af0175DefaultConsequenceInvoker.evaluate(Unknown
>>>>> Source)
>>>>> 	at
>>>>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1287)
>>>>> 	... 10 more
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://drools.46999.n3.nabble.com/Drools-5-5-divide-by-0-exception-tp4026582.html
>>>>> Sent from the Drools: User forum mailing list archive at Nabble.com.
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>>
>> rules-users at .jboss
>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>>
>> rules-users at .jboss
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>> _______________________________________________
>>> rules-users mailing list
>>>
>> rules-users at .jboss
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at .jboss
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> --
> View this message in context: http://drools.46999.n3.nabble.com/Drools-5-5-divide-by-0-exception-tp4026582p4026591.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



More information about the rules-users mailing list