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 sólo es ligeramente más complejo que el del ejemplo. Añade una rutina de análisis especializada que es más compacta que la del 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 servlet llama a init() una vez en la inicialización. Este
método crea una hebra denominada _checker que se ejecuta independientemente de las
llamadas del asesor y que está inactiva durante un periodo de tiempo antes de reanudar
el bucle de proceso.
- El motor de servlet 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 de código. Lo llama el método start()
al que se llama desde el método init().
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;
}
...