Les exemples ci-après montrent comment les conseillers personnalisés peuvent être implémentés.
Un exemple de conseiller personnalisé de WebSphere Application Server est
inclus dans le répertoire
racine_install/servers/samples/CustomAdvisors/. Le code intégral n'est pas dupliqué dans ce document. Vérifiez que les fichiers suivants sont implémentés :
- ADV_was.java correspond au fichier du code source du conseiller, qui est compilé et exécuté sur la machine Load Balancer.
- LBAdvisor.java.servlet correspond au code source du servlet, qui doit être renommé en LBAdvisor.java, compilé et exécuté sur la machine WebSphere Application Server.
Le conseiller complet est légèrement plus complexe que l'exemple. Il ajoute une routine
d'analyse syntaxique spéciale qui est plus compacte que l'exemple StringTokenizer
de la rubrique Exemple : Utilisation de données renvoyées par les conseillers.
La partie la plus complexe de l'exemple de code se trouve dans le servlet Java. Parmi les autres méthodes, le servlet contient deux méthodes requises par la
spécification de servlet : init() et service() et une méthode, run(), requise par la classe Java.lang.thread.
- La méthode init() est appelée une fois par le moteur de servlet lors de l'initialisation. Cette méthode crée l'unité d'exécution _checker, qui est exécutée indépendamment des
appels du conseiller et reste inactive pendant un certain temps avant de reprendre sa
boucle de traitement.
- La méthode service() est appelée par le moteur de servlet chaque fois que le servlet est appelé.
Dans ce cas, le conseiller appelle la méthode. La méthode service() envoie un flux de caractères ASCII à un flux de sortie.
- run() contient la partie principale de l'exécution du code. La méthode est appelée par la méthode start() appelée elle-même par la méthode init().
Les fragments correspondants du code du servlet sont les suivants :
...
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;
}
...