Ich habe eine Webanwendung mit Java, Struts und über Apache Server und Tomcat ausgeführt. Es wäre sehr nützlich, die Anwendung vom Web aus neu starten zu können. Ich möchte Tomcat nicht neu starten, nur diese Webapp, genauso wie Tomcat Manager es tut.
Weißt du wie ich es machen kann? Wenn nicht, irgendeine Art, dieses Verhalten zu simulieren (laden Sie config.properties, machen Hibernate init Prozess, etc.)?
Vielen Dank.
Ich habe mir kurz den Quellcode für den Tomcat Manager angesehen. Es sieht so aus, als gäbe es eine Klasse, die Teil der Tomcat-Quelle "Container Servlet" ist. Aus den Javadocs:
Ein ContainerServlet ist ein Servlet das hat Zugang zu Catalina intern Funktionalität und wird von der geladen Catalina Class Loader anstelle der Webanwendung Klassenlader.
Ein ContainerServlet erhält automatisch einen Wrapper, mit dem Context und Deployer abgerufen werden können - und der Deployer verfügt über hilfreiche Methoden wie start(String contextPath)
und stop(String contextPath)
, die das tun, was Sie wollen.
Ich denke also, dass Sie Ihr eigenes Servlet schreiben müssen, das von ContainerServlet erbt, und konfigurieren Sie Tomcat, um Ihr Servlet mit dem Catalina Class Loader zu laden (sehen Sie, wie der Manager konfiguriert ist, um zu sehen, wie). Beachten Sie, dass dies in einer gehosteten Umgebung wahrscheinlich keine Option für Sie darstellt.
Dann könnte Ihr Servlet, sagen wir, eine Taste haben, die Sie drücken, um die Anwendung neu zu laden. Ich empfehle, davor einen Passwortschutz zu setzen. :)
Tippen Sie einfach auf die URLs
%Vor%zu stoppen und
%Vor%um zu beginnen. Das simuliert Sie mit der Manager-Anwendung.
Tomcat Manager bietet eine HTTP-Schnittstelle zum Starten / Stoppen einer Anwendung und anderer Aufgaben. Es gibt Ant-Aufgaben , die Sie einfach verwenden können Zugriff auf diese Vorgänge.