I just opened a JIRA: http://jira.jboss.com/jira/browse/JBRULES-1115.
Regards, CG Edson Tirelli-3 wrote: > > 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 > > -- View this message in context: http://www.nabble.com/How-to-limit-results-from-a-collect-statement-tf4235669.html#a12294112 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