2010-12-06 33 views
5

Existe-t-il un moyen de trouver tous les nœuds appartenant au cluster de l'application Web? Je sais sur JBoss je peux utiliser HAServiceMBeanSupport pour obtenir des informations sur tous les nœuds (nom d'hôte, adresse IP), mais comment puis-je réaliser quelque chose de similaire sur Tomcat, WebSpere, Glassfish, Oracle AS, Jetty, WebLogic? (Le meilleur serait une interface qui fonctionne pour chacun d'eux)Comment rechercher/répertorier par programme tous les nœuds dans un cluster d'applications J2EE?

Répondre

0

Pour autant que je sache, cela dépend des capacités de votre serveur d'applications.

Il n'y a pas de "voie standard" pour cela.

Vous pouvez essayer ce qui suit:

La classe ServletContextListener a deux méthodes. Vous pouvez calculer le nom d'hôte et l'adresse IP (s) dans la méthode create et supprimer le noeud dans la méthode destroy.

De cette façon, il y a des problèmes lors d'un crash de machine virtuelle, la méthode destroy ne sera pas appelée, par exemple.

EDIT: Votre logiciel a-t-il besoin d'une base de données? Si c'est le cas, tous les clusternodes doivent utiliser la même instance de base de données. Si votre application est déployée sans cluster, elle utilise une base de données "privée". Vous avez besoin d'un DB commun:

Tableau: Noeuds


ACCUEIL | IP


as1.cluster | < ip>

as2.cluster | < ip2>

Si une seule ligne est insérée dans cette base de données, il n'y a pas de cluster.

Mais cette table est peut-être endommagée si un nœud se bloque et ne supprime pas son entrée de cette table.

+0

hmm, mais comment l'application peut-elle détecter qu'elle se trouve dans un cluster? En supposant que vous avez déployé l'application sur deux machines qui ne s'exécutent PAS dans un cluster. Quoi qu'il en soit, j'ai des problèmes pour trouver une solution spécifique à un serveur d'applications ... –

+0

S'ils s'exécutent dans un cluster, ils doivent partager la même base de données (si une base de données est utilisée). S'ils s'exécutent dans un cluster différent ou en tant que serveur d'applications unique, ils doivent utiliser des bases de données différentes. Si vous pouvez utiliser EJB 3.1 (?), Il y a un Singleton-Bean Clusterwide. –

+0

Le problème est l'application peut être déployée dans un cluster, mais n'a pas à le faire. Actuellement, je ne sais pas que lorsque l'archive d'applications est construite, c'est pourquoi j'essaie de détecter si elle est en cluster ou non lorsque l'application s'exécute. Si ce n'est pas possible alors nous devons faire une config/setup différente pour l'application en cluster (en fait nous ne le voulons pas, car cela nécessite plus de config de notre client). –