[jboss-jira] [JBoss JIRA] Resolved: (JBRULES-2821) Race condition in MVELDialect

Mark Proctor (JIRA) jira-events at lists.jboss.org
Fri May 20 08:09:01 EDT 2011


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

Mark Proctor resolved JBRULES-2821.
-----------------------------------

    Fix Version/s: 5.2.0.CR1
       Resolution: Out of Date


We no longer lock at all in MVEL. Instead we also no longer set the language level, leaving MVEL defaults on. Please re-open if this problem continues.

> Race condition in MVELDialect
> -----------------------------
>
>                 Key: JBRULES-2821
>                 URL: https://issues.jboss.org/browse/JBRULES-2821
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: drools-compiler
>    Affects Versions: 5.1.1.FINAL
>         Environment: JDK 1.6.0_20  Mac OS X 10.6.5
>            Reporter: Doug Pedrick
>            Assignee: Mark Proctor
>             Fix For: 5.2.0.CR1
>
>
> Multiple threads loading different rulesets (each having local copies of KnowledgeBuilderConfiguration, KnowledgeBuilder, KnowledgeBaseConfiguration, and KnowledgeBase) can result in a race condition with the AbstractParser.OPERATIONS hash map in MVEL.
> MVELDialect and MVELExprAnalyzer both invoke ExpressionCompiler.compile.  MVELDialect.compile calls AbstractParser.setLanguageLevel which clears and reloads the OPERATIONS static HashMap.  It does so while holding COMPILER_LOCK.  MVELExprAnalyzer calls ExpressionCompiler.compile without holding COMPILER_LOCK, resulting in OPERATIONS sometimes being empty when called, causing an NPE when attempting to autobox an Operator Integer to primitive.
> There are other areas in Drools code that ultimately depend on OPERATIONS and should be protected as well.
> java.lang.NullPointerException
>    at org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:250)
>    at org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:68)
>    at org.drools.rule.builder.dialect.mvel.MVELExprAnalyzer.analyzeExpression(MVELExprAnalyzer.java:86)
>    at org.drools.rule.builder.dialect.mvel.MVELDialect.analyzeExpression(MVELDialect.java:461)
>    at org.drools.rule.builder.dialect.mvel.MVELDialect.analyzeExpression(MVELDialect.java:446)
>    at org.drools.rule.builder.dialect.mvel.MVELPredicateBuilder.build(MVELPredicateBuilder.java:50)
>    at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:654)
>    at org.drools.rule.builder.PatternBuilder.rewriteToEval(PatternBuilder.java:482)
>    at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:340)
>    at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:264)
>    at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:213)
>    at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:108)
>    at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
>    at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:43)
>    at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
>    at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:79)
>    at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1154)
>    at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:636)
>    at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:266)
>    at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:458)
>    at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:28)

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list