craigmcc 02/01/12 20:21:18 Modified: conf/share struts-config_1_1.dtd src/share/org/apache/struts/action ActionServlet.java src/share/org/apache/struts/config ApplicationConfig.java ControllerConfig.java Log: There is no reason that all sub-applications should have to share a single RequestProcessor, so make it configurable on a per-sub-application basis. As a side effect, this simplifies the internal method signatures too, since there will be one RequestProcessor instance per sub-application. Revision Changes Path 1.7 +6 -1 jakarta-struts/conf/share/struts-config_1_1.dtd Index: struts-config_1_1.dtd =================================================================== RCS file: /home/cvs/jakarta-struts/conf/share/struts-config_1_1.dtd,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- struts-config_1_1.dtd 13 Jan 2002 00:25:35 -0000 1.6 +++ struts-config_1_1.dtd 13 Jan 2002 04:21:18 -0000 1.7 @@ -11,7 +11,7 @@ "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> - $Id: struts-config_1_1.dtd,v 1.6 2002/01/13 00:25:35 craigmcc Exp $ + $Id: struts-config_1_1.dtd,v 1.7 2002/01/13 04:21:18 craigmcc Exp $ --> @@ -422,6 +422,10 @@ HTTP headers for defeating caching to every response. [false] + processorClass The fully qualified Java class name of the + RequestProcessor class to be used. + [org.apache.struts.action.RequestProcessor] + tempDir Temporary working directory to use when processing file uploads. [Directory provided by servlet container] --> @@ -434,6 +438,7 @@ <!ATTLIST controller maxFileSize CDATA #IMPLIED> <!ATTLIST controller multipartClass %ClassName; #IMPLIED> <!ATTLIST controller nocache %Boolean; #IMPLIED> +<!ATTLIST controller processorClass %ClassName; #IMPLIED> <!ATTLIST controller tempDir CDATA #IMPLIED> 1.84 +46 -46 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.83 retrieving revision 1.84 diff -u -r1.83 -r1.84 --- ActionServlet.java 13 Jan 2002 00:25:35 -0000 1.83 +++ ActionServlet.java 13 Jan 2002 04:21:18 -0000 1.84 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v 1.83 2002/01/13 00:25:35 craigmcc Exp $ - * $Revision: 1.83 $ - * $Date: 2002/01/13 00:25:35 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v 1.84 2002/01/13 04:21:18 craigmcc Exp $ + * $Revision: 1.84 $ + * $Date: 2002/01/13 04:21:18 $ * * ==================================================================== * @@ -254,9 +254,6 @@ * be returned. [true] * <em>DEPRECATED - Configure this using the "null" attribute of * the <message-resources> element.</em></li> - * <li><strong>processor</strong> - The fully qualified Java class name of the - * <code>RequestProcessor</code> implementation class to be used. - * [org.apache.struts.action.RequestProcessor]</li> * <li><strong>tempDir</strong> - The temporary working directory to use when * processing file uploads. [The working directory provided to this web * application as a servlet context attribute] @@ -268,7 +265,7 @@ * * @author Craig R. McClanahan * @author Ted Husted - * @version $Revision: 1.83 $ $Date: 2002/01/13 00:25:35 $ + * @version $Revision: 1.84 $ $Date: 2002/01/13 04:21:18 $ */ public class ActionServlet @@ -332,13 +329,6 @@ /** - * The Java class name of the RequestProcessor implementation to use. - */ - protected String processorClass = - "org.apache.struts.action.RequestProcessor"; - - - /** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * <strong>MUST</strong> be an even number of Strings in this list! @@ -389,7 +379,7 @@ log(internal.getMessage("finalizing")); destroyDataSources(); - destroyProcessor(); + destroyApplications(); destroyInternal(); // FIXME - destroy ApplicationConfig and message resource instances @@ -409,7 +399,6 @@ initInternal(); initOther(); initServlet(); - initProcessor(); // Initialize sub-applications as needed ApplicationConfig ac = initApplicationConfig("", config); @@ -445,7 +434,9 @@ HttpServletResponse response) throws IOException, ServletException { - processor.process(request, response); + RequestUtils.selectApplication(request, getServletContext()); + getApplicationConfig(request).getProcessor().process + (request, response); } @@ -463,7 +454,9 @@ HttpServletResponse response) throws IOException, ServletException { - processor.process(request, response); + RequestUtils.selectApplication(request, getServletContext()); + getApplicationConfig(request).getProcessor().process + (request, response); } @@ -586,6 +579,28 @@ /** + * Gracefully terminate use of any sub-applications associated with this + * application (if any). + */ + protected void destroyApplications() { + + Enumeration names = getServletContext().getAttributeNames(); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + Object value = getServletContext().getAttribute(name); + if (value instanceof ApplicationConfig) { + try { + ((ApplicationConfig) value).getProcessor().destroy(); + } catch (Throwable t) { + ; + } + } + } + + } + + + /** * Gracefully release any configDigester instance that we have created. */ protected void destroyConfigDigester() { @@ -636,12 +651,21 @@ /** - * <p>Gracefully terminate the RequestProcessor instance we were using. + * Return the application configuration object for the currently selected + * sub-application. + * + * @param request The servlet request we are processing */ - protected void destroyProcessor() { + protected ApplicationConfig getApplicationConfig + (HttpServletRequest request) { - processor.destroy(); - processor = null; + ApplicationConfig config = (ApplicationConfig) + request.getAttribute(Action.APPLICATION_KEY); + if (config == null) { + config = (ApplicationConfig) + getServletContext().getAttribute(Action.APPLICATION_KEY); + } + return (config); } @@ -922,10 +946,6 @@ } catch (Throwable t) { detail = 0; } - value = getServletConfig().getInitParameter("processor"); - if (value != null) { - processorClass = value; - } value = getServletConfig().getInitParameter("validating"); if (value != null) { if (value.equalsIgnoreCase("true") || @@ -933,26 +953,6 @@ validating = true; else validating = false; - } - - } - - - /** - * Initialize the RequestProcessor instance we will be using. - * - * @exception ServletException if we cannot initialize a request processor - */ - protected void initProcessor() throws ServletException { - - try { - Class clazz = Class.forName(processorClass); - processor = (RequestProcessor) clazz.newInstance(); - processor.init(this); - } catch (Throwable t) { - log(internal.getMessage("initProcessor"), t); - throw new UnavailableException - (internal.getMessage("initProcessor")); } } 1.6 +33 -4 jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java Index: ApplicationConfig.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ApplicationConfig.java 13 Jan 2002 00:25:36 -0000 1.5 +++ ApplicationConfig.java 13 Jan 2002 04:21:18 -0000 1.6 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v 1.5 2002/01/13 00:25:36 craigmcc Exp $ - * $Revision: 1.5 $ - * $Date: 2002/01/13 00:25:36 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v 1.6 2002/01/13 04:21:18 craigmcc Exp $ + * $Revision: 1.6 $ + * $Date: 2002/01/13 04:21:18 $ * * ==================================================================== * @@ -64,8 +64,11 @@ import java.io.Serializable; +import javax.servlet.ServletException; +import javax.servlet.UnavailableException; import org.apache.commons.collections.FastHashMap; import org.apache.struts.action.ActionServlet; +import org.apache.struts.action.RequestProcessor; @@ -79,7 +82,7 @@ * previous Struts behavior that only supported one application.</p> * * @author Craig R. McClanahan - * @version $Revision: 1.5 $ $Date: 2002/01/13 00:25:36 $ + * @version $Revision: 1.6 $ $Date: 2002/01/13 04:21:18 $ * @since Struts 1.1 */ @@ -204,6 +207,32 @@ public String getPrefix() { return (this.prefix); + } + + + /** + * The initialized RequestProcessor instance to be used for processing + * requests for this application. + */ + protected RequestProcessor processor = null; + + public synchronized RequestProcessor getProcessor() + throws ServletException { + + if (processor == null) { + try { + Class clazz = + Class.forName(getControllerConfig().getProcessorClass()); + processor = (RequestProcessor) clazz.newInstance(); + processor.init(servlet, this); + } catch (Throwable t) { + throw new UnavailableException + ("Cannot initialize RequestProcessor of class " + + getControllerConfig().getProcessorClass() + ": " + t); + } + } + return (this.processor); + } 1.3 +22 -4 jakarta-struts/src/share/org/apache/struts/config/ControllerConfig.java Index: ControllerConfig.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ControllerConfig.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ControllerConfig.java 13 Jan 2002 00:25:36 -0000 1.2 +++ ControllerConfig.java 13 Jan 2002 04:21:18 -0000 1.3 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ControllerConfig.java,v 1.2 2002/01/13 00:25:36 craigmcc Exp $ - * $Revision: 1.2 $ - * $Date: 2002/01/13 00:25:36 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ControllerConfig.java,v 1.3 2002/01/13 04:21:18 craigmcc Exp $ + * $Revision: 1.3 $ + * $Date: 2002/01/13 04:21:18 $ * * ==================================================================== * @@ -72,7 +72,7 @@ * configuration file.</p> * * @author Craig R. McClanahan - * @version $Revision: 1.2 $ $Date: 2002/01/13 00:25:36 $ + * @version $Revision: 1.3 $ $Date: 2002/01/13 04:21:18 $ * @since Struts 1.1 */ @@ -183,6 +183,22 @@ /** + * The fully qualified class name of the RequestProcessor implementation + * class to be used for this application. + */ + protected String processorClass = + "org.apache.struts.action.RequestProcessor"; + + public String getProcessorClass() { + return (this.processorClass); + } + + public void setProcessorClass(String processorClass) { + this.processorClass = processorClass; + } + + + /** * The temporary working directory to use for file uploads. */ protected String tempDir = null; @@ -219,6 +235,8 @@ } sb.append(",nocache="); sb.append(this.nocache); + sb.append(",processorClass="); + sb.append(this.processorClass); if (this.tempDir != null) { sb.append(",tempDir="); sb.append(this.tempDir);
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>