dgraham 2003/07/02 18:47:06 Modified: src/share/org/apache/struts Globals.java src/share/org/apache/struts/action ActionServlet.java src/share/org/apache/struts/util RequestUtils.java Log: Moved initialization of module prefix list to the new ActionServlet.initModulePrefixes() method from RequestUtils.getModulePrefixes() because of a potential race condition documented in PR# 21091. This also required a move of the RequestUtils.PREFIXES constant to Globals.MODULE_PREFIXES_KEY. Revision Changes Path 1.6 +15 -16 jakarta-struts/src/share/org/apache/struts/Globals.java Index: Globals.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/Globals.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Globals.java 16 Feb 2003 02:51:32 -0000 1.5 +++ Globals.java 3 Jul 2003 01:47:05 -0000 1.6 @@ -7,7 +7,7 @@ * * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2002 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,26 +59,17 @@ * */ - package org.apache.struts; - import java.io.Serializable; - /** - * <p>Global manifest constants for the entire Struts Framework.</p> - * - * <p>Many of these constants were initially defined in <code>Action</code>, - * but were moved here so that they could be referenced without referencing - * the <code>Action</code> class itself. For backwards compatibility, - * constant references there point at this class, and the constant values - * themselves have not changed.</p> + * Global manifest constants for the entire Struts Framework. * * @author Craig R. McClanahan + * @author David Graham * @version $Revision$ $Date$ */ - public class Globals implements Serializable { @@ -138,6 +129,14 @@ */ public static final String MODULE_KEY = "org.apache.struts.action.MODULE"; + + /** + * The ServletContext attribute under which we store the module prefixes + * String[]. + * @since Struts 1.2 + */ + public static final String MODULE_PREFIXES_KEY = + "org.apache.struts.globals.MODULE_PREFIXES"; /** 1.154 +39 -7 jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java Index: ActionServlet.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v retrieving revision 1.153 retrieving revision 1.154 diff -u -r1.153 -r1.154 --- ActionServlet.java 2 Jul 2003 04:02:40 -0000 1.153 +++ ActionServlet.java 3 Jul 2003 01:47:05 -0000 1.154 @@ -72,6 +72,7 @@ import java.util.Iterator; import java.util.MissingResourceException; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.UnavailableException; import javax.servlet.http.HttpServlet; @@ -445,13 +446,15 @@ initOther(); initServlet(); - // Initialize modules as needed getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this); + + // Initialize modules as needed ModuleConfig moduleConfig = initModuleConfig("", config); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); + Enumeration names = getServletConfig().getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); @@ -466,8 +469,37 @@ initModulePlugIns(moduleConfig); moduleConfig.freeze(); } - destroyConfigDigester(); - + + this.initModulePrefixes(this.getServletContext()); + + this.destroyConfigDigester(); + } + + /** + * Saves a String[] of module prefixes in the ServletContext under + * Globals.MODULE_PREFIXES_KEY. <strong>NOTE</strong> - + * the "" prefix for the default module is not included in this list. + * + * @since Struts 1.2 + */ + protected void initModulePrefixes(ServletContext context) { + ArrayList prefixList = new ArrayList(); + + Enumeration names = context.getAttributeNames(); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + if (!name.startsWith(Globals.MODULE_KEY)) { + continue; + } + + String prefix = name.substring(Globals.MODULE_KEY.length()); + if (prefix.length() > 0) { + prefixList.add(prefix); + } + } + + String[] prefixes = (String[]) prefixList.toArray(new String[prefixList.size()]); + context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes); } 1.107 +9 -37 jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java Index: RequestUtils.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v retrieving revision 1.106 retrieving revision 1.107 diff -u -r1.106 -r1.107 --- RequestUtils.java 2 Jul 2003 03:09:47 -0000 1.106 +++ RequestUtils.java 3 Jul 2003 01:47:05 -0000 1.107 @@ -133,11 +133,6 @@ */ private static MessageResources messages = MessageResources.getMessageResources("org.apache.struts.util.LocalStrings"); - - /** - * The context attribute under which we store our prefixes list. - */ - private static final String PREFIXES_KEY = "org.apache.struts.util.PREFIXES"; /** * Java 1.4 encode method to use instead of deprecated 1.3 version. @@ -1844,38 +1839,15 @@ /** * Return the list of module prefixes that are defined for - * this web application, creating it if necessary. <strong>NOTE</strong> - + * this web application. <strong>NOTE</strong> - * the "" prefix for the default module is not included in this list. * - * @param context The ServletContext for this web application - * @return an array of module prefixes + * @param context The ServletContext for this web application. + * @return An array of module prefixes. * @since Struts 1.1 */ - public synchronized static String[] getModulePrefixes(ServletContext context) { - // TODO Move prefix list initialization to ActionServlet.init() and unsynchronize - // this method in Struts 1.2 - - String prefixes[] = (String[]) context.getAttribute(PREFIXES_KEY); - if (prefixes != null) { - return (prefixes); - } - - ArrayList list = new ArrayList(); - Enumeration names = context.getAttributeNames(); - while (names.hasMoreElements()) { - String name = (String) names.nextElement(); - if (!name.startsWith(Globals.MODULE_KEY)) { - continue; - } - String prefix = name.substring(Globals.MODULE_KEY.length()); - if (prefix.length() > 0) { - list.add(prefix); - } - } - prefixes = (String[]) list.toArray(new String[list.size()]); - context.setAttribute(PREFIXES_KEY, prefixes); - return (prefixes); - + public static String[] getModulePrefixes(ServletContext context) { + return (String[]) context.getAttribute(Globals.MODULE_PREFIXES_KEY); } /**
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]