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 <cristiano.giuffrida(a)gmail.com>:
>
> 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 <cristiano.giuffrida(a)gmail.com>:
> >>
> >>
> >> 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 <cristiano.giuffrida(a)gmail.com>:
> >> >>
> >> >>
> >> >> 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 <cristiano.giuffrida(a)gmail.com>:
> >> >> >>
> >> >> >>
> >> >> >> 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
<cristiano.giuffrida(a)gmail.com>:
> >> >> >> >>
> >> >> >> >>
> >> >> >> >> 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(a)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-tf423...
> >> >> >> >> Sent from the drools - user mailing list archive
at
>
Nabble.com
> .
> >> >> >> >>
> >> >> >> >> _______________________________________________
> >> >> >> >> rules-users mailing list
> >> >> >> >> rules-users(a)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(a)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-tf423...
> >> >> >> Sent from the drools - user mailing list archive at
Nabble.com.
> >> >> >>
> >> >> >> _______________________________________________
> >> >> >> rules-users mailing list
> >> >> >> rules-users(a)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(a)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-tf423...
> >> >> Sent from the drools - user mailing list archive at
Nabble.com.
> >> >>
> >> >> _______________________________________________
> >> >> rules-users mailing list
> >> >> rules-users(a)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(a)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-tf423...
> >> Sent from the drools - user mailing list archive at
Nabble.com.
> >>
> >> _______________________________________________
> >> rules-users mailing list
> >> rules-users(a)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(a)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-tf423...
> Sent from the drools - user mailing list archive at
Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)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(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users