[jboss-jira] [JBoss JIRA] Assigned: (JBRULES-1991) MVELSalienceExpression not thread-safe

Edson Tirelli (JIRA) jira-events at lists.jboss.org
Wed Mar 11 11:51:23 EDT 2009


     [ https://jira.jboss.org/jira/browse/JBRULES-1991?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Edson Tirelli reassigned JBRULES-1991:
--------------------------------------

    Assignee: Edson Tirelli  (was: Mark Proctor)


> MVELSalienceExpression not thread-safe
> --------------------------------------
>
>                 Key: JBRULES-1991
>                 URL: https://jira.jboss.org/jira/browse/JBRULES-1991
>             Project: JBoss Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: drools-core
>    Affects Versions: 4.0.7
>            Reporter: Ingomar Otter
>            Assignee: Edson Tirelli
>             Fix For: 4.0.8, 5.0.0.CR1
>
>
> Scenario: 
> * We are using Drools in a MT app with a shared rulebase and one WM per thread.
> * We are using MVEL expressions to dynamically calculate salience from matched facts.
> When runniing mutlithreaded, we could observe that expression would sometimes (1 in 500 times in our case) pick up the wrong salience value.
> Looking at the source of MVELSalienceExpression.getValue() reveals that the method sets the WM and then evaluates the MVEL expression.
> I assume that the MVELSalienceExpression is part of the rulebase and thus shared accross WMs. If this is true this is not thread-safe and may lead to the observed behaviour.  
> Adding a simple synchronized fixes the problem in our case:
> {code}
> public synchronized int getValue(final Tuple tuple, final WorkingMemory workingMemory) {
>         this.factory.setContext(tuple, null, null, workingMemory, null);
>         return ((Number) MVEL.executeExpression(this.expr, this.factory)).intValue();
>     }
> {code}
> However this may reduce overall concurrency in the application. A better solution might be to increase locality, ie having a "thread local" factory.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list