I seguenti esempi mostrano il modo in cui è possibile implementare gli advisor personalizzati.
Un advisor personalizzato di esempio per WebSphere Application Server è incluso nella directory
root_installazione/servers/samples/CustomAdvisors/. Il codice completo non è duplicato in questo documento. Verificare che verrà implementato quanto riportato di seguito:
- ADV_was.java è il file del codice sorgente dell'advisor compilato ed eseguito sulla macchina Load Balancer.
- LBAdvisor.java.servlet è il codice sorgente del servlet che deve essere ridenominato in LBAdvisor.java, compilato ed eseguito sulla macchina di WebSphere Application Server.
L'advisor completo è leggermente più complesso rispetto all'esempio. Aggiunge
una routine di analisi specializzata più compatta rispetto a quella
dell'esempio StringTokenizer riportato in
Esempio: Utilizzo dei dati restituiti dagli advisor.
La parte più complessa del codice di esempio si trova nel servlet Java. Tra gli altri metodi, il servlet contiene due metodi richiesti dalla specifica servlet,
init() e service(), e un metodo, run(), richiesto dalla classe Java.lang.thread.
- Il metodo init() è chiamato un'unica volta dal motore servlet al momento dell'inizializzazione. Questo metodo crea un thread denominato _checker che viene eseguito indipendentemente dalle chiamate dall'advisor e viene interrotto per un periodo di tempo prima di riprendere il loop di elaborazione.
- Il metodo service() viene richiamato dal motore del servlet ogni volta che viene richiamato il servlet.
In questo caso, il metodo viene chiamato dall'advisor. Il metodo service() invia un flusso di caratteri ASCII ad un flusso di output.
- Il metodo run() contiene la parte principale di esecuzione del codice. Viene chiamato dal metodo start() che è a sua volta chiamato all'interno del metodo init().
Di seguito sono riportati i frammenti rilevanti del codice 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;
}
...