Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor

ptruche
My application context is defined as an XML file located in `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`.
    <Context docBase='/my/path/to/myApp/myAppWarFile.war'>       <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>    </Context>
`/my/path/to/myApp` contains the WAR file myAppWarFile.war and a number of externalized properties that are read by Spring.
Tomcat is configured with autoDeploy turned off. When I start Tomcat, it creates `my/path/to/Tomcat/conf/webapps/my-app/` and the WAR file gets unpacked into this location as expected, and the application of course can run as expected.
When I want to deploy a new version without restarting Tomcat, I run the undeploy command as follows:
    curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password
... and that works. But when I instruct Tomcat to deploy with the following curl statement, I get a failure.
    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password    # Tomcat response    FAIL - Invalid context path null was specified
Adding the path does not help much, I still get a failure.
    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password
    # Tomcat response    FAIL - Failed to deploy application at context path /my-app
The worst part is that tailing catalina.out does not yield any insight. And on top of that, Tomcat deletes the application context XML file `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`!
Naturally I have reviewed Tomcat documentation (https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file) and I have googled all day to figure this out, but I have not found anything that can help me with this particular configuration.
It feels as though the choice is: 
 1. Tomcat with autoDeploy on (not recommended for production) in which case simply dropping the new WAR to `/my/path/to/myApp/` will cause Tomcat to hot deploy the app. 2. Tomcat with autoDeploy off, but re-deploying requires a Tomcat restart because the deploy API does not seem to be working as advertised.
Has anybody made this work with this configuration?
ADDITIONAL INFORMATION
I turned up the logging on Catalina. When I run the first deploy command without the path, I get this set of log entries:
    FINE: Start processing with input [config=file:/my/path/to/tomcat/conf/Catalina/localhost/my-app.xml]    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [OPEN]    Oct 13, 2015 10:04:53 AM org.apache.coyote.http11.AbstractHttp11Processor process    FINE: Error parsing HTTP request header    java.io.EOFException: Unexpected EOF read on the socket        at org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout(Http11Processor.java:168)        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:982)        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)        at java.lang.Thread.run(Thread.java:744)
    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [CLOSED]    Oct 13, 2015 10:04:53 AM org.apache.tomcat.util.threads.LimitLatch countDown    FINE: Counting down[http-bio-8080-exec-16] latch=1
SERVER CONFIG
 Apache Tomcat 7.0.55 (but confirmed same problem with 7.0.59 and 8.0.12. Tomcat configured to run as a service with tomcat user and group owning the catalina base and subfolders, and the docBase folders outside of the appBase Centos 6.5
Reply | Threaded
Open this post in threaded view
|

Re: Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor

markt
On 13/10/2015 16:09, ptruche wrote:

> My application context is defined as an XML file located in `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`.
>     <Context docBase='/my/path/to/myApp/myAppWarFile.war'>       <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>    </Context>
> `/my/path/to/myApp` contains the WAR file myAppWarFile.war and a number of externalized properties that are read by Spring.
> Tomcat is configured with autoDeploy turned off. When I start Tomcat, it creates `my/path/to/Tomcat/conf/webapps/my-app/` and the WAR file gets unpacked into this location as expected, and the application of course can run as expected.
> When I want to deploy a new version without restarting Tomcat, I run the undeploy command as follows:
>     curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password
> ... and that works. But when I instruct Tomcat to deploy with the following curl statement, I get a failure.
>     curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password    # Tomcat response    FAIL - Invalid context path null was specified
> Adding the path does not help much, I still get a failure.
>     curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password
>     # Tomcat response    FAIL - Failed to deploy application at context path /my-app
> The worst part is that tailing catalina.out does not yield any insight. And on top of that, Tomcat deletes the application context XML file `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`!
> Naturally I have reviewed Tomcat documentation (https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file) and I have googled all day to figure this out, but I have not found anything that can help me with this particular configuration.
> It feels as though the choice is:
>  1. Tomcat with autoDeploy on (not recommended for production) in which case simply dropping the new WAR to `/my/path/to/myApp/` will cause Tomcat to hot deploy the app. 2. Tomcat with autoDeploy off, but re-deploying requires a Tomcat restart because the deploy API does not seem to be working as advertised.
> Has anybody made this work with this configuration?
> ADDITIONAL INFORMATION
> I turned up the logging on Catalina. When I run the first deploy command without the path, I get this set of log entries:
>     FINE: Start processing with input [config=file:/my/path/to/tomcat/conf/Catalina/localhost/my-app.xml]    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [OPEN]    Oct 13, 2015 10:04:53 AM org.apache.coyote.http11.AbstractHttp11Processor process    FINE: Error parsing HTTP request header    java.io.EOFException: Unexpected EOF read on the socket        at org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout(Http11Processor.java:168)        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:982)        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)        at java.util.concurrent.Thread
 P
