2010-06-08 4 views
0

J'ai une page d'administration dans une application Web qui réinitialise le cache, mais elle ne réinitialise que le cache de la machine virtuelle Java en cours.Comment déclencher le code sur deux serveurs différents dans un cluster WAS?

L'application Web est déployée en tant que cluster sur deux serveurs WAS.

N'importe quelle façon que je peux avoir élégamment le bouton "effacer le cache" sur chaque serveur déclenche la méthode sur les deux JVM?

Modifier: Le développeur d'origine vient d'écrire un singleton contenant un HashMap comme cache. Léger et (précédemment) travaillé très bien pour les exigences. Il met en cache le contenu extrait de six ou sept services Web pour des durées spécifiées.

Édition: L'ensemble de l'application en question est de trois pages, donc la solution élégante pourrait bien être la solution la plus légère.

+0

Pouvez-vous décrire le cache que vous utilisez plus en détail? Est-ce le cache WAS intégré? est-ce que c'est ehcache? Que cachez-vous? –

+0

@Romain Hippeau: mise à jour. –

Répondre

1

Étant donné que le cache est interne à votre application, vous devrez fournir une interface pour l'effacer dans votre application. Quotidien dit d'utiliser une file d'attente JMS. Cela ne fonctionnera pas car une seule instance récupérera le message en supposant que vous avez mis en cluster les files d'attente MQ.

Si vous souhaitez réutiliser la même implémentation, la seule façon d'y parvenir est d'écrire du JMX avec lequel vous pourrez interagir au niveau de l'instance. Sinon, vous pouvez utiliser le cache WAS intégré (qui est compatible avec JMX) ou utiliser un cache distribué comme ehcache. Dans le passé, j'ai créé un LinkedHashMap sous-classé qui était lié à toutes les instances du réseau en utilisant JBOSS JGroups. Bien sûr, réinventer la roue est toujours douloureux.

1

J'ai tendance à utiliser une file d'attente JMS pour faire exactement cela.

Questions connexes