Index: java/org/apache/velocity/tools/view/servlet/ServletToolboxManager.java
===================================================================
RCS file: /home/cvspublic/jakarta-velocity-tools/view/src/java/org/apache/velocity/tools/view/servlet/ServletToolboxManager.java,v
retrieving revision 1.3
diff -u -r1.3 ServletToolboxManager.java
--- java/org/apache/velocity/tools/view/servlet/ServletToolboxManager.java	10 May 2002 05:42:18 -0000	1.3
+++ java/org/apache/velocity/tools/view/servlet/ServletToolboxManager.java	21 Jan 2003 15:46:22 -0000
@@ -55,6 +55,9 @@
 
 package org.apache.velocity.tools.view.servlet;
 
+import java.io.IOException;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
 
 import java.util.List;
 import java.util.Iterator;
@@ -68,7 +71,9 @@
 import org.dom4j.Element;
 import org.dom4j.Node;
 
+import org.apache.velocity.app.Velocity;
 import org.apache.velocity.tools.view.DataInfo;
+import org.apache.velocity.tools.view.ToolboxManager;
 import org.apache.velocity.tools.view.ToolInfo;
 import org.apache.velocity.tools.view.XMLToolboxManager;
 import org.apache.velocity.tools.view.context.ToolboxContext;
@@ -143,12 +148,16 @@
     private ArrayList sessionToolInfo;
     private ArrayList requestToolInfo;
 
-
+    private static HashMap managersMap = new HashMap();
 
     // --------------------------------------------------- Constructor --------
 
     /**
      * Default constructor
+     *
+     * Use getToolboxManager(ServletContext,String) instead if you want
+     * to ensure there is exactly one ServletToolboxManager
+     * per xml toolbox configuration file.
      */
     public ServletToolboxManager(ServletContext servletContext)
     {
@@ -158,7 +167,76 @@
         requestToolInfo = new ArrayList();
     }
 
+    /**
+     * ServletToolboxManager factory method.
+     * This method will ensure there is exactly one ServletToolboxManager
+     * per xml toolbox configuration file.
+     */
 
+     public static synchronized ServletToolboxManager getToolboxManager(ServletContext servletContext,String toolboxFile)
+     {
+         /*
+          *  little fix up
+          */
+
+         if ( !toolboxFile.startsWith("/") )
+         {
+            toolboxFile = "/" + toolboxFile;
+         }
+
+         // get config file pathname
+         String pathname = servletContext.getRealPath(toolboxFile);
+
+         // check if a previous instance exists
+         ServletToolboxManager toolboxManager = (ServletToolboxManager)managersMap.get(pathname);
+
+         if (toolboxManager == null) {
+             // if not, build one
+             InputStream is = null;
+
+             try
+             {
+
+               /*
+                *  get the bits
+                */
+
+               is = servletContext.getResourceAsStream( toolboxFile );
+
+               if ( is != null)
+               {
+                    Velocity.info("Using toolbox configuration file '" + toolboxFile +"'");
+
+                    toolboxManager = new ServletToolboxManager(servletContext);
+
+                    toolboxManager.load( is );
+                    
+                    // remember it
+                    managersMap.put(pathname,toolboxManager);
+
+                    Velocity.info("Toolbox setup complete.");
+               }
+           }
+           catch( Exception e )
+           {
+               Velocity.error("Problem reading toolbox file properties file '" + toolboxFile +"' : " + e );
+           }
+
+           finally
+           {
+               try
+               {
+                   if ( is != null)
+                       is.close();
+               }
+               catch(Exception ee )
+                   {}
+           }
+         }
+         
+         return toolboxManager;
+     }
+    
 
     // --------------------------------------------------- Methods ------------
 
@@ -297,4 +375,4 @@
     }
 
 
-}
+}
\ No newline at end of file
Index: java/org/apache/velocity/tools/view/servlet/VelocityViewServlet.java
===================================================================
RCS file: /home/cvspublic/jakarta-velocity-tools/view/src/java/org/apache/velocity/tools/view/servlet/VelocityViewServlet.java,v
retrieving revision 1.5
diff -u -r1.5 VelocityViewServlet.java
--- java/org/apache/velocity/tools/view/servlet/VelocityViewServlet.java	7 May 2002 10:23:33 -0000	1.5
+++ java/org/apache/velocity/tools/view/servlet/VelocityViewServlet.java	21 Jan 2003 15:46:22 -0000
@@ -68,10 +68,6 @@
 import java.util.HashMap;
 import java.util.Properties;
 
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
 import org.apache.commons.collections.ExtendedProperties;
 
 import org.apache.velocity.servlet.VelocityServlet;
@@ -157,53 +153,12 @@
          */
 
 	    String key = config.getInitParameter( TOOLBOX_PARAM );
+        
+        if (key == null || key.length() == 0) key = config.getServletContext().getInitParameter( TOOLBOX_PARAM);
 
         if ( key != null )
         {
-            InputStream is = null;
-
-            try
-            {
-                /*
-                 *  little fix up
-                 */
-
-                if ( !key.startsWith("/") )
-                {
-            	   key = "/" + key;
-            	}
-
-               /*
-                *  get the bits
-                */
-
-               is = getServletContext().getResourceAsStream( key );
-
-               if ( is != null)
-               {
-                    Velocity.info("Using toolbox configuration file '" + key +"'");
-
-                    toolboxManager = new ServletToolboxManager(getServletContext());
-                    toolboxManager.load( is );
-
-                    Velocity.info("Toolbox setup complete.");
-               }
-           }
-           catch( Exception e )
-           {
-               Velocity.error("Problem reading toolbox file properties file '" + key +"' : " + e );
-           }
-
-           finally
-           {
-               try
-               {
-                   if ( is != null)
-                       is.close();
-               }
-               catch(Exception ee )
-                   {}
-           }
+            toolboxManager = ServletToolboxManager.getToolboxManager(config.getServletContext(),key);
        }
        else
        {
@@ -346,4 +301,4 @@
         }
    }
    
-}
+}
\ No newline at end of file

