J'ai besoin d'exécuter une logique commerciale une seule fois dans un cluster Geronimo/Tomcat lors du déploiement d'un WAR (ou EAR) et avant que les applications ne commencent à servir les utilisateurs.
La façon dont j'ai fait cela jusqu'à présent a été ad-hoc et n'est pas tolérante aux pannes. J'utilise un fichier de configuration sur le nœud 1 et le désigne comme "nœud de démarrage". Lorsque l'application démarre dans le cluster, chaque nœud écrit son adresse IP dans une base de données puis attend en mode veille dans un Servlet.init qui a été configuré pour se charger au démarrage dans web.xml. Lorsque le nœud de démarrage voit que tous les nœuds attendus ont écrit leur adresse IP dans la base de données, il exécute la logique commerciale. Lorsque la logique commerciale de démarrage est terminée, elle envoie un signal de confirmation aux autres nœuds en écrivant une ligne de confirmation dans la base de données.
Tous les nœuds autres que le nœud de démarrage interrogent périodiquement (deux fois par seconde) la base de données pour vérifier ce signal de confirmation, et lorsqu'ils le voient, ils terminent leur démarrage et reviennent de Servlet.init. À ce stade, tous les nœuds servent l'application normalement aux utilisateurs.
Ma logique de démarrage n'a pas encore échoué, mais je me demandais s'il existait une norme Java EE ou une approche de bibliothèque tierce robuste pour exécuter ma logique de démarrage une seule fois dans l'ensemble de mon cluster. Merci!
Modifier 2013/07/21: J'ai rappelé que WebLogic Server disposait de fonctionnalités de démarrage sophistiquées qui pourraient être utiles pour atteindre la logique "init une seule fois dans le cluster" que je veux faire dans mon cluster Geronimo/Tomcat. J'ai fait quelques recherches et oui, WebLogic peut faire exactement ce que je veux! Voici un excellent article sur le sujet : http://developsimpler.blogspot.com/2012/03/weblogic-clusters-and-singleton-service.html
Malheureusement, je ne peux pas me permettre WebLogic. Alors, y a-t-il quelque chose de similaire dans Geronimo ou Tomcat (ou d'autres serveurs Java EE open source?) Ou existe-t-il des bibliothèques tierces que je pourrais utiliser pour atteindre le même objectif?