Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 54493 invoked from network); 5 Apr 2007 07:19:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Apr 2007 07:19:29 -0000 Received: (qmail 56188 invoked by uid 500); 5 Apr 2007 07:19:36 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 56139 invoked by uid 500); 5 Apr 2007 07:19:36 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 56126 invoked by uid 99); 5 Apr 2007 07:19:36 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 05 Apr 2007 00:19:36 -0700 X-ASF-Spam-Status: No, hits=-98.6 required=10.0 tests=ALL_TRUSTED,INFO_TLD,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 05 Apr 2007 00:19:28 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 2FE561A9838; Thu, 5 Apr 2007 00:19:08 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r525736 - in /cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet: CocoonReloadingListener.java ReloadingSpringFilter.java Date: Thu, 05 Apr 2007 07:19:07 -0000 To: cvs@cocoon.apache.org From: reinhard@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070405071908.2FE561A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: reinhard Date: Thu Apr 5 00:19:06 2007 New Revision: 525736 URL: http://svn.apache.org/viewvc?view=rev&rev=525736 Log: Use the SpringReloader to reload Spring. It has to be loaded by the ReloadingClassloader instead of the Context classloader. Modified: cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/CocoonReloadingListener.java cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/ReloadingSpringFilter.java Modified: cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/CocoonReloadingListener.java URL: http://svn.apache.org/viewvc/cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/CocoonReloadingListener.java?view=diff&rev=525736&r1=525735&r2=525736 ============================================================================== --- cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/CocoonReloadingListener.java (original) +++ cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/CocoonReloadingListener.java Thu Apr 5 00:19:06 2007 @@ -59,11 +59,10 @@ changedFileParentPath.endsWith("config/spring") // local Spring bean configurations ) { log.debug("Configuration or .class file change detected [" + operation + "]: " + changedFile); - System.out.println("Configuration or .class file change detected [" + operation + "]: " + changedFile); +// System.out.println("Configuration or .class file change detected [" + operation + "]: " + changedFile); reload = true; } else { log.debug("Other file change detected, no reload [" + operation + "]: " + changedFile); // any other file change - System.out.println("Other file change detected, no reload [" + operation + "]: " + changedFile); } } Modified: cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/ReloadingSpringFilter.java URL: http://svn.apache.org/viewvc/cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/ReloadingSpringFilter.java?view=diff&rev=525736&r1=525735&r2=525736 ============================================================================== --- cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/ReloadingSpringFilter.java (original) +++ cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/tools/rcl/wrapper/servlet/ReloadingSpringFilter.java Thu Apr 5 00:19:06 2007 @@ -17,21 +17,18 @@ package org.apache.cocoon.tools.rcl.wrapper.servlet; import java.io.IOException; +import java.lang.reflect.Method; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.web.context.ContextLoader; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.ServletContextFactoryBean; -import org.springframework.web.context.support.WebApplicationContextUtils; -import org.springframework.web.context.support.XmlWebApplicationContext; /** * This servlet filter reloads the Spring application context whenever a relevant change in the @@ -49,33 +46,22 @@ ServletException { if(CocoonReloadingListener.isReload()) { - synchronized (this) { + synchronized (this) { + log.info("Performing a reload of the Spring application context."); + System.out.println("Performing a reload of the Spring application context."); // load the spring context loader from the reloading classloader ClassLoader cl = ReloadingClassloaderManager.getClassLoader(config.getServletContext()); - ContextLoader springContextLoader = null; + Object reloader = null; try { - Class contextLoaderClass = cl.loadClass(ContextLoader.class.getName()); - springContextLoader = (ContextLoader) contextLoaderClass.newInstance(); + reloader = cl.loadClass("org.apache.cocoon.tools.rcl.springreloader.SpringReloader").newInstance(); } catch (Exception e) { - throw new ServletException("Cannot load class " + ContextLoader.class.getName(), e); + throw new ServletException("Can't create SpringReloader.", e); } - - // close old Spring application context - XmlWebApplicationContext oldAc = (XmlWebApplicationContext) - WebApplicationContextUtils.getRequiredWebApplicationContext(this.config.getServletContext()); - oldAc.close(); - if(log.isDebugEnabled()) { - this.log.debug("Removing old application context: " + oldAc); - } - this.config.getServletContext().removeAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); - - // create the new Spring application context - ServletContextFactoryBean b = new ServletContextFactoryBean(); - b.setServletContext(this.config.getServletContext()); - XmlWebApplicationContext xac = (XmlWebApplicationContext) springContextLoader. - initWebApplicationContext(this.config.getServletContext()); - if(log.isDebugEnabled()) { - log.debug("Reloading Spring application context: " + xac); + try { + Method reloadMethod = reloader.getClass().getMethod("reload", new Class[]{ServletContext.class} ); + reloadMethod.invoke(reloader, new Object[]{config.getServletContext()}); + } catch(Exception e) { + new ServletException("Problems occurred, while invoking the SpringReloader reload method.", e); } } }