oolExecutor.runWorker(ThreadPoolExecutor.java:1145)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)        at java.lang.Thread.run(Thread.java:744)
>     Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [CLOSED]    Oct 13, 2015 10:04:53 AM org.apache.tomcat.util.threads.LimitLatch countDown    FINE: Counting down[http-bio-8080-exec-16] latch=1
> SERVER CONFIG
>  Apache Tomcat 7.0.55 (but confirmed same problem with 7.0.59 and 8.0.12. Tomcat configured to run as a service with tomcat user and group owning the catalina base and subfolders, and the docBase folders outside of the appBase Centos 6.5
>

The above is pretty much unreadable. Can you reformat please.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor

ptruche
Sorry about the formatting issue. Here is the corrected version.-------------------------------------------------------------------------------

My application context is defined as an XML file located in `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`.

    <Context docBase='/my/path/to/myApp/myAppWarFile.war'>
       <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>
    </Context>

`/my/path/to/myApp` contains the WAR file myAppWarFile.war and a number of externalized properties that are read by Spring.

Tomcat is configured with autoDeploy turned off. When I start Tomcat, it creates `my/path/to/Tomcat/conf/webapps/my-app/` and the WAR file gets unpacked into this location as expected, and the application of course can run as expected.

When I want to deploy a new version without restarting Tomcat, I run the undeploy command as follows:

    curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password

... and that works. But when I instruct Tomcat to deploy with the following curl statement, I get a failure.

    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password
    # Tomcat response
    FAIL - Invalid context path null was specified

Adding the path does not help much, I still get a failure.

    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password

    # Tomcat response
    FAIL - Failed to deploy application at context path /my-app

The worst part is that tailing catalina.out does not yield any insight. And on top of that, Tomcat deletes the application context XML file `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`!

Naturally I have reviewed Tomcat documentation (https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file) and I have googled all day to figure this out, but I have not found anything that can help me with this particular configuration.

It feels as though the choice is:

 1. Tomcat with autoDeploy on (not recommended for production) in which case simply dropping the new WAR to `/my/path/to/myApp/` will cause Tomcat to hot deploy the app.
 2. Tomcat with autoDeploy off, but re-deploying requires a Tomcat restart because the deploy API does not seem to be working as advertised.

Has anybody made this work with this configuration?

ADDITIONAL INFORMATION

I turned up the logging on Catalina. When I run the first deploy command without the path, I get this set of log entries:

    FINE: Start processing with input [config=file:/my/path/to/tomcat/conf/Catalina/localhost/my-app.xml]
    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process
    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [OPEN]
    Oct 13, 2015 10:04:53 AM org.apache.coyote.http11.AbstractHttp11Processor process
    FINE: Error parsing HTTP request header
    java.io.EOFException: Unexpected EOF read on the socket
        at org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout(Http11Processor.java:168)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:982)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:744)

    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process
    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [CLOSED]
    Oct 13, 2015 10:04:53 AM org.apache.tomcat.util.threads.LimitLatch countDown
    FINE: Counting down[http-bio-8080-exec-16] latch=1

