You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2012/01/22 17:19:16 UTC

svn commit: r1234539 - /commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/interpol/ExprLookup.java

Author: oheger
Date: Sun Jan 22 16:19:15 2012
New Revision: 1234539

URL: http://svn.apache.org/viewvc?rev=1234539&view=rev
Log:
Don't use a shared JexlContext, but create a new one on each invocation.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/interpol/ExprLookup.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/interpol/ExprLookup.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/interpol/ExprLookup.java?rev=1234539&r1=1234538&r2=1234539&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/interpol/ExprLookup.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/interpol/ExprLookup.java Sun Jan 22 16:19:15 2012
@@ -78,12 +78,12 @@ public class ExprLookup extends StrLooku
     /** Configuration being operated on */
     private AbstractConfiguration configuration;
 
-    /** The JexlContext */
-    private JexlContext context = new MapContext();
-
     /** The engine. */
     private final JexlEngine engine = new JexlEngine();
 
+    /** The variables maintained by this object. */
+    private Variables variables;
+
     /** The String to use to start subordinate lookup expressions */
     private String prefixMatcher = DEFAULT_PREFIX;
 
@@ -147,10 +147,7 @@ public class ExprLookup extends StrLooku
      */
     public void setVariables(Variables list)
     {
-        for (Variable var : list)
-        {
-            context.set(var.getName(), var.getValue());
-        }
+        variables = new Variables(list);
     }
 
     /**
@@ -188,7 +185,7 @@ public class ExprLookup extends StrLooku
         try
         {
             Expression exp = engine.createExpression(result);
-            result = (String) exp.evaluate(context);
+            result = (String) exp.evaluate(createContext());
         }
         catch (Exception e)
         {
@@ -199,6 +196,33 @@ public class ExprLookup extends StrLooku
     }
 
     /**
+     * Creates a new {@code JexlContext} and initializes it with the variables
+     * managed by this Lookup object.
+     *
+     * @return the newly created context
+     */
+    private JexlContext createContext()
+    {
+        JexlContext ctx = new MapContext();
+        initializeContext(ctx);
+        return ctx;
+    }
+
+    /**
+     * Initializes the specified context with the variables managed by this
+     * Lookup object.
+     *
+     * @param ctx the context to be initialized
+     */
+    private void initializeContext(JexlContext ctx)
+    {
+        for (Variable var : variables)
+        {
+            ctx.set(var.getName(), var.getValue());
+        }
+    }
+
+    /**
      * List wrapper used to allow the Variables list to be created as beans in
      * DefaultConfigurationBuilder.
      */
@@ -209,11 +233,24 @@ public class ExprLookup extends StrLooku
          */
         private static final long serialVersionUID = 20111205L;
 
-        /*
-        public void setVariable(Variable var)
+        /**
+         * Creates a new empty instance of {@code Variables}.
+         */
+        public Variables()
+        {
+            super();
+        }
+
+        /**
+         * Creates a new instance of {@code Variables} and copies the content of
+         * the given object.
+         *
+         * @param vars the {@code Variables} object to be copied
+         */
+        public Variables(Variables vars)
         {
-            add(var);
-        } */
+            super(vars);
+        }
 
         public Variable getVariable()
         {