Attached is a patch for ActionServlet to allow multiple config files. With this patch you can specify a comma separated list of config files like this:
<init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml, /WEB-INF/struts-config2.xml </param-value> </init-param> This is also backwards compatible so that existing config files still work. This is a patch for "STRUTS_1_0_BRANCH". I will follow up with a 1.1 patch too. Thoughts? I know there has been a reasonable amount of desire for this functionality on the user list. -james [EMAIL PROTECTED] http://www.ejcenter.com/struts/ __________________________________________________ Do You Yahoo!? Make a great connection at Yahoo! Personals. http://personals.yahoo.com
Index: jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java =================================================================== RCS file: /home/cvspublic/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v retrieving revision 1.68.2.4 diff -u -r1.68.2.4 ActionServlet.java --- jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java 2001/10/07 04:49:15 1.68.2.4 +++ jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java +2001/10/19 21:07:37 @@ -72,6 +72,7 @@ import java.util.Iterator; import java.util.Locale; import java.util.MissingResourceException; +import java.util.StringTokenizer; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.UnavailableException; @@ -159,9 +160,9 @@ * resources bundle base class. [NONE]</li> * <li><strong>bufferSize</strong> - The size of the input buffer used when * processing file uploads. [4096]</li> - * <li><strong>config</strong> - Context-relative path to the XML resource - * containing our configuration information. - * [/WEB-INF/struts-config.xml]</li> + * <li><strong>config</strong> - Comma seperated list of context-relative paths + * to the XML resources containing our configuration information. + * [/WEB-INF/struts-config.xml,/WEB-INF/struts-config2.xml]</li> * <li><strong>content</strong> - Default content type and character encoding * to be set on each response; may be overridden by a forwarded-to * servlet or JSP page. [text/html]</li> @@ -1311,34 +1312,44 @@ if (debug >= 1) log(internal.getMessage("configInit", config)); - // Acquire an input stream to our configuration resource - InputStream input = getServletContext().getResourceAsStream(config); - if (input == null) - throw new UnavailableException - (internal.getMessage("configMissing", config)); - - // Build a digester to process our configuration resource - Digester digester = null; - if (validate) - digester = initDigester(detail); - else - digester = initDigesterOld(detail); + // don't use fast + formBeans.setFast(false); + forwards.setFast(false); + mappings.setFast(false); + + // Process each config file + StringTokenizer st = new StringTokenizer(config, ","); + while (st.hasMoreTokens()) { + String configToken = st.nextToken().trim(); + + // Acquire an input stream to our configuration resource + InputStream input = getServletContext().getResourceAsStream(configToken); + if (input == null) + throw new UnavailableException + (internal.getMessage("configMissing", configToken)); + + // Build a digester to process our configuration resource + Digester digester = null; + if (validate) + digester = initDigester(detail); + else + digester = initDigesterOld(detail); - // Parse the input stream to configure our mappings - try { - formBeans.setFast(false); - forwards.setFast(false); - mappings.setFast(false); - digester.parse(input); - mappings.setFast(true); - forwards.setFast(true); - formBeans.setFast(true); - } catch (SAXException e) { - throw new ServletException - (internal.getMessage("configParse", config), e); - } finally { - input.close(); + // Parse the input stream to configure our mappings + try { + digester.parse(input); + } catch (SAXException e) { + throw new ServletException + (internal.getMessage("configParse", configToken), e); + } finally { + input.close(); + } } + + // use fast + mappings.setFast(true); + forwards.setFast(true); + formBeans.setFast(true); // Transitional support for old format if (!validate) {