Os seguintes exemplos mostram como orientadores customizados podem ser implementados.
Um orientador customizado de amostra para o WebSphere Application Server é incluído no
diretório
install_root/servers/samples/CustomAdvisors/. O código completo não é duplicado nesse documento. Certifique-se de que o
seguinte seja implementado:
- ADV_was.java é o arquivo de código de origem do orientador que é compilado e
executado na máquina do Load Balancer.
- LBAdvisor.java.servlet é o código de origem do servlet que deve ser renomeado para
LBAdvisor.java, compilado e executado na máquina do WebSphere Application Server.
O orientador completo é um pouco mais complexo que o orientador de amostra. Ele inclui
uma rotina de análise especializada que é mais compacta que o exemplo StringTokenizer
mostrado no tópico Exemplo: Usando Dados Retornados de Orientadores.
A parte mais complexa do código de amostra está no servlet Java. Dentre outros
métodos, o servlet contém dois métodos necessários pela especificação de servlet:
init() e service(), e um método run(), que é necessário pela classe Java.lang.thread.
- init() é chamado uma vez pelo mecanismo de servlet no tempo de inicialização. Esse método
cria um encadeamento named _checker que é executado independentemente das chamadas do
orientador e é suspendido por um período de tempo antes de continuar seu processamento
de loop.
- service() é chamado uma vez pelo mecanismo de servlet sempre que o servlet for chamado.
Nesse caso, o método é chamado pelo orientador. O método service() envia um fluxo de
caracteres ASCII para um fluxo de saída.
- run() contém o núcleo de execução de código. Ele é chamado pelo método start()
que é chamado dentro do método init().
Os fragmentos relevantes do código de servlet aparecem abaixo:
...
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;
}
...