[rules-users] Working Memory and agenda-group

Maciej Gowin maciej.abacus.gowin at gmail.com
Thu Dec 29 19:37:18 EST 2011


I did some debbuging with 'declare SomeDefault'. This is what I found:

CASE1: RHS = drools.getWorkingMemory().insert(new SomeDefaultX())
Working memory objects:
Object[fact
0:2:2082419441:2082419441:2:DEFAULT:com.sample.SomeDefaultX at 7c1f32f1]
Object[fact 0:1:140683595:140683595:1:DEFAULT:com.sample.ObjectA at 862a94b]

CASE2: RHS = insertDefault(drools.getWorkingMemory())
Working memory objects:
Object[fact 0:2:176338845:1:2:DEFAULT:SomeDefault( minValueA=100,
minValueB=20.0, maxValueB=20000.0 )]
Object[fact 0:1:1125048577:1125048577:1:DEFAULT:com.sample.ObjectA at 430ee101]

Please note the difference between DEFAULT:com.sample.SomeDefault and
DEFAULT:SomeDefault.
So when inserting an object to WorkingMemory inside function insertDefault
which is declared in DRL file
something strange is going on... It seems like it is a bug. It is worth
mentioning that I get following result
inside insertDefault:
System.out.println(SomeDefault.class.getName());
---> com.sample.SomeDefault

Hope it will help :)



2011/12/30 Maciej Gowin <maciej.abacus.gowin at gmail.com>

> Of course it's only my guess. I'm not an expert. Please correct me if I'm
> wrong :)
>
>
> 2011/12/30 Maciej Gowin <maciej.abacus.gowin at gmail.com>
>
>> It's not the different WorkingMemory. It's all about class name
>> confusion. It looks like the class type does not match.
>> Please try to create SomeDefault in standard way, not with 'declare'
>> statement. It works ok.
>>
>>
>> 2011/12/30 Mike Key <mikey at zenbitz.com>
>>
>>> I guess that is exactly my confusion :)  Why would it be that doing the
>>> exact same thing, one inserting into working memory from a function and the
>>> other simply doing it within the RHS of the rule cause downstream rules not
>>> to fire in the function call case?  The rules are both in the same
>>> agenda-group, both the function example and the insert from the RHS of the
>>> rule example are simply inserting a new fact into working memory.
>>>
>>> It makes it seem like the function call is somehow inserting into a
>>> *different* working memory, which I'm sure is not the case, but the
>>> downstream rule does not fire none-the-less.
>>>
>>>  Thanks for any clarity.
>>>
>>>
>>> On Thu, Dec 29, 2011 at 3:59 PM, Mauricio Salatino <salaboy at gmail.com>wrote:
>>>
>>>> Agenda-groups segment the agenda and not the working memory :)
>>>> Probably that is part of your confusion.
>>>>
>>>>
>>>> 2011/12/29 Mike Key <mikey at zenbitz.com>:
>>>> > I am a fairly new Drools user and am trying to understand how working
>>>> memory
>>>> > is segmented when using agenda groups.  I have an agenda-group that
>>>> has
>>>> > focus set immediately from the session as follows with a few objects
>>>> being
>>>> > inserted:
>>>> >
>>>> > ksession.insert(objectA);
>>>> > ksession.insert(objectB);
>>>> > ksession.getAgenda().getAgendaGroup("Foo").setFocus();
>>>> >
>>>> > I have 2 rules simplified down to illustrate my confusion.  The first
>>>> rule
>>>> > simply sets some default values evaluated in the second rule if
>>>> objectA
>>>> > exists.  In the example that works I set the defaults in the RHS
>>>> explicitly.
>>>> >  However I want to use these defaults from different agenda-groups,
>>>> so when
>>>> > I put them in a function, the second rule never fires, the activation
>>>> is
>>>> > created for the first rule but never the second.  Can someone tell me
>>>> why
>>>> > the use of a function seems to alter the truth of the rule?
>>>> >
>>>> > THIS WORKS:
>>>> >
>>>> > declare SomeDefault
>>>> >   minValueA : Integer
>>>> >   minValueB : Double
>>>> >   maxValueB : Double
>>>> > end
>>>> >
>>>> > rule "Check Object A and Set Default"
>>>> >   agenda-group "Foo"
>>>> >   salience 100
>>>> >   when
>>>> >     $a : ObjectA()
>>>> >   then
>>>> >     default = new SomeDefault()
>>>> >     default.minValueA = 100
>>>> >     default.minValueB = 20.0
>>>> >     default.maxValueB = 20000.0
>>>> >     insert(default)
>>>> > end
>>>> >
>>>> > rule "Use the defaults"
>>>> >   agenda-group "Foo"
>>>> >   salience 100
>>>> >   when
>>>> >     $default : SomeDefault()
>>>> >   then
>>>> >     System.out.println("Default minA=" + $default.minValueA)
>>>> > end
>>>> >
>>>> > THIS DOES NOT WORK:
>>>> >
>>>> > declare SomeDefault
>>>> >   minValueA : Integer
>>>> >   minValueB : Double
>>>> >   maxValueB : Double
>>>> > end
>>>> >
>>>> > rule "Check Object A and Set Default"
>>>> >   agenda-group "Foo"
>>>> >   salience 100
>>>> >   when
>>>> >     $a : ObjectA()
>>>> >   then
>>>> >     insertDefault(drools.getWorkingMemory())
>>>> > end
>>>> >
>>>> > rule "Use the defaults"
>>>> >   agenda-group "Foo"
>>>> >   salience 90
>>>> >   when
>>>> >     $default : SomeDefault()
>>>> >   then
>>>> >     System.out.println("Default minA=" + $default.minValueA)
>>>> > end
>>>> >
>>>> > function void insertDefault(WorkingMemory workingMemory) {
>>>> >   SomeDefault default = new SomeDefault();
>>>> >   default.setMinValueA(100);
>>>> >   default.setMinValueB(20.0);
>>>> >   default.setMaxValueB(20000.0);
>>>> >   workingMemory.insert(default);
>>>> > }
>>>> >
>>>> > In the latter (non-working) example the first rule activates and then
>>>> drools
>>>> > returns, it never even attempts to try to fire the second rule.
>>>>  However in
>>>> > the working example BOTH rules fire as I would expect.  I am guessing
>>>> this
>>>> > is a simple misunderstanding on my part.  Any assistance in
>>>> understanding
>>>> > why this nuance doesn't seem to work would be greatly appreciated.
>>>> >
>>>> > Thanks.
>>>> >
>>>> > MiKey
>>>> >
>>>> > _______________________________________________
>>>> > rules-users mailing list
>>>> > rules-users at lists.jboss.org
>>>> > https://lists.jboss.org/mailman/listinfo/rules-users
>>>> >
>>>>
>>>>
>>>>
>>>> --
>>>>  - CTO @ http://www.plugtree.com
>>>>  - MyJourney @ http://salaboy.wordpress.com
>>>>  - Co-Founder @ http://www.jugargentina.org
>>>>  - Co-Founder @ http://www.jbug.com.ar
>>>>
>>>>  - Salatino "Salaboy" Mauricio -
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20111230/4c6ea68a/attachment.html 


More information about the rules-users mailing list