Re: [rules-users] How to design a rule using collect for filtering? Thanks.

2007-08-15 Thread Anh Vuong
Thanks for your help, Edson. 
  collect works in my simple test now, but not when I integrate with my code. 
Is there an easy way to debug LHS to see if collect stmt is evaluated?  I 
notice IllegalAccessError
 since my app will load a selected list of jars upfront, so my questions are:
  1) Can this error break collect?
  2) How can I fix this error still using our own classLoader?
   
  Here is the stack trace:
  2007 Aug 15, 09:08:13:193Exception IllegalAccessError
java.lang.IllegalAccessError: class 
org.drools.reteoo.InitialFactImplShadowProxy cannot access its superclass 
org.drools.reteoo.Init
ialFactImpl
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at 
org.drools.rule.MapBackedClassLoader.fastFindClass(MapBackedClassLoader.java:60)
at 
org.drools.rule.MapBackedClassLoader.loadClass(MapBackedClassLoader.java:79)
at java.lang.ClassLoader.loadClass(Unknown Source)
at 
org.drools.reteoo.Rete$ObjectTypeConf.loadOrGenerateProxy(Rete.java:379)
at 
org.drools.reteoo.Rete$ObjectTypeConf.defineShadowProxyData(Rete.java:344)
at org.drools.reteoo.Rete$ObjectTypeConf.init(Rete.java:320)
at org.drools.reteoo.Rete.assertObject(Rete.java:145)
at 
org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:190)
at 
org.drools.reteoo.ReteooWorkingMemory$WorkingMemoryReteAssertAction.execute(ReteooWorkingMemory.java:163)
at 
org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:1241)
at 
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:858)
at 
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:822)
at 
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:623)

   
  Thanks,
  -av
   
  
Edson Tirelli [EMAIL PROTECTED] wrote:
  
   No single simple answer here. You need to check what would better fit your 
use case. 
   The thing is: it is not possible to limit the number of matches to a collect 
statement... all matching instances WILL match it and be collected. 

   No really clean way I can think about, but a few possible options (haven't 
executed them, but shall work):

1. Simply execute the actions multiple times in the consequence:

  when 
 eventList : LinkedList( $size : size = 5 ) from collect( Event(text 
matches .*rule5.* )) 
then
   for( int i = 0; i  $size/5; i++ )

 System.out.println(rule5 is fired  + eventList.size ()); 

end

2. Flag used facts:

  when
 eventList : LinkedList( size = 5 ) from collect( Event(text matches 
.*rule5.*, processed == false )) 
then
   System.out.println(rule5 is fired  + eventList.size()); 
   for( int i = 0; i  5; i++ ) {
   Event e = (Event) eventList.get ( i );
   e.setProcessed( true );
   update( e ); 

 }

end

2. Retract used facts:

  when
 eventList : LinkedList( size = 5 ) from collect( Event(text matches 
.*rule5.* )) 
then
   System.out.println(rule5 is fired  + eventList.size()); 
   for( int i = 0; i  5; i++ ) {
   Event e = (Event) eventList.get( i ); 
   retract( e ); 

 }

end

Hope it helps.

Edson

  2007/8/10, Anh Vuong [EMAIL PROTECTED]:Hi,
  I'd like to use keyword collect to do my filtering but its behaviour confused 
me, please advise. I greatly appreciate your help.
   
  Problem 1:
   
  when 
  eventList : LinkedList(size == 5)
  from collect( Event(text matches 
.*rule5.* ))   
  
then   System.out.println(
rule5 is fired  + eventList.size());
  I still do not see any log msg after adding 5+ events. Is something wrong 
