https://issues.apache.org/bugzilla/show_bug.cgi?id=45989
           Summary: Deployer fails when copy of large war to webapps/ is
                    slow
           Product: Tomcat 6
           Version: 6.0.18
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: [EMAIL PROTECTED]
                CC: [EMAIL PROTECTED]


The tomcat deployer apparently does not check the integrity of a war before
undeploying the existing application and deploying the new version.

To re-create this, start tomcat and deploy a war by copying, over the network,
a large war directly into the webapps directory.   I get the following output:

INFO: Deploying web application archive some.war
Oct 10, 2008 11:40:05 AM org.apache.catalina.startup.ContextConfig init
SEVERE: Exception fixing docBase: {0}
java.util.zip.ZipException: Could not find End Of Central Directory
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:117)
        at java.util.jar.JarFile.<init>(JarFile.java:133)
        at java.util.jar.JarFile.<init>(JarFile.java:70)
        at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
        at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:68)
        at
sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
        at
sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
        at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:141)
        at
org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:883)
        at
org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1012)
        at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.StandardContext.init(StandardContext.java:5341)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4086)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:792)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:527)
        at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
        at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
        at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1338)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
        at java.lang.Thread.run(Thread.java:619)
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext
resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Invalid or unreadable WAR file : Could not
find End Of Central Directory
        at
org.apache.naming.resources.WARDirContext.setDocBase(WARDirContext.java:135)
        at
org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:3957)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4126)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
        at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
        at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
        at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
        at java.lang.Thread.run(Thread.java:619)
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext start
SEVERE: Error in resourceStart() 
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext start
SEVERE: Error getConfigured
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/some] startup failed due to previous errors
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext stop
INFO: Container
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/some] has not
been started
Oct 10, 2008 11:40:15 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some] 
Oct 10, 2008 11:40:15 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:40:15 AM org.apache.catalina.startup.ContextConfig init
SEVERE: Exception fixing docBase: {0}
java.util.zip.ZipException: Could not find End Of Central Directory
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:117)
        at java.util.jar.JarFile.<init>(JarFile.java:133)
        at java.util.jar.JarFile.<init>(JarFile.java:70)
        at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
        at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:68)
        at
sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
        at
sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
        at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:141)
        at
org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:883)
        at
org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1012)
        at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.StandardContext.init(StandardContext.java:5341)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4086)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:792)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:527)
        at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
        at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
        at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1338)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
        at java.lang.Thread.run(Thread.java:619)
Oct 10, 2008 11:40:15 AM org.apache.catalina.core.StandardContext
resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Invalid or unreadable WAR file : Could not
find End Of Central Directory
        at
org.apache.naming.resources.WARDirContext.setDocBase(WARDirContext.java:135)
        at
org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:3957)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4126)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
        at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
        at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
        at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
        at java.lang.Thread.run(Thread.java:619)
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext start
SEVERE: Error in resourceStart() 
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext start
SEVERE: Error getConfigured
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [/some] startup failed due to previous errors
Oct 10, 2008 11:40:05 AM org.apache.catalina.core.StandardContext stop
INFO: Container
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/some] has not
been started
Oct 10, 2008 11:40:15 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some] 
Oct 10, 2008 11:40:15 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:40:15 AM org.apache.catalina.startup.ContextConfig init
SEVERE: Exception fixing docBase: {0}
java.util.zip.ZipException: Could not find End Of Central Directory
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:117)
        at java.util.jar.JarFile.<init>(JarFile.java:133)
        at java.util.jar.JarFile.<init>(JarFile.java:70)
        at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
        at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
        at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:68)
        at
sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
        at
sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
        at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:141)
        at
org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:883)
        at
org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1012)
        at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.StandardContext.init(StandardContext.java:5341)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4086)
        at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:792)
        at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:527)
        at
org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
        at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
        at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217)
        at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1338)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
        at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
        at java.lang.Thread.run(Thread.java:619)
Oct 10, 2008 11:40:15 AM org.apache.catalina.core.StandardContext
resourcesStart
SEVERE: Error starting static Resources

If I copy some.war into a temporary location on the local disk and then copy it
into the webapps/ directory it deploys.  If I try to redeploy the already
deployed webapps by copying it from the network again, I get the following
output:

Oct 10, 2008 11:41:46 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:41:46 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:41:56 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:41:56 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:42:06 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:42:06 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:42:16 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:42:16 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:42:26 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:42:26 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:42:36 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:42:36 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war
Oct 10, 2008 11:42:46 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/some]
Oct 10, 2008 11:42:46 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive some.war

The end result is that final deployment of the application is corrupted. 
Classes in jars in the WEB-INF/lib directory are unavailable to the
application, etc.   Is there anyway to get tomcat to check the integrity of new
wars copied into webapps/ and have it not undeploy the existing application, or
deploy the new application if the integrity check fails?  If the deployer
retests the war whenever inotify or whatever strategy tells tomcat the file has
changed, and does not deploy it until the war passes the check, I think that
will solve this problem.

I realize I could just use the management app, or a temporary directory, but
that would break rsync style code release to load balanced clusters, etc.


-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to