@Davide
I had a sentence in the 1st draft of my email that complained about
binding variables being sold as *variables*. Not explaining things
that may have a noticeable impact on the behaviour of the code
your write taking everything in the documentation at face value:
this is ouch, ugh and very argh.
-W
On 13/05/2013, Davide Sottara <dsotty(a)gmail.com> wrote:
@Wolfgang: "Declarations" in drools are not variables in the sense that
they "store" the
value extracted from the bean, but they use internal accessors to read
it from the bean
itself. So, in your example, two calls are expected: one when the value
is read for the != null
comparison, one when the value is displayed in the RHS.
I'm not sure that this optimization would be easy or even feasible,
especially considering that
the performance "penalty" would hardly be noticeable. Unless one has
stateful getters (ouch..),
getter with side effects (ugh..) or getters that do expensive internal
computations on the fly (argh..).
Davide
On 05/12/2013 09:44 PM, Wolfgang Laun wrote:
> OP states that
> rule test1
> when
> $m: Message( myMessage : message != null )
> then
> end
> with
> public String getMessage(){
> System.out.println("Called getMessage()");
> return message;
> }
> displays "Called getMessage()" more than once, which (using 5.5.0) I
> cannot confirm. However
> rule test2
> when
> $m: Message( myMessage : message != null )
> then
> System.out.println( "test2: " );
> System.out.println( "message(1): " + myMessage );
> end
> produces
> Called getMessage()
> inserted
> Called getMessage()
> test2:
> message(1): Hello
> which confirms OP's claim that there are redundant calls to getters.
>
> -W
>
>
> On 12/05/2013, Mark Proctor <mproctor(a)codehaus.org> wrote:
>> The code examples of what you are proposing did not make it to the list.
>>
>> Mark
>> On 12 May 2013, at 12:29, Sonata <plz.write.to(a)gmail.com> wrote:
>>
>>> Hi, I am using 5.5.0.final on jdk7(64bit). To repeat the test, simply
>>> create
>>> a new Drools project in Eclipse. Tick the option to create a default
>>> Hello
>>> World project. Go to the DroolsTest.java file, edit main() to
>>>
>>>
>>> and edit getMessage() to
>>>
>>>
>>> Next, remove the two rules in Sample.drl, use this simple rule instead
>>>
>>>
>>> Then you can see the output
>>>
>>>
>>> Which means, getMessage() is called 4 times in this simple rule. I
>>> really
>>> wonder why. Is this a bug? Some non-optimized routine? An edge case?
>>>
>>> Now try this
>>>
>>> and the output is
>>>
>>>
>>> Just once. It seems all good. Because getMessage() is needed to call
>>> once
>>> to
>>> check with null, which is very fair to me.
>>>
>>> Now something really funny
>>>
>>>
>>> and the output
>>>
>>>
>>>
>>> An extra call to getMessage() at the end, total 5 times!
>>>
>>> TBH, I really only expect calling getMessage() once in all these tests.
>>> Please put it to my face and tell me my test is so flawed.
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>>
http://drools.46999.n3.nabble.com/Room-to-optimize-or-bug-Unnecessary-cal...
>>> Sent from the Drools: User forum mailing list archive at
Nabble.com.
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users