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? --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________ ______________________________________________________________________ This e-mail has been scanned by the Heroix e-mail security system ______________________________________________________________________ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________ ______________________________________________________________________ This e-mail has been scanned by the Heroix e-mail security system ______________________________________________________________________ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]