Index: 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
--- org/apache/velocity/tools/view/servlet/ServletToolboxManager.java	10 May 2002 05:42:18 -0000	1.3
+++ org/apache/velocity/tools/view/servlet/ServletToolboxManager.java	22 Jan 2003 15:20:03 -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,14 +148,19 @@
     private ArrayList sessionToolInfo;
     private ArrayList requestToolInfo;
 
-
+    private static HashMap managersMap = new HashMap();
 
     // --------------------------------------------------- Constructor --------
 
     /**
      * Default constructor
+     *
+     * Use getInstance(ServletContext,String) instead if you want
+     * to ensure there is exactly one ServletToolboxManager
+     * per xml toolbox configuration file.
      */
-    public ServletToolboxManager(ServletContext servletContext)
+    protected ServletToolboxManager(ServletContext servletContext)
+
     {
         this.servletContext = servletContext;
         appTools = new HashMap();
@@ -158,7 +168,79 @@
         requestToolInfo = new ArrayList();
     }
 
+    /**
+     * ServletToolboxManager factory method.
+     * This method will ensure there is exactly one ServletToolboxManager
+     * per xml toolbox configuration file.
+     */
 
+     public static synchronized ServletToolboxManager getInstance(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
+Velocity.debug("######### Building a new instance ! ############");
+             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.debug("################ Storing it under "+toolboxFile+" ################");
+
+                    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 )
+                   {}
+           }
+         }
+else Velocity.debug("################## Found previous instance ! ###############");
+         
+         return toolboxManager;
+     }
+    
 
     // --------------------------------------------------- Methods ------------
 
Index: 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
--- org/apache/velocity/tools/view/servlet/VelocityViewServlet.java	7 May 2002 10:23:33 -0000	1.5
+++ org/apache/velocity/tools/view/servlet/VelocityViewServlet.java	22 Jan 2003 15:20:03 -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.getInstance(config.getServletContext(),key);
        }
        else
        {

