DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=30424>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=30424 possible enhancement on bootup (or proving how little I know)... Summary: possible enhancement on bootup (or proving how little I know)... Product: Struts Version: 1.1 Final Platform: All OS/Version: Other Status: NEW Severity: Enhancement Priority: Other Component: Controller AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Sorry, this is going to get a bit long, and is part of your directions to submit proposed enhancements/patches via Bugzilla. Preamble: I know this violates the letter of the "framework". However, I submit that it does not violate the spirit and provides an extension that cleanly solves some issues, especially at boot-time. Description: I am developing a sub-framework for a project that looks like it's going to be 95% reusable for another project that's also on my plate. It involves creating singleton support objects that all aspects of my solution wants to access, often-times for performance reasons (so far, my actions, formbeans, and even business logic have accessed these application-specific "infrastructure" components). It became obvious that I wanted to configure these singleton objects from a resource (I got lazy and used .properties - I should have used .xml but didn't want to put the thought into organization and dtd specification yet. Yeah, lame excuse). At this juncture, I ran into the problem of initializing my singleton through a static block, and I was not in the normal framework of execute(). As a result, I did not have access to the initialization parameters through the ServletConfig/ Servlet/Context. Proposed Solution: Two static methods from the servlet entry point, ActionServlet: public static String getAppInitParameter(String key); public static Enumeration getAppInitParameterNames(); Note: There are no namespace collisions as you will see in the javadoc further on down this post. Patch (all additions to ServletAction.java, from stable release 1.1): import java.util.Hashtable; protected static Hashtable appInitParameters = new Hashtable(); /** * ActionServlet.getAppInitParameterNames() returns an Enumeration of * all the application initialization parameters. * * @return java.util.Enumeration */ public static Enumeration getAppInitParameterNames() { return(appInitParameters.keys()); } /** * ActionServlet.getAppInitParameter(String key) is designed to allow * struts-based applications to set and obtain their own initialization * parameters that they can set in the <init-param> block within the * <servlet> specification in <i>web.xml</i>. It works as follows: * * All application-specific entry names must start with the * same name as the "application" <init-param> name, followed by a * slash. Note: this "application" name is also the entry that * specifies the name of your internationalization resource files * with Struts. Example: If if you had the following in your * <i>web.xml</i> file's servlet specification: * * <init-param> * <param-name>application</param-name> * <param-value>example</param-value> * </init-param> * * You could now make the following entry into the web.xml * servlet configuration block and it would be * accessible from any part of your application. * * <init-param> * <param-name>example/exampleParam</param-name> * <param-value>example-value</param-value> * </init-param> * * Note: everything is case-sensitive. * * Note: The resulting initialization parameter name consists of the * contents <i>after</i> the separating slash, '/'. Example: * * ActionServlet.getAppInitParameter("exampleParam") returns * "example-value". * * This is primarily useful in the situations where you are initializing * helper parts of your application that's outside of the Action and * Form components of the framework, such as initializing singleton * support options as part of the initialization of your application's * base Action class extension. At this juncture, you were not called * as part of the normal "execute" path and therefore do not have access to * the complete normal Struts framework. * * @param java.lang.String key * @return java.lang.String */ public static String getAppInitParameter(String key) { return((String) appInitParameters(key)); } // in init() String appName = getServletConfig().getInitParameter("application"); // within "while (names.hasMoreElements()) { // String name = names.nextElement(); if (appName != null && name.startsWith(appName + "/")) { appInitParameters.put(name.substring(appName.length() + 1), getServletConfig().getInitParameter(name)); continue; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
