[rules-users] accumulate vs collect

rouvas at di.uoa.gr rouvas at di.uoa.gr
Fri Nov 12 12:40:40 EST 2010


Edson Tirelli wrote:
>    Can you show us the stack trace? What version of Drools are you using?

I am using Drools.5.0.1.

For this accumulate:

v945 : Number ( doubleValue  >=  1 ) from accumulate ( p : t_1 (  c_6 >=
20100512 && c_7 == "5" ) , count(p) )

stack trace follows:

EXCEPTION ERROR
java.lang.ClassCastException: gr.fbi.rulez.t_1
org.drools.rule.Accumulate.accumulate(Accumulate.java:172)
org.drools.reteoo.AccumulateNode.modifyTuple(AccumulateNode.java:424)
org.drools.reteoo.AccumulateNode.assertObject(AccumulateNode.java:284)
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:147)
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:147)
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:185)
org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:146)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1046)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1001)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:788)
org.drools.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:216)
utils.LoadDynEntities.load(LoadDynEntities.java:102)
gr.fbi.rulez.RulesRunner.ignite(RulesRunner.java:74)
...more irrelevant stuff..

-Stathis


>
>    In Drools 5.1+, collect is just syntax sugar... internally, collect
> is implemented using accumulate.
>
>    Edson
>
> 2010/11/11  <rouvas at di.uoa.gr>:
>> Hi List,
>>
>> I'm trying to count the number of objects I have in the Working Memory
>> using accumulate, but I'm having a ClassCastException thrown at me.
>>
>> Using a variant with collect, everything work OK.
>>
>> Can someone shed some light on this issue?
>> Is it related to https://jira.jboss.org/browse/JBRULES-2202 ?
>>
>> I'm using Drools.5.0.1 and the fact is a declared one, as follows:
>>
>> declare t_1
>>  regRowId : String
>>  versionId : String
>>  c_7 : String
>>  c_1 : String
>>  c_2 : String
>>  c_3 : String
>>  c_4 : String
>>  c_5 : String
>>  c_6 : Double
>> end
>>
>> trying with :
>>
>> v945 : Number ( doubleValue  >=  1 ) from accumulate ( p : t_1 (  c_6 >=
>> 20100511 && c_7 == "5" ) , count(p) )
>>
>> I'm getting a ClassCastException:t_1, while using :
>>
>> v945 : ArrayList ( size  >=  1 ) from collect ( t_1 (  c_6 >= 20100511
>> &&
>> c_7 == "5" )  )
>>
>> works OK.
>>
>> The reason I'm preferring accumulate over collect, is that I'm not
>> really
>> interested in constructing an ArrayList of the matched facts (worries
>> about memory consumption), all I want is how many of them are there.
>>
>> The actual rule I'm using (although I don't think it matters) for the
>> accumulate variant, is:
>>
>> rule "r95944.6"
>>        dialect "mvel"
>>        when
>>                gnId : GoodNumbers()
>>                 LogicalValue : Trader( gnId.goodNo==goodNo  )
>>                 v945 : Number ( doubleValue  >=  1 ) from accumulate ( p
>> : t_1 (  c_6
>>>= 20100511 && c_7 == "5" ) , count(p) )
>>        then
>>                RaResultCode rrc = new RaResultCode();
>>                  rrc.setResultRuleId("95944");
>>                  rrc.setResultRuleVersionId("6");
>>                  rrc.setResultColor("R");
>>                  rrc.setResultRuleCode("01");
>>                  rrc.setResultAction("1");
>>                  rrc.setResultGoodNo(gnId.goodNo);
>>                insertLogical(rrc);
>> end
>>
>> Thank you for your time.
>>
>> -Stathis
>>
>>
>> _______________________________________________
>> 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
>





More information about the rules-users mailing list