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]

Reply via email to