2009-06-12 2 views
8

Ho creato un'applicazione Web utilizzando Java, Struts e utilizzando Apache Server e Tomcat. Sarebbe molto utile poter riavviare l'applicazione dal web. Non voglio riavviare Tomcat, solo questa webapp, proprio come fa Tomcat Manager.Avvia/arresta un'applicazione Web da sola?

Sai come posso farlo? In caso negativo, un modo per simulare tale comportamento (ricarica config.properties, make Hibernate init process, etc)?

Grazie mille.

+0

È possibile trovare [questo] (http://p2p.wrox.com/servlets/40311-tomcat-restart-only-one-application.html) link per essere utile. –

risposta

5

Ho dato una rapida occhiata al codice sorgente per Tomcat Manager. Sembra che ci sia una classe che fa parte della sorgente Tomcat chiamata "Servlet contenitore". Dalle javadocs:

Un ContainerServlet è un servlet che ha accesso a Catalina funzionalità interna, ed è caricato dal caricatore di Catalina classe invece della classe di applicazione web caricatore.

Un ContainerServlet viene automaticamente passato un involucro che può essere utilizzato per ottenere il contesto e Deployer - e il Deployer dispone di metodi utili come start(String contextPath) e stop(String contextPath) che farà quello che si desidera.

Quindi, quello che penso che dovresti fare è scrivere il tuo servlet che eredita da ContainerServlet e configurare Tomcat per caricare il tuo servlet usando il caricatore di classe Catalina (guarda come Manager è configurato per vedere come). Nota che probabilmente questa non sarà un'opzione per te in un ambiente ospitato.

Quindi il servlet potrebbe avere, ad esempio, un pulsante premuto per ricaricare l'applicazione. Raccomando di mettere una protezione con password di qualche tipo di fronte a questo. :)

1

Tomcat Manager offre un'interfaccia http per avviare/arrestare un'applicazione e altre attività. Ci sono Ant tasks che puoi usare per accedere facilmente a queste operazioni.

2

appena colpito l'URL

http://<username>:<password>@<hostname>:<port>/manager/stop?path=/<context path> 

di fermarsi e

http://<username>:<password>@<hostname>:<port>/manager/start?path=/<context path> 

per iniziare. Questo ti simula usando l'applicazione manager.

+0

Dato che Tomcat 7 devi usare 'manager/testo' invece di' manager'. – lazlev