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-tp4026...
>>>> Sent from the Drools: User forum mailing list archive at
Nabble.com.
>>>> _______________________________________________
>>>> rules-users mailing list
>>>>
> rules-users@.jboss
>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>>
> rules-users@.jboss
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>> _______________________________________________
>> rules-users mailing list
>>
> rules-users@.jboss
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>
> _______________________________________________
> rules-users mailing list
> rules-users@.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-tp4026...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users