Blog

Wicket-Seitenanfragen mit JAMon überwachen

Lars Vonk

Aktualisiert Oktober 23, 2025
2 Minuten

Für die Wicket-Webanwendung, an der ich derzeit arbeite, haben wir JAMon für die Leistungsüberwachung in Echtzeit eingebaut. Wie üblich fangen wir alle Aufrufe von Objekten wie Repositories und Services ab, um deren Leistung zu überwachen. Da wir Spring verwenden, können wir diese von Spring verwalteten Objekte mit Spring AOP leicht abfangen. Neben diesen Statistiken sind wir auch daran interessiert, wie lange eine bestimmte Seitenanfrage dauert. Da die Wicket-Komponenten nicht von Spring verwaltet werden, können wir Spring AOP nicht verwenden. In diesem Blog erkläre ich Ihnen, wie Sie eine JAMon-Überwachung für diese Seitenabfragen einrichten können.

Wenn ich diese Seitenanfragen überwache, möchte ich wissen, welche Seite tatsächlich angefordert wurde. Ich habe mir zunächst die Klasse WicketFilter angesehen, da dies der Einstiegspunkt Ihrer Wicket-Anwendung ist. Ich konnte jedoch keinen Weg finden, um festzustellen, welche Seite dort tatsächlich angefordert wurde. Nach einigen Nachforschungen und der Bestätigung durch die Wicket-Benutzergruppe (übrigens eine sehr gute und aktive Benutzergruppe) stellte sich heraus, dass die Klasse WebRequestCycle die Klasse ist, die wir überwachen müssen. Wicket bietet Hooks, die Sie in Ihrem benutzerdefinierten WebRequestCycle außer Kraft setzen müssen, nämlich onBeginRequest und onEndRequest. Es gibt jedoch eine knifflige Sache: Im onBeginRequest ist der Name der angeforderten Seite noch nicht verfügbar, so dass wir die Startzeit der Anfrage anstelle des Monitors speichern müssen. Im onEndRequest können wir feststellen, welche Seite angefordert wurde und können die gemessene Zeit zu JAMon hinzufügen. Hier ist der Code des benutzerdefinierten WebRequestCycle:

public class JAMonMonitoredWebRequestCycle extends WebRequestCycle {
  static final String UNIT = "ms.";
  private long startTime;
  public JAMonMonitoredWebRequestCycle(WebApplication Anwendung, WebRequest Anfrage
  , Response Antwort) {
  super(Anwendung, Anfrage, Antwort);
  this.startTime = 0;
  }
  @Override
  protected void onBeginRequest() {
  super.onBeginRequest();
  startTime = System.currentTimeMillis();
  }
  @Override
  protected void onEndRequest() {
  super.onEndRequest();
  calculateDurationAndAddToMonitor();
  }
  private void calculateDurationAndAddToMonitor() {
  if(startTime != 0) {
  Klasse pageClass = null;
  if(getWebResponse().isAjax() && getWebRequest().getPage() != null) {
  pageClass = getWebRequest().getPage().getClass();
  } sonst {
  pageClass = getResponsePageClass();
  }
  if(pageClass != null) {
  MonitorFactory.add(pageClass.toString(), UNIT,
  System.currentTimeMillis() - startTime);
  }
  }
  }
}

Verfasst von

Lars Vonk

Contact

Let’s discuss how we can support your journey.