with my rule?
   
  Problem 2:
   
  when
  event: Event(text matches .*rule5.* ))
  eventList : LinkedList(size == 5)
  from collect( Event(text == event.text)
  
  
then   System.out.println(
rule5 is fired  + eventList.size());
  After adding 5 events, I see 5 log msg instead of one as I'd expect. 
  If I add more events, I will see more log. How do I tell LHS  to reset the 
count from 0.
  Basically, I want to take 1 event out of 5 similar events (suppressing 
filtering). So if there are 10 similar events, my RHS should activate 2 times, 
not 10 times. 
   
  Thanks,
  -av
   
  
  
-
  Ready for the edge of your seat? Check out tonight's top picks on Yahoo! TV.  
 

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





-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com 
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


   
-
Park yourself in front of a world of choices in 

Re: [rules-users] How to design a rule using collect for filtering? Thanks.

2007-08-15 Thread Edson Tirelli
This is a regression bug. InitialFact should not be shadowed. Can you
please open a JIRA for that?

   Thank you
  Edson

2007/8/15, Anh Vuong [EMAIL PROTECTED]:

 Thanks for your help, Edson.
 collect works in my simple test now, but not when I integrate with my
 code. Is there an easy way to debug LHS to see if collect stmt is
 evaluated?  I notice IllegalAccessError
  since my app will load a selected list of jars upfront, so my questions
 are:
 1) Can this error break collect?
 2) How can I fix this error still using our own classLoader?

 Here is the stack trace:
 2007 Aug 15, 09:08:13:193Exception IllegalAccessError
 java.lang.IllegalAccessError: class
 org.drools.reteoo.InitialFactImplShadowProxy cannot access its superclass
 org.drools.reteoo.Init
 ialFactImpl
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(Unknown Source)
 at org.drools.rule.MapBackedClassLoader.fastFindClass(
 MapBackedClassLoader.java:60)
 at org.drools.rule.MapBackedClassLoader.loadClass(
 MapBackedClassLoader.java:79)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at org.drools.reteoo.Rete$ObjectTypeConf.loadOrGenerateProxy(
 Rete.java:379)
 at org.drools.reteoo.Rete$ObjectTypeConf.defineShadowProxyData(
 Rete.java:344)
 at org.drools.reteoo.Rete$ObjectTypeConf.init(Rete.java:320)
 at org.drools.reteoo.Rete.assertObject(Rete.java:145)
 at org.drools.reteoo.ReteooRuleBase.assertObject(
 ReteooRuleBase.java:190)
 at
 org.drools.reteoo.ReteooWorkingMemory$WorkingMemoryReteAssertAction.execute
 (ReteooWorkingMemory.java:163)
 at org.drools.common.AbstractWorkingMemory.executeQueuedActions(
 AbstractWorkingMemory.java:1241)
 at org.drools.common.AbstractWorkingMemory.insert(
 AbstractWorkingMemory.java:858)
 at org.drools.common.AbstractWorkingMemory.insert(
 AbstractWorkingMemory.java:822)
 at org.drools.common.AbstractWorkingMemory.insert(
 AbstractWorkingMemory.java:623)

 Thanks,
 -av


 *Edson Tirelli [EMAIL PROTECTED]* wrote:


No single simple answer here. You need to check what would better fit
 your use case.
The thing is: it is not possible to limit the number of matches to a
 collect statement... all matching instances WILL match it and be collected.

No really clean way I can think about, but a few possible options
 (haven't executed them, but shall work):

 1. Simply execute the actions multiple times in the consequence:

 when
eventList : LinkedList( $size : size = 5 ) from collect( Event(text
 matches .*rule5.* ))
 *then
for( int i = 0; i  $size/5; i++ )
 *
System.out.println(rule5 is fired  + eventList.size ());
 end

 2. Flag used facts:

 when
eventList : LinkedList( size = 5 ) from collect( Event(text matches
 .*rule5.*, processed == false ))
 *then
 *   System.out.println(rule5 is fired  + eventList.size());
 *   for( int i = 0; i  5; i++ ) {
Event e = **(Event) eventList.get ( i );**
e.setProcessed( true );
update( e );
 *
}
 end

 2. Retract used facts:

 when
eventList : LinkedList( size = 5 ) from collect( Event(text matches
 .*rule5.* ))
 *then
 *   System.out.println(rule5 is fired  + eventList.size());
 *   for( int i = 0; i  5; i++ ) {
Event e = **(Event) eventList.get( i );* *
retract( e );
 *
}
 end

 Hope it helps.

 Edson

 2007/8/10, Anh Vuong [EMAIL PROTECTED]:
 
  Hi,
  I'd like to use keyword collect to do my filtering but its behaviour
  confused me, please advise. I greatly appreciate your help.
 
  Problem 1:
 
  when
  eventList : LinkedList(size == 5)
  from collect( Event(text matches
  .*rule5.* ))
  *then* System.out.println(
  rule5 is fired  + eventList.size());
  I still do not see any log msg after adding 5+ events. Is something
  wrong with my rule?
 
  Problem 2:
 
  when
  event: Event(text matches .*rule5.* ))
  eventList : LinkedList(size == 5)
  from collect( Event(text == event.text)
   *then * System.out.println(
  rule5 is fired  + eventList.size());
  After adding 5 events, I see 5 log msg instead of one as I'd expect.
  If I add more events, I will see more log. How do I tell LHS  to reset
  the count from 0.
  Basically, I want to take 1 event out of 5 similar events (suppressing
  filtering). So if there are 10 similar events, my RHS should activate 2
  times, not 10 times.
 
  Thanks,
  -av
 
   --
  Ready for the edge of your seat? Check out tonight's top 
  pickshttp://us.rd.yahoo.com/evt=48220/*http://tv.yahoo.com/on Yahoo! TV.
 
  ___
  rules-users mailing list
  rules-users@lists.jboss.org
  https://lists.jboss.org/mailman/listinfo/rules-users
 
 


 --
   Edson Tirelli
   Software Engineer - JBoss Rules Core Developer
   Office: +55 11 3529-6000
   Mobile: +55 11 9287-5646
   JBoss, a division of Red Hat @ 
 

Re: [rules-users] How to design a rule using collect for filtering? Thanks.

2007-08-15 Thread Anh Vuong
http://jira.jboss.com/jira/browse/JBRULES-1086 is created.
  

Edson Tirelli [EMAIL PROTECTED] wrote:
  
This is a regression bug. InitialFact should not be shadowed. Can you 
please open a JIRA for that?

   Thank you
  Edson

  2007/8/15, Anh Vuong  [EMAIL PROTECTED]:Thanks for your help, Edson. 
  collect works in my simple test now, but not when I integrate with my code. 
Is there an easy way to debug LHS to see if collect stmt is evaluated?  I 
notice IllegalAccessError 
 since my app will load a selected list of jars upfront, so my questions are:
  1) Can this error break collect?
  2) How can I fix this error still using our own classLoader?
   
  Here is the stack trace:
  2007 Aug 15, 09:08:13:193Exception IllegalAccessError
