Frage

Ich bin neu in Wicket und möchte eine Web-Anwendung halten von innen selbst eine Art von Wartung Admin-Seite für die Ausführung von Clean-up, DB-Updates, Wiederherstellung verwenden und so weiter. Da ich plane für Daten Hibernate oder ähnlich zu verwenden Bindung Ich möchte einen kompletten Neustart der Anwendung auszulösen von innen selbst ohne alle geben die in der Lage sein wird, diese Aktionen den begleitenden Tomcat-Manager Kennwort ausgeführt werden.

Was ich herausgefunden habe, scheint es keine einfache Möglichkeit, um einen echten Neustart einer Java-Web-Anwendung, ohne den Manager Passwort auslösen? Da es jedoch viele Java Webapps mit einer solchen Restart-Funktionalität in ihre Admin-Panels sind, gehe ich davon aus es möglich sein sollte, einen Neustart in entweder spezifische Servlet-Containern oder einigen Web-Frameworks auszulösen. Sie haben irgendwie den Trick zu tun? (Oder vielleicht haben sie wirklich nicht von Grund auf neu starten, aber nur ohne einen sauberen Neustart neu initialisieren?)

Ich kann nichts finden über Wicket oder Tomcat der Lage ist, mit einer Abschaltung ausgelöst werden und aus ihren Anwendungen neu starten, obwohl es einige internen Methoden in Wicket sind, das das zu tun, vielleicht in der Lage? (Kann öffentlich zugegriffen werden aber JavaDoc rät sie, da sie nur für den internen Gebrauch sind)

Aus sicherheitstechnischer Sicht sehe ich wirklich nicht, warum eine Anwendung nicht in der Lage sein sollte, einen solchen Neustart von seinen eigenen Code zu beantragen.

Kann dies geschehen, und wenn ja, was ich in meiner Anwendung tun müssen, um es neu gestartet hat?

Edit: Nur meine Frage genauer machen: Weder der Benutzer noch die App sollte jedes Passwort hat, die verwendet werden, um die Tomcat-Manager-Schnittstelle zuzugreifen. Ich wurde von einigen Verfahren zu denken zu nennen oder einig Flag zu setzen, die Servlet-Container, ohne die Notwendigkeit der Zulassung, dass bestimmte Anwendung neu starten ausgelöst haben, dies zu tun. Meine Gedanken sind, dass, da die Anwendung in einem Servlet-Container läuft es sollte eine gewisse Art und Weise zum Herunterfahren hat und neu gestartet werden. Wenn das mit Java Applikationsserver in der Regel nicht möglich ist, kann es eine Möglichkeit sein, um es auf Anwendungsebene, indem Sie einen Aufruf an die darunter liegende Framework (Wicket in diesem Fall) zu tun alle laufenden Threads zu beenden, Reinigen Sie so weit wie möglich nach oben und Neustart die Anwendung den Rahmen verwendet wird; so etwas wie ein "soft reboot" des App-Stack.

War es hilfreich?

Lösung

Es ist meist irrelevant für Ihre Frage, die Ihre App Wicket verwendet. Es ist eine Java-Web-Anwendung, den Wicket-Framework. Abgefaßt wie diese, Ihre Suche, wie man einen Web-App neu zu starten, um den Behälter Tomcat verwenden. Wenn Sie einen anderen Web-Anwendung Behälter (Anlegestelle etc) wählen dann würden Sie brauchen, um den Vorgang zu ändern.

Sie können diese URL schlagen eine App zu starten: http://localhost:8080/manager/start?path=/myapp und http://localhost:8080/manager/stop?path=/myapp Ihre Anwendung zu stoppen. Ändern / myapp auf Ihre Anwendungen Kontext, und Sie haben Start / Stopp-Steuerung.

Sie können dann mit Passwort Probleme intern in Ihrem Code befassen.

In Anbetracht Ihrer Klarstellung aussehen könnten Sie unter dieser tomcat Dokumentation und JMX verwenden. Aber auch JMX ist durch ein Passwort geschützt. Es gibt keinen Standard für die von Ihrem Web-App auf dem Container-Steuerelemente zu bekommen.

Andere Tipps

Ich versuche zu denken, wenn / was anderes Web-Frameworks wirklich diese unterstützen. Ich denke, Jim ist auf das richtige Niveau der Lösung zu zeigen. Unabhängig davon, welcher Rahmen einen Web-Container verwendet wird, sollte für den Neustart eines enthaltenen Web-App ermöglichen. Tomcat würde die Manager-Anwendung benötigt zur Verfügung steht. Es scheint, dass (aus meinem googeln), dass Jetty diese Funktionalität durch JMX MBeans aussetzt. So ist die Restart-Funktionalität möglicherweise nicht tragbar zwischen Containern.

Um dies zu portabel zu machen, in jedem Rahmen, ich glaube, Sie isolieren müssen, was die Dinge nötig sind, um neu zu starten. Wenn es Hibernate erneut initialisieren Sitzung Fabrik. Wenn es Frühling Konfiguration ist, kann dies sicherlich mehr aufdringlich sein, aber unter Ersatz oder Bohnen Neukonfiguration scheint der Weg zu gehen. Wenn es i18n oder Markup-Ressourcen Wicket ich glaube schon dabei helfen.

Ich ermutige Sie auch einen Blick auf JMX zu nehmen. Sie können die Authentifizierung für JMX in diesem Fall sicherstellen, dass die JMX-Port nicht erreichbar ist vom Internet (filtern Sie den Port auf dem Host-basierte Firewall, oder sie binden nur an eine lokale IP-Adresse) auszuschalten. JMX sollte die Fernüberwachung und Kontrolle von Anwendungen, Container in einer Java EE Welt standardisieren, so dass es mehr oder weniger stellt die Infrastruktur Sie suchen.

oder alternativ einen anderen Web-Container verwenden (vorzugsweise ein eingebettetes eins) und Griff auch Behälter wieder von Ihrem Java-Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top