[jboss-jira] [JBoss JIRA] (DROOLS-651) Bindings do not cache actual values

Davide Sottara (JIRA) issues at jboss.org
Wed Nov 19 18:18:39 EST 2014


    [ https://issues.jboss.org/browse/DROOLS-651?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13021368#comment-13021368 ] 

Davide Sottara commented on DROOLS-651:
---------------------------------------

Marc, if you are worried about the performance in some specific cases, you can always do the following:

{code}
  $x : X()
  $y : Y() from $x.extremelyExpensiveMethodCall()
{code}

Now, $y will contain the "cached" result and will not require the reevaluation of the expression - at least until $x is updated.

We will update the documentation as you suggest, but we will probably reject this feature request
If you still see a use case where this would not be enough, please let us know

Davide

> 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.



--
This message was sent by Atlassian JIRA
(v6.3.8#6338)


More information about the jboss-jira mailing list