Author: markt Date: Thu Dec 12 21:49:19 2013 New Revision: 1550545 URL: http://svn.apache.org/r1550545 Log: Fix an edge case spotted while testing other functionality. If a context.xml file is added to a DIR it was always ignored. It will now trigger a redeploy.
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml tomcat/tc7.0.x/trunk/webapps/docs/config/automatic-deployment.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1550541 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java?rev=1550545&r1=1550544&r2=1550545&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java Thu Dec 12 21:49:19 2013 @@ -1263,6 +1263,11 @@ public class HostConfig deployedApp.redeployResources.put( xmlCopy.getAbsolutePath(), Long.valueOf(0)); + if (!xml.exists()) { + deployedApp.redeployResources.put( + xml.getAbsolutePath(), + Long.valueOf(0)); + } } addWatchedResources(deployedApp, dir.getAbsolutePath(), context); // Add the global redeploy resources (which are never deleted) at Modified: tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java?rev=1550545&r1=1550544&r2=1550545&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java (original) +++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java Thu Dec 12 21:49:19 2013 @@ -64,6 +64,8 @@ public class TestHostConfigAutomaticDepl new File("test/deployment/broken.war"); private static final File DIR_XML_SOURCE = new File("test/deployment/dirContext"); + private static final File DIR_XML_SOURCE_META_INF = + new File("test/deployment/dirContext/META-INF"); private static final File DIR_SOURCE = new File("test/deployment/dirNoContext"); @@ -71,6 +73,7 @@ public class TestHostConfigAutomaticDepl private static final int EXT = 2; private static final int WAR = 3; private static final int DIR = 4; + private static final int DIR_XML = 5; private static final int NONE = 1; private static final int RELOAD = 2; @@ -1228,21 +1231,25 @@ public class TestHostConfigAutomaticDepl /* * Expected behaviour for the addition of files. * - * Artifacts present Artifact Artifacts remaining - * XML WAR EXT DIR Added XML WAR EXT DIR Action - * N Y N N DIR - Y - A None - * N N N Y WAR - A - R Redeploy - * Y N N N DIR Y - - A None - * N N N Y XML A - - Y Redeploy - * Y N N N WAR Y A - - Reload - * N Y N N XML A Y - - Redeploy - * Y Y N N DIR Y Y - A None - * Y N N Y WAR Y A - N Reload - * N Y N Y XML A Y - Y Redeploy - * Y N Y N DIR Y - Y A None - * Y N Y N WAR Y A Y - None - * N N N Y EXT A - A R Redeploy - * N Y N N EXT A Y A - Redeploy + * Artifacts present copyXML deployXML Artifact Artifacts remaining + * XML WAR EXT DIR Added XML WAR EXT DIR Action + * N Y N N N Y DIR - Y - A None + * N N N Y N Y WAR - A - R Redeploy + * Y N N N N Y DIR Y - - A None + * N N N Y N Y XML A - - Y Redeploy + * Y N N N N Y WAR Y A - - Reload + * N Y N N N Y XML A Y - - Redeploy + * Y Y N N N Y DIR Y Y - A None + * Y N N Y N Y WAR Y A - N Reload + * N Y N Y N Y XML A Y - Y Redeploy + * Y N Y N N Y DIR Y - Y A None + * Y N Y N N Y WAR Y A Y - None + * N N N Y N Y EXT A - A R Redeploy + * N Y N N N Y EXT A Y A - Redeploy + * + * N N N Y Y/N N DIR+XML - - - Y Redeploy (failed) + * N N N Y Y Y DIR+XML A - - Y Redeploy + * N N N Y N Y DIR+XML - - - Y Redeploy * * Addition of a file is treated as if the added file has been modified * with the following additional actions: @@ -1349,12 +1356,50 @@ public class TestHostConfigAutomaticDepl true, true, false, XML_COOKIE_NAME, REDEPLOY); } + @Test + public void testAdditionDirAddDirXmlTF() throws Exception { + doTestAddition(false, false, false, false, true, true, false, DIR_XML, + false, false, true, null, REDEPLOY, LifecycleState.FAILED); + } + + @Test + public void testAdditionDirAddDirXmlFF() throws Exception { + doTestAddition(false, false, false, false, true, false, false, DIR_XML, + false, false, true, null, REDEPLOY, LifecycleState.FAILED); + } + + @Test + public void testAdditionDirAddDirXmlTT() throws Exception { + doTestAddition(false, false, false, false, true, true, true, DIR_XML, + true, false, true, DIR_COOKIE_NAME, REDEPLOY, + LifecycleState.STARTED); + } + + @Test + public void testAdditionDirAddDirXmlFT() throws Exception { + doTestAddition(false, false, false, false, true, false, true, DIR_XML, + false, false, true, DIR_COOKIE_NAME, REDEPLOY, + LifecycleState.STARTED); + } + private void doTestAddition(boolean startXml, boolean startExternalWar, boolean startExternalDir, boolean startWar, boolean startDir, int toAdd, boolean resultXml, boolean resultWar, boolean resultDir, String resultCookieName, int resultAction) throws Exception { + doTestAddition(startXml, startExternalWar, startExternalDir, startWar, + startDir, false, true, toAdd, resultXml, resultWar, resultDir, + resultCookieName, resultAction, LifecycleState.STARTED); + } + + private void doTestAddition(boolean startXml, boolean startExternalWar, + boolean startExternalDir, boolean startWar, boolean startDir, + boolean copyXML, boolean deployXML, int toAdd, boolean resultXml, + boolean resultWar, boolean resultDir, String resultCookieName, + int resultAction, LifecycleState state) + throws Exception { + Tomcat tomcat = getTomcatInstance(); StandardHost host = (StandardHost) tomcat.getHost(); @@ -1379,13 +1424,16 @@ public class TestHostConfigAutomaticDepl war = createWar(WAR_XML_SOURCE, true); } if (startDir) { - dir = createDirInAppbase(true); + dir = createDirInAppbase(toAdd != DIR_XML); } if ((startWar || startExternalWar) && !startDir) { host.setUnpackWARs(false); } + host.setCopyXML(copyXML); + host.setDeployXML(deployXML); + // Deploy the files we copied tomcat.start(); host.backgroundProcess(); @@ -1421,6 +1469,10 @@ public class TestHostConfigAutomaticDepl Assert.fail(); } break; + case DIR_XML: + dir = createDirXmlInAppbase(); + xml = getXmlInConfigBaseForAppbase(); + break; default: Assert.fail(); } @@ -1489,8 +1541,7 @@ public class TestHostConfigAutomaticDepl if (newContext == null) { Assert.fail(); } else { - Assert.assertEquals( - LifecycleState.STARTED, newContext.getState()); + Assert.assertEquals(state, newContext.getState()); } Assert.assertNotSame(oldContext, newContext); // No init or start as that will be in a new context object @@ -1619,6 +1670,13 @@ public class TestHostConfigAutomaticDepl return dir; } + private File createDirXmlInAppbase() throws IOException { + File dir = new File(getAppBaseFile(getTomcatInstance().getHost()), + APP_NAME.getBaseName() + "/META-INF"); + recurrsiveCopy(DIR_XML_SOURCE_META_INF, dir); + return dir; + } + private File createDirInExternal(boolean withXml) throws IOException { File ext = new File(external, "external" + ".war"); if (withXml) { @@ -1642,8 +1700,7 @@ public class TestHostConfigAutomaticDepl } private File createXmlInConfigBaseForAppbase() throws IOException { - Host host = getTomcatInstance().getHost(); - File xml = new File(getConfigBaseFile(host), APP_NAME + ".xml"); + File xml = getXmlInConfigBaseForAppbase(); File parent = xml.getParentFile(); if (!parent.isDirectory()) { Assert.assertTrue(parent.mkdirs()); @@ -1652,6 +1709,11 @@ public class TestHostConfigAutomaticDepl return xml; } + private File getXmlInConfigBaseForAppbase() { + Host host = getTomcatInstance().getHost(); + return new File(getConfigBaseFile(host), APP_NAME + ".xml"); + } + private File createXmlInConfigBaseForExternal(File ext) throws IOException { return createXmlInConfigBaseForExternal(ext, false); } Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1550545&r1=1550544&r2=1550545&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Dec 12 21:49:19 2013 @@ -66,6 +66,12 @@ added to member map again by ping at heartbeat thread in the node that received the <code>MapMessage.MSG_STOP</code>. (kfujino) </fix> + <fix> + Handle the case where a <code>context.xml</code> file is added to a + web application deployed from a directory. Previously the file was + ignored until Tomcat was restarted. Now (assuming automatic deployment + is enabled)it will trigger a redploy of the web application. (markt) + </fix> </changelog> </subsection> </section> Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/automatic-deployment.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/automatic-deployment.xml?rev=1550545&r1=1550544&r2=1550545&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/config/automatic-deployment.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/config/automatic-deployment.xml Thu Dec 12 21:49:19 2013 @@ -514,6 +514,9 @@ will be logged when the WAR in the <em>appBase</em> is first detected. If the external WAR is removed, the WAR in the <em>appBaase</em> will be left and may be deployed via automatic deployment.</li> + <li>If an XML file is added to the META-INF directory of an application + deployed from that DIR, the application will always be redeployed. The + result will be the same as for a new deployment.</li> </ul> </section> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org