En los ejemplos siguientes se muestra cómo se pueden implementar los asesores personalizados.
Se incluye un asesor personalizado de ejemplo para WebSphere Application Server en el
directorio
raíz_instalación/servers/samples/CustomAdvisors/. El código completo no se duplica en este documento. Asegúrese de que se implementará lo
siguiente:
- ADV_was.java es el archivo de código fuente del asesor que se compila y ejecuta
en la máquina de Load Balancer.
- LBAdvisor.java.servlet es el código fuente del servlet que se debe renombrar
a LBAdvisor.java, compilar y ejecutar en la máquina de WebSphere Application Server.
El asesor completo es sólo ligeramente más complejo que el ejemplo. Añade
una rutina de análisis especializada que es más concisa que el ejemplo de StringTokenizer
mostrado en el tema Ejemplo: utilización de los datos devueltos de los asesores.
El componente más complejo del código de ejemplo es el servlet Java. Entre
otros métodos, el servlet contiene dos métodos necesarios para la especificación del servlet:
init() y service(), y un método, run(), necesario para la clase Java.lang.thread.
- El motor de servlets llama una vez a init() durante la inicialización. Este
método crea una hebra denominada _checker que se ejecuta de manera independiente de las
llamadas al asesor y está inactiva durante un periodo de tiempo antes de reanudar el bucle de
proceso.
- El motor de servlets llama a service() cada vez que se invoca el servlet.
En este caso, el asesor llama al método. El método service() envía una
corriente de caracteres ASCII a una corriente de salida.
- run() contiene el núcleo de la ejecución del código. El método start()
al que se le llama desde el método init(), lo llama.
A continuación figuran los fragmentos pertinentes del código del servlet:
...
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;
}
...