SERVER CONFIG

    Apache Tomcat 7.0.55 (but confirmed same problem with 7.0.59 and 8.0.12.
    Tomcat configured to run as a service with tomcat user and group owning the catalina base and subfolders, and the docBase folders outside of the appBase
    Centos 6.5      From: Mark Thomas <[hidden email]>
 To: Tomcat Users List <[hidden email]>
 Sent: Tuesday, October 13, 2015 11:20 AM
 Subject: Re: Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor
   
On 13/10/2015 16:09, ptruche wrote:


> My application context is defined as an XML file located in `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`.
>    <Context docBase='/my/path/to/myApp/myAppWarFile.war'>      <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>    </Context>
> `/my/path/to/myApp` contains the WAR file myAppWarFile.war and a number of externalized properties that are read by Spring.
> Tomcat is configured with autoDeploy turned off. When I start Tomcat, it creates `my/path/to/Tomcat/conf/webapps/my-app/` and the WAR file gets unpacked into this location as expected, and the application of course can run as expected.
> When I want to deploy a new version without restarting Tomcat, I run the undeploy command as follows:
>    curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password
> ... and that works. But when I instruct Tomcat to deploy with the following curl statement, I get a failure.
>    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password    # Tomcat response    FAIL - Invalid context path null was specified
> Adding the path does not help much, I still get a failure.
>    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password
>    # Tomcat response    FAIL - Failed to deploy application at context path /my-app
> The worst part is that tailing catalina.out does not yield any insight. And on top of that, Tomcat deletes the application context XML file `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`!
> Naturally I have reviewed Tomcat documentation (https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file) and I have googled all day to figure this out, but I have not found anything that can help me with this particular configuration.
> It feels as though the choice is:
>  1. Tomcat with autoDeploy on (not recommended for production) in which case simply dropping the new WAR to `/my/path/to/myApp/` will cause Tomcat to hot deploy the app. 2. Tomcat with autoDeploy off, but re-deploying requires a Tomcat restart because the deploy API does not seem to be working as advertised.
> Has anybody made this work with this configuration?
> ADDITIONAL INFORMATION
> I turned up the logging on Catalina. When I run the first deploy command without the path, I get this set of log entries:
>    FINE: Start processing with input [config=file:/my/path/to/tomcat/conf/Catalina/localhost/my-app.xml]    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [OPEN]    Oct 13, 2015 10:04:53 AM org.apache.coyote.http11.AbstractHttp11Processor process    FINE: Error parsing HTTP request header    java.io.EOFException: Unexpected EOF read on the socket        at org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout(Http11Processor.java:168)        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:982)        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)        at java.util.concurrent.Thread
 P
