Die folgenden Beispiele zeigen, wie angepasste Advisor-Funktionen implementiert werden können.
Eine angepasste Beispiel-Advisor-Funktion für WebSphere Application Server ist im Verzeichnis
"
Installationsstammverzeichnis/servers/samples/CustomAdvisors/" enthalten.
In diesem Dokument wird nicht der vollständige Code gezeigt. Stellen Sie sicher, dass Folgendes implementiert wird:
- ADV_was.java ist die Advisor-Quellcodedatei, die auf der Load-Balancer-Maschine kompiliert und ausgeführt wird.
- LBAdvisor.java.servlet ist der Servlet-Quellcode, der in
LBAdvisor.java umbenannt, kompiliert und auf der Maschine mit WebSphere Application Server ausgeführt werden muss.
Der vollständige Advisor ist nur geringfügig komplexer als das Beispiel. Er besitzt zusätzlich eine spezielle
Parsing-Routine, die kompakter ist als das StringTokenizer-Beispiel, das im Artikel
Beispiel: Von Advisor-Funktionen zurückgegebene Daten verwenden beschrieben wird.
Der komplexere Teil des Beispielcodes befindet sich im Java-Servlet. Neben anderen Methoden enthält das
Servlet zwei Methoden, die von der Servlet-Spezifikation gefordert werden,
init() und service(), sowie eine Methode "run()", die von der Klasse "Java.lang.thread"
gefordert wird.
- init() wird von der Servlet-Steuerkomponente einmal während der Initialisierung aufgerufen. Diese Methode
erstellt einen Thread mit dem Namen _checker, der unabhängig von Aufrufen des Advisors ausgeführt wird und
eine gewisse Zeit inaktiv ist, bevor er die Verarbeitungsschleife fortsetzt.
- service() wird von der Servlet-Steuerkomponente bei jedem Aufruf des Servlets aufgerufen.
In diesem Fall wird die Methode vom Advisor aufgerufen. Die Methode "service()" sendet einen Datenstrom
von ASCII-Zeichen an einen Ausgabedatenstrom.
- run() enthält den zentralen Bestandteil der Codeausführung. Diese Methode wird von der Methode "start()"
aufgerufen, die in der Methode "init()" aufgerufen wird.
Die relevanten Fragmente des Servlet-Codes werden im Folgenden gezeigt:
...
public void init(ServletConfig config) throws ServletException {
super.init(config);
...
_checker = new Thread(this);
_checker.start();
}
public void run() {
setStatus(GOOD);
while (true) {
if (!getKeepRunning())
return;
setStatus(figureLoad());
setLastUpdate(new java.util.Date());
try {
_checker.sleep(_interval * 1000);
} catch (Exception ignore) { ; }
}
}
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
ServletOutputStream out = null;
try {
out = res.getOutputStream();
} catch (Exception e) { ... }
...
res.setContentType("text/x-application-LBAdvisor");
out.println(getStatusString());
out.println(getLastUpdate().toString());
out.flush(); return;
}
...