I do suggest you open a JIRA and attach your test case. I will need to do some debugging to understand what is happening.
[]s Edson 2007/8/22, pentarious <[EMAIL PROTECTED]>: > > > I hope you can help me find a solution. In the meantime I've tried your > workaround, adding an addOption() method with no success. When I use that > method in the rule I get the following exception (and I can't understand > why): > java.lang.ClassNotFoundException: org.test.ItemShadowProxy > org.test.Item is the full qualified name of the bean Item. Any idea? > > Regards, > > CG > > > Edson Tirelli-3 wrote: > > > > I think I know what is happening. The getOptions() method is > returning > > the shadowed options collections, i.e., when you are adding the option, > > you > > are adding to the shadow instead of the real object. > > > > Now, I'm not sure how we should handle such thing, since we do need > to > > shadow the options collection. > > > > Mark, any idea? > > > > A workaround is: create an addOption() method to the Item class to > add > > options, instead of doing getOptions().add(). This way the shadow proxy > > will > > delegate the call to your real class, instead of adding it to the > shadow. > > > > []s > > Edson > > > > 2007/8/22, pentarious <[EMAIL PROTECTED]>: > >> > >> > >> Actually, before opening a JIRA I would like to show you my actual > >> code... > >> Here it is: > >> > >> rule "My Rule" > >> no-loop true > >> when > >> $list : ArrayList() from collect( Item( type == "MY TYPE" ) ) > >> then > >> Item item = (Item) $list.get(0); > >> ItemOption option = new ItemOption( item, "MY OPTION" ); > >> item.setType("MY NEW TYPE"); > >> item.getOptions().add( option ); > >> insert(option); > >> update(item); > >> end > >> > >> Basically we have some items (Item) and we need to take into > >> considerations > >> just items of type "MY TYPE", adding a new option "MY OPTION" to the > list > >> of > >> the options of the first item in $list. Item is a bean with a field as > >> follows: > >> private Collection<ItemOption > options = new > >> ArrayList<ItemOption>(); > >> I thought it was worth writing again before opening a JIRA, as I've > >> looked > >> further into the problem and I found out another interesting thing. As > >> you > >> may have noticed I put two lines in my code: > >> item.setType("MY NEW TYPE"); > >> item.getOptions().add( option ); > >> It's interesting to notice that the first line works as expected (i.e. > >> after > >> executing the rule the item has a new type called "MY NEW TYPE"), while > >> the > >> second line doesn't (i.e. after executing the rule the item doesn't > have > >> a > >> new option in its option list). So, do you think I should definitively > >> open > >> a JIRA (I've never opened one before, can you give a link just in > case?) > >> or > >> I'm just missing something and there is a trivial solution to this > issue? > >> > >> Regards, > >> > >> CG > >> > >> > >> Edson Tirelli-3 wrote: > >> > > >> > Well, it must work. Can you open a JIRA with a self contained > test > >> > case > >> > please? I will investigate. > >> > > >> > []s > >> > Edson > >> > > >> > 2007/8/22, pentarious <[EMAIL PROTECTED]>: > >> >> > >> >> > >> >> I know. Actually I didn't put any update or insert statement in the > >> code > >> >> just > >> >> to make it simpler. The actual code looks like: > >> >> when > >> >> $itemList : ArrayList() from collect( Item( category == > "VIDEO" > >> ) > >> ) > >> >> then > >> >> ItemDiscount disc = new ItemDiscount(10); > >> >> insert(disc); > >> >> $myFirstItem = (Item)$itemList.get(0); > >> >> $mySecondItem = (Item)$itemList.get(1); > >> >> $myFirstItem.addDiscount(disc); > >> >> $mySecondItem.addDiscount(disc); > >> >> update($myFirstItem); > >> >> update($mySecondItem); > >> >> Now, why this doesn't work at all? It does work if I write a rule > for > >> >> each > >> >> item using in the when clause $item : Item from $itemList, but as I > >> said > >> >> I > >> >> need to write a list-oriented rule. > >> >> > >> >> Regards, > >> >> > >> >> CG > >> >> > >> >> > >> >> Edson Tirelli-3 wrote: > >> >> > > >> >> > If you want the "engine to see" your changes, in a way you > affect > >> >> other > >> >> > rules, you must call update( object ) for the object you are > >> changing. > >> >> > Otherwise, the change will happen to the original object, but not > to > >> >> the > >> >> > shadow proxy that the engine uses to ensure consistency. > >> >> > > >> >> > []s > >> >> > Edson > >> >> > > >> >> > 2007/8/22, pentarious <[EMAIL PROTECTED]>: > >> >> >> > >> >> >> > >> >> >> Ok, I'm still working on that, I'll publish my solution asap. In > >> the > >> >> >> meantime > >> >> >> it turns out our requirements need something more than that. We > >> have > >> >> an > >> >> >> ordered list of beans (items) and we have to be able to modify a > >> >> specific > >> >> >> subset of the list (adding a discount). Now I tried to solve this > >> >> problem > >> >> >> by > >> >> >> working directly on the list of items. But I can't understand why > >> this > >> >> >> doesn't work: > >> >> >> when > >> >> >> $itemList : ArrayList() from collect( Item( category == > >> "VIDEO" > >> ) > >> >> ) > >> >> >> then > >> >> >> ItemDiscount disc = new ItemDiscount(10); > >> >> >> $myFirstItem = (Item)$itemList.get(0); > >> >> >> $mySecondItem = (Item)$itemList.get(1); > >> >> >> $myFirstItem.addDiscount(disc); > >> >> >> $mySecondItem.addDiscount(disc); > >> >> >> > >> >> >> After executing this rule it's like nothing happened! I mean no > >> >> discount > >> >> >> has > >> >> >> been added to the two items! The problem seems to be related to > >> >> >> extracting > >> >> >> items from the list. Apparently, every time we get an item from > the > >> >> list, > >> >> >> it > >> >> >> looses its link with the original item (I don't know if it's a > copy > >> of > >> >> >> the > >> >> >> original item or whatever), so that every update doesn't affect > the > >> >> >> original > >> >> >> item any more. But of course that's what we're interested in! We > >> want > >> >> to > >> >> >> modify original items in the rule session. Am I missing > something? > >> Or > >> >> Is > >> >> >> it > >> >> >> a bug? > >> >> >> > >> >> >> Regards, > >> >> >> > >> >> >> CG > >> >> >> > >> >> >> > >> >> >> > >> >> >> Edson Tirelli-3 wrote: > >> >> >> > > >> >> >> > Please, share with us! Send to the list! > >> >> >> > > >> >> >> > Edson > >> >> >> > > >> >> >> > 2007/8/21, pentarious <[EMAIL PROTECTED]>: > >> >> >> >> > >> >> >> >> > >> >> >> >> I found an interesting implementation to do that. If anyone is > >> >> >> interested > >> >> >> >> I > >> >> >> >> could share my solution. > >> >> >> >> > >> >> >> >> Regards, > >> >> >> >> > >> >> >> >> CG > >> >> >> >> > >> >> >> >> > >> >> >> >> Mark Proctor wrote: > >> >> >> >> > > >> >> >> >> > There is no supported way to do this. You could use an > >> >> inline-eval > >> >> >> >> > against a global, but that is very clunkey. However it does > >> seem > >> >> >> like > >> >> >> a > >> >> >> >> > good feature idea for a future release, open a jira and I'll > >> look > >> >> >> into > >> >> >> >> > getting it included. > >> >> >> >> > > >> >> >> >> > Mark > >> >> >> >> > pentarious wrote: > >> >> >> >> >> Does anyone know a method to limit the number of results > from > >> a > >> >> >> >> collect > >> >> >> >> >> statement? I was just wondering how to do something like > >> this: > >> >> >> >> >> $myList : List() from collect( MyObject(myField == > >> "something") > >> >> ) > >> >> >> >> limit > >> >> >> >> 3 > >> >> >> >> >> //it should put in $myList just the first 3 objects > retrieved > >> >> >> >> >> I'm quite sure there is nothing in Drools which can > natively > >> >> >> support > >> >> >> >> >> something like that. So, how to do that, if needed? I tried > >> >> this, > >> >> >> but > >> >> >> >> it > >> >> >> >> >> seems not to be working (I can't understand why, though): > >> >> >> >> >> $myList : List() from collect( MyObject(myField == > >> "something") > >> >> ) > >> >> >> >> >> $myObject : MyObject() from $myList > >> >> >> >> >> eval( $myList.indexOf($myObject) < 3 ) > >> >> >> >> >> Indeed, it doesn't work because the link beetween $myList > and > >> >> >> >> $myObject > >> >> >> >> >> seems to be released during any execution of the rule (In > >> fact > >> >> >> >> >> $myList.contains($myObject) returns false! Again, I can't > >> >> >> understand > >> >> >> >> >> why...) > >> >> >> >> >> > >> >> >> >> >> Any advice would be really appreciated! > >> >> >> >> >> > >> >> >> >> >> Regards, > >> >> >> >> >> > >> >> >> >> >> CG > >> >> >> >> >> > >> >> >> >> > > >> >> >> >> > _______________________________________________ > >> >> >> >> > rules-users mailing list > >> >> >> >> > rules-users@lists.jboss.org > >> >> >> >> > https://lists.jboss.org/mailman/listinfo/rules-users > >> >> >> >> > > >> >> >> >> > > >> >> >> >> > >> >> >> >> -- > >> >> >> >> View this message in context: > >> >> >> >> > >> >> >> > >> >> > >> > http://www.nabble.com/How-to-limit-results-from-a-collect-statement-tf4235669.html#a12249025 > >> >> >> >> Sent from the drools - user mailing list archive at Nabble.com > . > >> >> >> >> > >> >> >> >> _______________________________________________ > >> >> >> >> 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 > >> >> >> > > >> >> >> > > >> >> >> > >> >> >> -- > >> >> >> View this message in context: > >> >> >> > >> >> > >> > http://www.nabble.com/How-to-limit-results-from-a-collect-statement-tf4235669.html#a12270505 > >> >> >> Sent from the drools - user mailing list archive at Nabble.com. > >> >> >> > >> >> >> _______________________________________________ > >> >> >> 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 > >> >> > > >> >> > > >> >> > >> >> -- > >> >> View this message in context: > >> >> > >> > http://www.nabble.com/How-to-limit-results-from-a-collect-statement-tf4235669.html#a12272536 > >> >> Sent from the drools - user mailing list archive at Nabble.com. > >> >> > >> >> _______________________________________________ > >> >> 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 > >> > > >> > > >> > >> -- > >> View this message in context: > >> > http://www.nabble.com/How-to-limit-results-from-a-collect-statement-tf4235669.html#a12274411 > >> Sent from the drools - user mailing list archive at Nabble.com. > >> > >> _______________________________________________ > >> 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 > > > > > > -- > View this message in context: > http://www.nabble.com/How-to-limit-results-from-a-collect-statement-tf4235669.html#a12278683 > Sent from the drools - user mailing list archive at Nabble.com. > > _______________________________________________ > 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