java.lang.IllegalAccessError: class 
org.drools.reteoo.InitialFactImplShadowProxy cannot access its superclass 
org.drools.reteoo.Init 
ialFactImpl
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at 
org.drools.rule.MapBackedClassLoader.fastFindClass(MapBackedClassLoader.java:60)
at 
org.drools.rule.MapBackedClassLoader.loadClass(MapBackedClassLoader.java:79)
at java.lang.ClassLoader.loadClass (Unknown Source)
at 
org.drools.reteoo.Rete$ObjectTypeConf.loadOrGenerateProxy(Rete.java:379)
at 
org.drools.reteoo.Rete$ObjectTypeConf.defineShadowProxyData(Rete.java:344)
at org.drools.reteoo.Rete$ObjectTypeConf .init(Rete.java:320)
at org.drools.reteoo.Rete.assertObject(Rete.java:145)
at 
org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:190)
at 
org.drools.reteoo.ReteooWorkingMemory$WorkingMemoryReteAssertAction.execute(ReteooWorkingMemory.java:163)
at 
org.drools.common.AbstractWorkingMemory.executeQueuedActions(AbstractWorkingMemory.java:1241)
at 
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:858)
at 
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:822)
at org.drools.common.AbstractWorkingMemory.insert 
(AbstractWorkingMemory.java:623)

   
  Thanks,
  -av
 
  
Edson Tirelli  [EMAIL PROTECTED] wrote:


   No single simple answer here. You need to check what would better fit your 
use case. 
   The thing is: it is not possible to limit the number of matches to a collect 
statement... all matching instances WILL match it and be collected. 

   No really clean way I can think about, but a few possible options (haven't 
executed them, but shall work): 

1. Simply execute the actions multiple times in the consequence:

  when 
 eventList : LinkedList( $size : size = 5 ) from collect( Event(text 
matches .*rule5.* )) 
then
   for( int i = 0; i  $size/5; i++ )

 System.out.println( rule5 is fired  + eventList.size ()); 

end

2. Flag used facts:

  when
 eventList : LinkedList( size = 5 ) from collect( Event(text matches 
.*rule5.*, processed == false )) 
then
   System.out.println(rule5 is fired  + eventList.size ()); 
   for( int i = 0; i  5; i++ ) {
   Event e = (Event) eventList.get ( i );
   e.setProcessed ( true );
   update( e ); 

 }

end

2. Retract used facts:

  when
 eventList : LinkedList( size = 5 ) from collect( Event(text matches 
.*rule5.* )) 
then
   System.out.println(rule5 is fired  + eventList.size ()); 
   for( int i = 0; i  5; i++ ) {
   Event e = (Event) eventList.get( i ); 
   retract( e ); 

 }

end

Hope it helps.

Edson

  2007/8/10, Anh Vuong  [EMAIL PROTECTED]: Hi,
  I'd like to use keyword collect to do my filtering but its behaviour confused 
me, please advise. I greatly appreciate your help.
   
  Problem 1:
   
  when 
  eventList : LinkedList(size == 5)
  from collect( Event(text matches 
.*rule5.* ))   
  
then   System.out.println(
rule5 is fired  + eventList.size());
  I still do not see any log msg after adding 5+ events. Is something wrong 
