Ich muss eine webbasierte Anwendung implementieren, die nach der Bereitstellung auf tomcat die aktiven Sitzungen aller Anwendungen, die auf demselben Tomcat bereitgestellt sind, überwachen kann.
Nehmen wir an, Tomcat hat 2 Anwendungen, die ausgeführt werden als 1) ReportGenerator 2) DataSyncManager. Ich muss aktive Sitzungen für diese 2 Anwendungen mit den folgenden Statistiken anzeigen.
%Vor%Ich habe auch eine Anforderung, die Sitzung im laufenden Betrieb zu beenden. Ist es möglich? bitte Beratung.
Ich weiß, das ist etwas ähnliches Admin-Konsole von Tomcat / war. Aber ich muss es als eine benutzerdefinierte Anwendung mit benutzerdefinierten Protokollierungs- und Überwachungsfunktionen implementieren. Bitte sagen Sie mir, auf welchem Framework / API ich aktive Sitzungen auf Tomcat und deren Statistiken erfassen kann.
Ich habe diese Funktionalität mit einem generischen Ansatz implementiert, der Standard-APIs und Spezifikationen, keine Frameworks oder Bibliotheken von Drittanbietern verwendet. Diese Lösung wurde ausgiebig bei vielen Systemen für Unternehmen eingesetzt, die in Glassfish-Anwendungsservern und jboss eingesetzt werden. Es wurde auch erfolgreich mit weblogic (12c) verwendet. Der Ansatz sollte jedoch in jedem Anwendungsserver oder Servlet-Container funktionieren, der die JMX-Standardspezifikation unterstützt.
Die tldr; -Version dient dazu, zwei JMX-Bean-Schnittstellen und einen HTTP-Sitzungslistener zu erstellen. Eine der JMX-Bean-Schnittstellen erstellt eine Instanz pro überwachte Anwendung und ist dafür verantwortlich, alle Sitzungen jeder überwachten Anwendung zu verfolgen. Sie stellt im Grunde Statistiken aller Sitzungen für jede Anwendung bereit. Die andere JMX-Bean-Schnittstelle erstellt eine Instanz für jede Sitzung, die in jeder überwachten Anwendung erstellt wird. Der HTTP-Sitzungslistener überwacht die Sitzungen jeder Anwendung und führt zwei Dinge aus. Informiert die erste JMX-Bean, die dieser Anwendung entspricht, über die erstellten oder zerstörten Sitzungen, damit die Statistiken aktualisiert werden. Registriert JMX-Instanzen, die einer Sitzung entsprechen, aus dem JMX-Dienst oder hebt die Registrierung auf.
Sobald alles eingerichtet ist, kann es von einem JMX-Client wie jconsole und visualvm verwendet werden, die mit dem jdk ausgeliefert werden. Von einem jmx-Client aus ist es möglich, alle Eigenschaften von JMX-Beans anzuzeigen und auch eine ihrer Methoden aufzurufen.
Die folgenden Screenshots stammen aus einer Testanwendung mit jconsole.
Dies sind Attribute aus der JMX-Bean-Instanz, die jeder überwachten Anwendung entsprechen.
Dies sind Vorgänge, die für die ausgewählte spezifische Sitzung ausgeführt werden können.
Wenn mehr als eine Anwendung überwacht wird, sind weitere App-Kontexte mit ihren eigenen Strukturen vorhanden, d. h. / TestApplication, / Application2 usw. unter jeder der jmx-Bean-Schnittstellen.
WIE MAN
Zunächst müssen die zwei JMX-Bean-Interfaces erstellt werden ( einfaches Tutorial ) und dann ein HttpSessionListener ( viele Tutorials online ).
1.Die erste JMX-Bean-Schnittstelle hat nur eine Instanz pro überwachte Anwendung und speichert alle Informationen zu Sitzungen, die von einer der überwachten Anwendungen erstellt wurden. Es wird grundsätzlich für die Persistenz verwendet. Ich behalte nur die Daten im Speicher, was bedeutet, dass die Daten verloren gehen, wenn der Server ausfällt, aber normalerweise ist es nur erforderlich, die Statistiken zu überprüfen, solange der Server aktiv ist. Wenn Sie die Daten in einem Protokoll oder einer Datenbank aufbewahren möchten, um immer diese Informationen zu haben, können Sie dies sicher innerhalb der Implementierung der Schnittstelle tun.
Also könnte das wie folgt sein,
%Vor%Dann müssen Sie eine Implementierung dieser Schnittstelle erstellen, die diese Art von Daten enthält.
%Vor%2.Die zweite JMX-Bean-Schnittstelle hat eine Instanz für jede Sitzung, die in jeder Ihrer überwachten Apps erstellt wurde. Diese Schnittstelle speichert das Sitzungsobjekt und verfügt auch über Methoden, die von einem jmx-Client aufgerufen werden können, um diese Sitzungen ungültig zu machen. Dies kann wie folgt sein,
%Vor%Und wieder ist eine Implementierung erforderlich,
%Vor%3.Dann erstellen Sie den HttpSessionListener, der Instanzen der 2. Bean-Schnittstelle erstellt / entfernt und sie vom JMX-Server Ihres Servers registriert / abmeldet. Dies geschieht, wenn die Sitzungen erstellt und ungültig gemacht / abgelaufen sind. Sie haben also einen Listener pro Anwendung, der in seiner Datei web.xml definiert ist.
HttpSessionListener
%Vor%Diese Funktion kann jederzeit für jede Web-App einfach aktiviert werden, wenn Sie den HttpSessionListener in der Datei web.xml definieren, indem Sie die folgenden Zeilen hinzufügen:
web.xml
%Vor%Haben Sie das Projekt psi-Probe gelesen?
Es ist ein erweiterter Manager und Monitor für Apache Tomcat, gespalten von Lambda Probe.
@ melcs Antwort bietet eine großartige generische Lösung. Wenn es nur auf Tomcat läuft, können Sie auch eine einfachere Version verwenden:
Implementieren Sie in einem Ihrer Servlets die Schnittstelle org.apache.catalina.ContainerServlet
(Sie finden sie in & lt; Tomcat-Installationspfad & gt; \ lib \ catalina.jar).
Übrigens müssen Sie Ihren Kontext in context.xml als privilegiert definieren:
%Vor%