Uploaded image for project: 'Commons OGNL'
  1. Commons OGNL
  2. OGNL-181

OgnlRuntime.getCompiler and thread-safety.

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: 4.0.x
    • Component/s: None

      Description

      As you can see, getCompiler is not thread safe.
      I recently added a new performance benchmark to test its 3d-safety and performance: during my tests I have experienced a fast execution on unsafe version vs the safe one (though every concurrent test instantiated a new compiler).
      I have not yet investigated and I still don't know what can cause running more than one instance of the compiler in the same jvm. If necessary we can consider to make compiler a singleton in order to enforce this concept.

      What do you think guys?

      public static OgnlExpressionCompiler getCompiler( OgnlContext ognlContext )                     
      {                                                                                               
          if ( _compiler == null )                                                                    
          {                                                                                           
              try                                                                                     
              {                                                                                       
                  OgnlRuntime.classForName( ognlContext, "javassist.ClassPool" );                     
                  _compiler = new ExpressionCompiler();                                               
              }                                                                                       
              catch ( ClassNotFoundException e )                                                      
              {                                                                                       
                  throw new IllegalArgumentException(                                                 
                      "Javassist library is missing in classpath! Please add missed dependency!", e );
              }                                                                                       
          }                                                                                           
          return _compiler;                                                                           
      }   
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              maurizio.cucchiara Maurizio Cucchiara
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated: