Tomcat – Can’t auto deploy war in tomcat

tomcat

I've been giving this thing a try for the last 3 hours and nothing. I need to drop a new war and have tomcat autodeploy it. It is not happening. Here is my simplified configuration:

server.xml

<Engine name="Catalina" defaultHost="localhost">
  <Host name="something.com" appBase="/var/www/something.com/webapps"
        unpackWARs="false" autoDeploy="true" 
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="application.war" debug="0" reloadable="true">
      ... some realm and data source stuff here
    </Context>
  </Host>
</Engine>

When I start tomcat everything works great. I have tried two approaches:

  1. Copy a new war using scp in the location.
  2. Touching /var/www/something.com/webapps/application.war.

In both cases I can see catalina.err with the same message:

INFO: Undeploying context [/application]

Without a corresponding

INFO: Deploying web application archive application.war

which I get when I restart tomcat. I have a feeling this is because it is not inside the CATALINA_BASE/webapps but don't know how to proceed. Any help?

Best Answer

It could be a number of things. Some specific issues I've hit:

(1) File permissions. Make sure the webapps directory, your work directory, the war itself, and any special files it accesses are all readable/writeable by the user running Tomcat (ideally they should be owned by that user).

(2) The previous version isn't fully removed. Try stopping Tomcat, deleting the war and matching folder, copying the new war in, then starting Tomcat. If it works then, the problem might be left over files. (I have an app for example that doesn't completely clean itself up).

(3) The app might not be initializing properly due to issues with the app. If the war deploys automatically into a folder, autodeploy is working, but the app didn't fully initialize. Look for log messages. Depending on your app, this might be in tomcat/logs, the current directory, or standard out. If you can, change the log properties (e.g. log4j.properties file) to show debug level messages.

(4) Permgen mememory problems. When you reload an app in Tomcat, it uses up Permgen memory. By definition, this can't be recovered. Reload too much, and Tomcat will crash with an out-of-memory error (you can usually see this in your logs). Either configure more permgen, or better yet, shut off/restart Tomcat when redeploying an app.

http://wiki.apache.org/tomcat/OutOfMemory