Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread Stephen Masters
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 gbor...@gmail.com 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.avgVolume0,
  
 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
 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
So move the math to the rhs? Will that resolve the issues in your opinion? 



--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-5-5-divide-by-0-exception-tp4026582p4026586.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
Could you expand upon why this is a poor practice? I assumed that if a part
of the pattern doesn't match the expression evaluation is terminated


laune 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 lt;

 stephen.masters@

 gt; 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 lt;

 gboro54@

 gt; 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.avgVolume0,
   
 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
 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread Wolfgang Laun
If the left hand side guarantees that a  0, a right hand side
expression b/a must be safe.
-W

On 01/11/2013, gboro54 gbor...@gmail.com wrote:
 So move the math to the rhs? Will that resolve the issues in your opinion?



 --
 View this message in context:
 http://drools.46999.n3.nabble.com/Drools-5-5-divide-by-0-exception-tp4026582p4026586.html
 Sent from the Drools: User forum mailing list archive at Nabble.com.
 ___
 rules-users mailing list
 rules-users@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread Stephen Masters
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.l...@gmail.com 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.mast...@me.com 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 gbor...@gmail.com 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.avgVolume0,

 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
 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
I changed the rules to the following so I will test and see:

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, 
  
$total:volumeAccumulations[total],$avg:consolidatdVolume.avgVolume) 
then 
ConcurrentMap calculatedRatios=$firm.getCalculatedRatios(); 
calculatedRatios.put(participationRatio,new
BigDecimal($total/$avg)); 
modify($firm){setCalculatedRatios(calculatedRatios)}; 
end 



--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-5-5-divide-by-0-exception-tp4026582p4026589.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
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 lt;

 wolfgang.laun@

 gt; 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 lt;

 stephen.masters@

 gt; 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 lt;

 gboro54@

 gt; 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.avgVolume0,
  
 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 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread Wolfgang Laun
I haven't read a statement yet that says that, in Drools, LHS terms,
separated by a comma (!) must be executed in the order they are
written, or that the C/Java semantics for logical expression
evaluation is applied.

-W


On 01/11/2013, gboro54 gbor...@gmail.com wrote:
 Could you expand upon why this is a poor practice? I assumed that if a part
 of the pattern doesn't match the expression evaluation is terminated


 laune 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 lt;

 stephen.masters@

 gt; 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 lt;

 gboro54@

 gt; 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.avgVolume0,

 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
 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
I made an assumption(thus why I am asking) for future cases I will use the 
separator to handle such cases as I would assume saying something like this
would work:

Object(a0  b0  a/b  100)


laune wrote
 I haven't read a statement yet that says that, in Drools, LHS terms,
 separated by a comma (!) must be executed in the order they are
 written, or that the C/Java semantics for logical expression
 evaluation is applied.
 
 -W
 
 
 On 01/11/2013, gboro54 lt;

 gboro54@

 gt; wrote:
 Could you expand upon why this is a poor practice? I assumed that if a
 part
 of the pattern doesn't match the expression evaluation is terminated


 laune 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 lt;

 stephen.masters@

 gt; 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 lt;

 gboro54@

 gt; 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.avgVolume0,
   
 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 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
Another question(on error interpretation) the stack trace seems to indicate
an issue with the consequence and not the condition. Should it be assumed
that seeing such errors could indicate an issue on either side of the rule?  



--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-5-5-divide-by-0-exception-tp4026582p4026594.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread Davide Sottara
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 lt;
 wolfgang.laun@
 gt; 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 lt;
 stephen.masters@
 gt; 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 lt;
 gboro54@
 gt; 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.avgVolume0,
 
 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
 

Re: [rules-users] Drools 5.5 divide by 0 exception

2013-11-01 Thread gboro54
$firm should be $context...To post the rule in the public sphere I had to
modify some variables(legal company issues :-) ). The same goes for the rule
name(my replacement of text is not very good).

I understand Wolfgang's point...I just made a poor assumption(something as
someone who has used drools for several years I shouldn't have done...every
once and a while I guess I get a brain fart)


Davide Sottara wrote
 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 lt;
 wolfgang.laun@
 gt; 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 lt;
 stephen.masters@
 gt; 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 lt;
 gboro54@
 gt; 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.avgVolume0,

 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