]
Mario Fusco resolved DROOLS-651.
--------------------------------
Resolution: Rejected
Bindings do not cache actual values
-----------------------------------
Key: DROOLS-651
URL:
https://issues.jboss.org/browse/DROOLS-651
Project: Drools
Issue Type: Enhancement
Affects Versions: 6.2.0.Beta3
Environment: Win7, Drools 6.2.0 Beta3 (probably all Drools versions)
Reporter: Marc Dzaebel
Assignee: Mario Fusco
Priority: Minor
Create sample Drools project, add following method to the Message class:
{noformat} public List<String> list() {
System.out.println("Call!");
return Arrays.asList("one", "two");
} {noformat}
sample.drl:
{noformat}
package com.sample
import com.sample.DroolsTest.Message;
import java.util.List;
import java.util.ArrayList;
rule ""
when m : Message(L : list(), L.size>0)
then System.out.println("L:"+L);
end
{noformat}
Running the project will result in the following output:
{noformat}
Call!
Call!
L:[one, two]
{noformat}
So _list()_ is called *two* times (duplicate). This may be due to the replacement of
"L" with _list()_ in the second constraint. This is ok for simple +getters+ as
here HotSpot optimizes this away. However, long running methods will produce unnecessary
overhead, especially if further constraints on "L" are added (which I verified
produce additional calls to list()). So at least methods with one or more arguments should
be saved in temporary variables that should be used in further constraints. A fix of this
problem will certainly accelerate Drools performance on similar patterns. If this is not
feasible, at least a comment should be added to the documentation.