oolExecutor.runWorker(ThreadPoolExecutor.java:1145)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)        at java.lang.Thread.run(Thread.java:744)
>    Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process    FINE: Socket: [org.apache.tomcat.util.net.SocketWrapper@189651c1:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [CLOSED]    Oct 13, 2015 10:04:53 AM org.apache.tomcat.util.threads.LimitLatch countDown    FINE: Counting down[http-bio-8080-exec-16] latch=1
> SERVER CONFIG
>  Apache Tomcat 7.0.55 (but confirmed same problem with 7.0.59 and 8.0.12. Tomcat configured to run as a service with tomcat user and group owning the catalina base and subfolders, and the docBase folders outside of the appBase Centos 6.5
>

The above is pretty much unreadable. Can you reformat please.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]



Reply | Threaded
Open this post in threaded view
|

Re: Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor

markt
On 13/10/2015 16:31, ptruche wrote:

> Sorry about the formatting issue. Here is the corrected version.-------------------------------------------------------------------------------
>
> My application context is defined as an XML file located in `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`.
>
>     <Context docBase='/my/path/to/myApp/myAppWarFile.war'>
>        <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>
>     </Context>
>
> `/my/path/to/myApp` contains the WAR file myAppWarFile.war and a number of externalized properties that are read by Spring.
>
> Tomcat is configured with autoDeploy turned off. When I start Tomcat, it creates `my/path/to/Tomcat/conf/webapps/my-app/` and the WAR file gets unpacked into this location as expected, and the application of course can run as expected.

That is an odd looking location for the WAR to be unpacked to. I'd
expect "my/path/to/Tomcat/webapps/my-app/"

> When I want to deploy a new version without restarting Tomcat, I run the undeploy command as follows:
>
>     curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password

Note: Undeploy removes the xml from
"my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml"

> ... and that works. But when I instruct Tomcat to deploy with the following curl statement, I get a failure.
>
>     curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password
>     # Tomcat response
>     FAIL - Invalid context path null was specified
>
> Adding the path does not help much, I still get a failure.
>
>     curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password
>
>     # Tomcat response
>     FAIL - Failed to deploy application at context path /my-app

Those are expected since the context.xml no longer exists. Better error
messages would be nice in those cases. Patches welcome.

> The worst part is that tailing catalina.out does not yield any insight. And on top of that, Tomcat deletes the application context XML file `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`!
>
> Naturally I have reviewed Tomcat documentation (https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file) and I have googled all day to figure this out, but I have not found anything that can help me with this particular configuration.

This page might also be useful:
http://tomcat.apache.org/tomcat-7.0-doc/config/automatic-deployment.html


> It feels as though the choice is:
>
>  1. Tomcat with autoDeploy on (not recommended for production) in which case simply dropping the new WAR to `/my/path/to/myApp/` will cause Tomcat to hot deploy the app.

There are reasons not to enable autoDeploy in production (mainly
security) but I wouldn't go as far as to say you should never use
autoDeploy in production.

>  2. Tomcat with autoDeploy off, but re-deploying requires a Tomcat restart because the deploy API does not seem to be working as advertised.
>
> Has anybody made this work with this configuration?

If you want to do this with autoDeploy disabled, I think what you need
to do is:

- Update the external WAR file. Tomcat should ignore this since
autoDeploy is disabled.

- Then, without undeploying the old version, trigger a redeployment via
the Manager using the same curl command as the original deployment but
include the update=true

HTH,

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor

ptruche
Hello Mark,
Indeed I made an error when I wrote the problem statement, maAppWarFile.war is in fact unpacked to "my/path/to/Tomcat/webapps/my-app/," not the conf folder.
 
Philippe  

      From: Mark Thomas <[hidden email]>
 To: Tomcat Users List <[hidden email]>
 Sent: Wednesday, October 14, 2015 4:49 AM
 Subject: Re: Unable to deploy app with Tomcat Manager Text interface using a Context Descriptor
   
On 13/10/2015 16:31, ptruche wrote:

> Sorry about the formatting issue. Here is the corrected version.-------------------------------------------------------------------------------
>
> My application context is defined as an XML file located in `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`.
>
>    <Context docBase='/my/path/to/myApp/myAppWarFile.war'>
>        <Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>
>    </Context>
>
> `/my/path/to/myApp` contains the WAR file myAppWarFile.war and a number of externalized properties that are read by Spring.
>
> Tomcat is configured with autoDeploy turned off. When I start Tomcat, it creates `my/path/to/Tomcat/conf/webapps/my-app/` and the WAR file gets unpacked into this location as expected, and the application of course can run as expected.

That is an odd looking location for the WAR to be unpacked to. I'd
expect "my/path/to/Tomcat/webapps/my-app/"

> When I want to deploy a new version without restarting Tomcat, I run the undeploy command as follows:
>
>    curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password

Note: Undeploy removes the xml from
"my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml"

> ... and that works. But when I instruct Tomcat to deploy with the following curl statement, I get a failure.
>
>    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password
>    # Tomcat response
>    FAIL - Invalid context path null was specified
>
> Adding the path does not help much, I still get a failure.
>
>    curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password
>
>    # Tomcat response
>    FAIL - Failed to deploy application at context path /my-app

Those are expected since the context.xml no longer exists. Better error
messages would be nice in those cases. Patches welcome.

> The worst part is that tailing catalina.out does not yield any insight. And on top of that, Tomcat deletes the application context XML file `my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml`!
>
> Naturally I have reviewed Tomcat documentation (https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file) and I have googled all day to figure this out, but I have not found anything that can help me with this particular configuration.

This page might also be useful:
http://tomcat.apache.org/tomcat-7.0-doc/config/automatic-deployment.html


> It feels as though the choice is:
>
>  1. Tomcat with autoDeploy on (not recommended for production) in which case simply dropping the new WAR to `/my/path/to/myApp/` will cause Tomcat to hot deploy the app.

There are reasons not to enable autoDeploy in production (mainly
security) but I wouldn't go as far as to say you should never use
autoDeploy in production.

>  2. Tomcat with autoDeploy off, but re-deploying requires a Tomcat restart because the deploy API does not seem to be working as advertised.
>
> Has anybody made this work with this configuration?

If you want to do this with autoDeploy disabled, I think what you need
to do is:

- Update the external WAR file. Tomcat should ignore this since
autoDeploy is disabled.

- Then, without undeploying the old version, trigger a redeployment via
the Manager using the same curl command as the original deployment but
include the update=true

HTH,



Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]