remm 2004/07/26 01:09:21 Modified: catalina/src/share/org/apache/catalina/startup HostConfig.java ContextRuleSet.java catalina/src/share/org/apache/catalina/core StandardContext.java catalina/src/share/org/apache/catalina Context.java Added: catalina/src/conf context.xml Log: - Add code to handle resource relaoding. - Add one extra element to Context (I couldn't find a way to avoid it). - Add a global context.xml file, to define two basic reload resources. - Now, I'll do the new anti locking code. Revision Changes Path 1.36 +40 -27 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java Index: HostConfig.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- HostConfig.java 25 Jul 2004 23:35:37 -0000 1.35 +++ HostConfig.java 26 Jul 2004 08:09:19 -0000 1.36 @@ -464,28 +464,28 @@ // Assume this is a configuration descriptor and deploy it log.debug(sm.getString("hostConfig.deployDescriptor", files[i])); try { - Context newContext = null; + Context context = null; synchronized (digester) { - newContext = (Context) digester.parse(contextXml); + context = (Context) digester.parse(contextXml); } - if (newContext instanceof Lifecycle) { + if (context instanceof Lifecycle) { Class clazz = Class.forName(host.getConfigClass()); LifecycleListener listener = (LifecycleListener) clazz.newInstance(); - ((Lifecycle) newContext).addLifecycleListener(listener); + ((Lifecycle) context).addLifecycleListener(listener); } - newContext.setConfigFile(contextXml.getAbsolutePath()); - newContext.setPath(contextPath); + context.setConfigFile(contextXml.getAbsolutePath()); + context.setPath(contextPath); // Add the context XML to the list of watched files deployedApp.reloadResources.put (contextXml.getAbsolutePath(), new Long(contextXml.lastModified())); // Add the associated docBase to the redeployed list if it's a WAR boolean isWar = false; - if (newContext.getDocBase() != null) { - File docBase = new File(newContext.getDocBase()); + if (context.getDocBase() != null) { + File docBase = new File(context.getDocBase()); if (!docBase.isAbsolute()) { docBase = new File(new File(host.getAppBase()), - newContext.getDocBase()); + context.getDocBase()); } deployedApp.redeployResources.put(docBase.getAbsolutePath(), new Long(docBase.lastModified())); @@ -493,21 +493,18 @@ isWar = true; } } - host.addChild(newContext); + host.addChild(context); // Add the eventual unpacked WAR and all the resources which will be // watched inside it - if (isWar && unpackWARs && (newContext.getDocBase() != null)) { - File docBase = new File(newContext.getDocBase()); + if (isWar && unpackWARs && (context.getDocBase() != null)) { + File docBase = new File(context.getDocBase()); if (!docBase.isAbsolute()) { docBase = new File(new File(host.getAppBase()), - newContext.getDocBase()); + context.getDocBase()); } deployedApp.redeployResources.put(docBase.getAbsolutePath(), new Long(docBase.lastModified())); - // FIXME: Add the list of reload resources as given by the context - // This list would by default contain /WEB-INF/web.xml and - // /META-INF/context.xml - // Add new element in Context to configure this + addWatchedResources(deployedApp, context); } } catch (Throwable t) { log.error(sm.getString("hostConfig.deployDescriptor.error", @@ -652,10 +649,7 @@ } deployedApp.redeployResources.put(docBase.getAbsolutePath(), new Long(docBase.lastModified())); - // FIXME: Add the list of reload resources as given by the context - // This list would by default contain /WEB-INF/web.xml and - // /META-INF/context.xml - // Add new element in Context to configure this + addWatchedResources(deployedApp, context); } } catch (Throwable t) { log.error(sm.getString("hostConfig.deployJar.error", @@ -728,10 +722,7 @@ host.addChild(context); deployedApp.redeployResources.put(dir.getAbsolutePath(), new Long(dir.lastModified())); - // FIXME: Add the list of reload resources as given by the context - // This list would by default contain /WEB-INF/web.xml and - // /META-INF/context.xml - // Add new element in Context to configure this + addWatchedResources(deployedApp, context); } catch (Throwable t) { log.error(sm.getString("hostConfig.deployDir.error", files[i]), t); @@ -745,6 +736,25 @@ } + + /** + * Add watched resources to the specified Context. + * @param app + */ + protected void addWatchedResources(DeployedApplication app, Context context) { + File docBase = new File(context.getDocBase()); + if (!docBase.isAbsolute()) { + docBase = new File(new File(host.getAppBase()), + context.getDocBase()); + } + String[] watchedResources = context.findWatchedResources(); + for (int i = 0; i < watchedResources.length; i++) { + File resource = new File(docBase, watchedResources[i]); + app.reloadResources.put(resource.getAbsolutePath(), + new Long(resource.lastModified())); + } + } + /** * Check resources for redeployment and reloading. @@ -805,7 +815,8 @@ if (log.isDebugEnabled()) log.debug("Checking context[" + app.name + "] reload resource " + resource); long lastModified = ((Long) app.reloadResources.get(resources[i])).longValue(); - if ((!resource.exists()) || (resource.lastModified() != lastModified)) { + if ((!resource.exists() && lastModified != 0L) + || (resource.lastModified() != lastModified)) { // Reload application Container context = host.findChild(app.name); try { @@ -822,6 +833,8 @@ log.warn(sm.getString ("hostConfig.context.restart", app.name), e); } + // Update times + app.reloadResources.put(resources[i], new Long(resource.lastModified())); app.timestamp = System.currentTimeMillis(); return; } 1.11 +4 -1 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/ContextRuleSet.java Index: ContextRuleSet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/ContextRuleSet.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- ContextRuleSet.java 23 Jul 2004 22:57:34 -0000 1.10 +++ ContextRuleSet.java 26 Jul 2004 08:09:19 -0000 1.11 @@ -220,6 +220,9 @@ "addValve", "org.apache.catalina.Valve"); + digester.addCallMethod(prefix + "Context/WatchedResource", + "addWatchedResource", 0); + digester.addCallMethod(prefix + "Context/WrapperLifecycle", "addWrapperLifecycle", 0); 1.135 +69 -3 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java Index: StandardContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v retrieving revision 1.134 retrieving revision 1.135 diff -u -r1.134 -r1.135 --- StandardContext.java 23 Jul 2004 22:57:35 -0000 1.134 +++ StandardContext.java 26 Jul 2004 08:09:20 -0000 1.135 @@ -65,8 +65,6 @@ import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.Loader; -import org.apache.catalina.Server; -import org.apache.catalina.ServerFactory; import org.apache.catalina.Wrapper; import org.apache.catalina.deploy.ApplicationParameter; import org.apache.catalina.deploy.ContextEjb; @@ -477,6 +475,12 @@ /** + * The watched resources for this application. + */ + private String watchedResources[] = new String[0]; + + + /** * The welcome files for this application. */ private String welcomeFiles[] = new String[0]; @@ -2277,6 +2281,24 @@ /** + * Add a new watched resource to the set recognized by this Context. + * + * @param name New watched resource file name + */ + public void addWatchedResource(String name) { + + synchronized (watchedResources) { + String results[] = new String[watchedResources.length + 1]; + for (int i = 0; i < watchedResources.length; i++) + results[i] = watchedResources[i]; + results[watchedResources.length] = name; + watchedResources = results; + } + + } + + + /** * Add a new welcome file to the set recognized by this Context. * * @param name New welcome file name @@ -2973,6 +2995,15 @@ /** + * Return the set of watched resources for this Context. If none are + * defined, a zero length array will be returned. + */ + public String[] findWatchedResources() { + return watchedResources; + } + + + /** * Return the set of welcome files defined for this Context. If none are * defined, a zero-length array is returned. */ @@ -3555,6 +3586,41 @@ } + /** + * Remove the specified watched resource name from the list associated + * with this Context. + * + * @param name Name of the watched resource to be removed + */ + public void removeWatchedResource(String name) { + + synchronized (watchedResources) { + + // Make sure this watched resource is currently present + int n = -1; + for (int i = 0; i < watchedResources.length; i++) { + if (watchedResources[i].equals(name)) { + n = i; + break; + } + } + if (n < 0) + return; + + // Remove the specified watched resource + int j = 0; + String results[] = new String[watchedResources.length - 1]; + for (int i = 0; i < watchedResources.length; i++) { + if (i != n) + results[j++] = watchedResources[i]; + } + watchedResources = results; + + } + + } + + /** * Remove the specified welcome file name from the list recognized * by this Context. 1.1 jakarta-tomcat-catalina/catalina/src/conf/context.xml Index: context.xml =================================================================== <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>META-INF/context.xml</WatchedResource> </Context> 1.15 +27 -4 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Context.java Index: Context.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Context.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- Context.java 23 Jul 2004 22:57:35 -0000 1.14 +++ Context.java 26 Jul 2004 08:09:21 -0000 1.15 @@ -18,8 +18,6 @@ package org.apache.catalina; -import java.io.File; - import javax.servlet.ServletContext; import org.apache.tomcat.util.http.mapper.Mapper; @@ -603,6 +601,15 @@ */ public void addTaglib(String uri, String location); + + /** + * Add a resource which will be watched for reloading by the host auto + * deployer. Note: this will not be used in embedded mode. + * + * @param name Path to the resource, relative to docBase + */ + public void addWatchedResource(String name); + /** * Add a new welcome file to the set recognized by this Context. @@ -921,6 +928,13 @@ /** + * Return the set of watched resources for this Context. If none are + * defined, a zero length array will be returned. + */ + public String[] findWatchedResources(); + + + /** * Return <code>true</code> if the specified welcome file is defined * for this Context; otherwise return <code>false</code>. * @@ -928,7 +942,7 @@ */ public boolean findWelcomeFile(String name); - + /** * Return the set of welcome files defined for this Context. If none are * defined, a zero-length array is returned. @@ -1118,6 +1132,15 @@ */ public void removeTaglib(String uri); + + /** + * Remove the specified watched resource name from the list associated + * with this Context. + * + * @param name Name of the watched resource to be removed + */ + public void removeWatchedResource(String name); + /** * Remove the specified welcome file name from the list recognized
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]