with my rule?
   
  Problem 2:
   
  when
  event: Event(text matches .*rule5.* ))
  eventList : LinkedList(size == 5)
  from collect( Event(text == event.text)
  
  
then   System.out.println(
rule5 is fired  + eventList.size());
  After adding 5 events, I see 5 log msg instead of one as I'd expect. 
  If I add more events, I will see more log. How do I tell LHS  to reset the 
count from 0.
  Basically, I want to take 1 event out of 5 similar events (suppressing 
filtering). So if there are 10 similar events, my RHS should activate 2 times, 
not 10 times. 
   
  Thanks,
  -av
   
  
  
-
  Ready for the edge of your seat? Check out tonight's top picks on Yahoo! TV.  
 

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





-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 

Re: [rules-users] How to design a rule using collect for filtering? Thanks.

2007-08-11 Thread Edson Tirelli
   No single simple answer here. You need to check what would better fit
your use case.
   The thing is: it is not possible to limit the number of matches to a
collect statement... all matching instances WILL match it and be collected.

   No really clean way I can think about, but a few possible options
(haven't executed them, but shall work):

1. Simply execute the actions multiple times in the consequence:

when
   eventList : LinkedList( $size : size = 5 ) from collect( Event(text
matches .*rule5.* ))
*then
   for( int i = 0; i  $size/5; i++ )
*
   System.out.println(rule5 is fired  + eventList.size());
end

2. Flag used facts:

when
eventList : LinkedList( size = 5 ) from collect( Event(text matches
.*rule5.*, processed == false ))
*then
*   System.out.println(rule5 is fired  + eventList.size());
*for( int i = 0; i  5; i++ ) {
   Event e = **(Event) eventList.get( i );**
   e.setProcessed( true );
   update( e );
*
   }
end

2. Retract used facts:

when
eventList : LinkedList( size = 5 ) from collect( Event(text matches
.*rule5.* ))
*then
*   System.out.println(rule5 is fired  + eventList.size());
*for( int i = 0; i  5; i++ ) {
   Event e = **(Event) eventList.get( i );**
   retract( e );
 *
   }
end

Hope it helps.

Edson

2007/8/10, Anh Vuong [EMAIL PROTECTED]:

 Hi,
 I'd like to use keyword collect to do my filtering but its behaviour
 confused me, please advise. I greatly appreciate your help.

 Problem 1:

 when
 eventList : LinkedList(size == 5)
 from collect( Event(text matches
 .*rule5.* ))
 *then* System.out.println(
 rule5 is fired  + eventList.size());
 I still do not see any log msg after adding 5+ events. Is something wrong
 with my rule?

 Problem 2:

 when
 event: Event(text matches .*rule5.* ))
 eventList : LinkedList(size == 5)
 from collect( Event(text == event.text)
  *then* System.out.println(
 rule5 is fired  + eventList.size());
 After adding 5 events, I see 5 log msg instead of one as I'd expect.
 If I add more events, I will see more log. How do I tell LHS  to reset the
 count from 0.
 Basically, I want to take 1 event out of 5 similar events (suppressing
 filtering). So if there are 10 similar events, my RHS should activate 2
 times, not 10 times.

 Thanks,
 -av


 --
 Ready for the edge of your seat? Check out tonight's top 
 pickshttp://us.rd.yahoo.com/evt=48220/*http://tv.yahoo.com/on Yahoo! TV.


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




-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


[rules-users] How to design a rule using collect for filtering? Thanks.

2007-08-10 Thread Anh Vuong
Hi,
  I'd like to use keyword collect to do my filtering but its behaviour confused 
me, please advise. I greatly appreciate your help.
   
  Problem 1:
   
  when
  eventList : LinkedList(size == 5)
  from collect( Event(text matches .*rule5.* ))
  
  then
  System.out.println(rule5 is fired  + eventList.size());
   
  I still do not see any log msg after adding 5+ events. Is something wrong 
with my rule?
   
  Problem 2:
   
  when
  event: Event(text matches .*rule5.* ))
  eventList : LinkedList(size == 5)
  from collect( Event(text == event.text)
  
  then
  System.out.println(rule5 is fired  + eventList.size());
   
  After adding 5 events, I see 5 log msg instead of one as I'd expect.
  If I add more events, I will see more log. How do I tell LHS  to reset the 
count from 0.
  Basically, I want to take 1 event out of 5 similar events (suppressing 
filtering). So if there are 10 similar events, my RHS should activate 2 times, 
not 10 times.
   
  Thanks,
  -av
   

   
-
Ready for the edge of your seat? Check out tonight's top picks on Yahoo! TV. ___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users