Seems like somebody ought to point out that calling lifecycle methods (like Servlet.init and Servlet.destroy) from app code is generally a bad idea. OTOH, if it works for you...
Quoting Pady Srinivasan <[EMAIL PROTECTED]>: > > I made a small change to the code where setting WEB-INF in the classpath is > not required. > > private long lastModified = 0; > private void reloadConfig(HttpServletRequest request) { > if ( System.getProperty("DEVELOPMENT_MODE") != null ) { > try { > File f = new > File(request.getSession().getServletContext().getRealPath("/WEB-INF/struts-c > onfig.xml")); > if ( f.lastModified() != lastModified ) { > ActionServlet as = ( (ActionServlet) > request.getSession().getServletContext().getAttribute( > Globals.ACTION_SERVLET_KEY)); > as.destroy(); > > request.getSession().getServletContext().removeAttribute(Globals.REQUEST_PRO > CESSOR_KEY); > as.init(); > System.out.println("Reload ok."); > } > lastModified = f.lastModified(); > } > catch (Exception ex) { > ex.printStackTrace(); > } > } > } > > Thanks > > -- pady > [EMAIL PROTECTED] > > > -----Original Message----- > From: Pady Srinivasan [mailto:[EMAIL PROTECTED] > Sent: Thursday, March 25, 2004 9:37 AM > To: Struts Users Mailing List > Subject: RE: Automatically detecting struts-config changes and reload app. > > > I used your code ( Thanks ) and I finally got it to work with a Filter. We > have a login filter in our app. So I added a method which runs only in > development mode. > > * Set the DEVELOPMENT_MODE system property during development. > * Add the WEB-INF directory to the classpath. ( does Tomcat include this in > the classpath ? ) > * Call this method from the doFilter() method in your filter. > > private long lastModified = 0; > private void reloadConfig(HttpServletRequest request) { > if ( System.getProperty("DEVELOPMENT_MODE") != null ) { > try { > URL url = LoginFilter.class.getResource("/struts-config.xml"); > if ( url == null ) > return; > File f = new File(url.getFile()); > if ( f.lastModified() != lastModified ) { > ActionServlet as = ( (ActionServlet) > request.getSession().getServletContext().getAttribute( > Globals.ACTION_SERVLET_KEY)); > as.destroy(); > > request.getSession().getServletContext().removeAttribute(Globals.REQUEST_PRO > CESSOR_KEY); > as.init(); > System.out.println("Reload ok."); > } > lastModified = f.lastModified(); > } > catch (Exception ex) { > ex.printStackTrace(); > } > } > } > } > > > > > Thanks > > -- pady > [EMAIL PROTECTED] > > > -----Original Message----- > From: Leonardo Francalanci [mailto:[EMAIL PROTECTED] > Sent: Thursday, March 25, 2004 7:19 AM > To: Struts Users Mailing List > Subject: R: Automatically detecting struts-config changes and reload app. > > I wrote the following on 01/23/2004 on the mailing list, but nobody cared... > > > > > > I wrote a servlet to trigger off a reload of the struts-config.xml. > > The servlet is: > > protected void doGet(..) { > > ActionServlet as = > ((ActionServlet)request.getSession().getServletContext().getAttribute(Global > s.ACTION_SERVLET_KEY)); > as.destroy(); > > request.getSession().getServletContext().removeAttribute(Globals.REQUEST_PRO > CESSOR_KEY); > as.init(); > > new PrintStream(response.getOutputStream()).println("Reload > ok."); > } > > > Now my questions... > > 1) Is there another way to trigger off a reload without using the Tomcat's > reload > function (which takes a very long time and leaves db connections open?) > > 2) I had to call removeAttribute(Globals.REQUEST_PROCESSOR_KEY) because the > destroy method > of the ActionServlet doesn't do it. Here is the code (from > ActionServlet.destroyModules()): > > [..] > if (value instanceof ModuleConfig) { > ModuleConfig config = (ModuleConfig) value; > getRequestProcessor(config).destroy(); > > getServletContext().removeAttribute(name); > > I think there should be something like > > getServletContext().removeAttribute(Globals.REQUEST_PROCESSOR_KEY + > config.getPrefix()); > > If I don't remove the attribute following requests will not work (because of > the code > in ActionServlet.getRequestProcessor) > > Is this a bug? > > > 3) Don't you think that something like that could be useful? I mean, if > answer to 1) is NO, > wouldn't be useful to have a configuration reloader with struts? > > 4) Calling actionServlet.destroy() and actionServlet.init() is enough to > re-load the whole > struts-config.xml? -- Kris Schneider <mailto:[EMAIL PROTECTED]> D.O.Tech <http://www.dotech.com/> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]