Die folgenden Beispiele zeigen, wie angepasste Advisor implementiert werden können.
Ein angepasster Beispieladvisor 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 Advisorquellcodedatei, die auf der Load-Balancer-Maschine kompiliert und ausgeführt wird.
- LBAdvisor.java.servlet ist der Servletquellcode, 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 im Artikel Beispiel: Die von den Advisor zurückgegebene Daten verwenden gezeigte StringTokenizer-Beispiel.
Der komplexere Teil des Beispielcodes befindet sich im Java-Servlet. Neben anderen Methoden enthält das
Servlet zwei Methoden, die von der Servletspezifikation gefordert werden,
init() und service(), sowie eine Methode run(), die von der Klasse
Java.lang.thread
gefordert wird.
- init() wird von der Servlet-Engine 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-Engine 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;
}
...