[jboss-svn-commits] JBL Code SVN: r15369 - in labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect: mvel and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 25 19:40:36 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-09-25 19:40:36 -0400 (Tue, 25 Sep 2007)
New Revision: 15369

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
Log:
-provides thread safe way to do MVEL.setLanguageLevel

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaBuilder.java	2007-09-25 19:49:11 UTC (rev 15368)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/AbstractJavaBuilder.java	2007-09-25 23:40:36 UTC (rev 15369)
@@ -9,6 +9,7 @@
 import org.drools.lang.descr.BaseDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.dialect.mvel.MVELDialect;
 import org.drools.util.StringUtils;
 import org.mvel.MVELTemplateRegistry;
 import org.mvel.TemplateInterpreter;
@@ -22,6 +23,8 @@
     static {
         RULE_REGISTRY.registerTemplate( new InputStreamReader( AbstractJavaBuilder.class.getResourceAsStream( "javaRule.mvel" ) ) );
         INVOKER_REGISTRY.registerTemplate( new InputStreamReader( AbstractJavaBuilder.class.getResourceAsStream( "javaInvokers.mvel" ) ) );
+        MVELDialect.setLanguageLevel( 4 );
+        
     }
 
     public TemplateRegistry getRuleTemplateRegistry() {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-09-25 19:49:11 UTC (rev 15368)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-09-25 23:40:36 UTC (rev 15369)
@@ -103,6 +103,8 @@
     private Map                               packageImports;
 
     private boolean                           strictMode;
+    
+    private static Boolean                           languageSet = new Boolean( false );
 
     public void addFunction(FunctionDescr functionDescr,
                             TypeResolver typeResolver) {
@@ -115,10 +117,21 @@
 
     public MVELDialect() {
     }
+    
+    public static void setLanguageLevel(int level) {
+        synchronized ( languageSet ) {
+            // this synchronisation is needed as setLanguageLevel is now thread safe
+            // and we do not want ot be calling this while something else is being parsed.
+            // the flag ensures it is just called once and no more.
+            if ( languageSet.booleanValue() == false ) {
+                languageSet = new Boolean( true );
+                AbstractParser.setLanguageLevel( level );
+            }
+        }
+    }
 
     public void init(PackageBuilder builder) {
-        AbstractParser.setLanguageLevel( 4 );
-
+        setLanguageLevel( 4 );
         this.pkg = builder.getPackage();
         this.configuration = (MVELDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "mvel" );
         this.typeResolver = builder.getTypeResolver();




More information about the jboss-svn-commits mailing list