2012-05-31 4 views
1

Nous avons une application qui doit effectuer une initialisation à la fin d'un déploiement (dans une instance de JBoss 7.1.0), car c'est seulement à ce moment-là que tous les services requis seront disponibles. sont pas mal d'entre eux).Effectuer des opérations à la fin d'un déploiement JBoss 7

Une approche que nous avons essayé était la suivante:

Nous avons un service singleton avec une annotation @Startup mais nous avons jusqu'à présent pas réussi à dire JBoss pour créer l'instance dernière sans trop de tracas.

Nous pourrions utiliser @DependsOn mais nous devrons maintenir une liste de dépendances toujours croissante et déjà importante et nous préférerions faire cela en dernier recours.

Autrefois (JBoss 4 et 5), il était possible de définir une dépendance à l'application (comme @Depends("myapp.ear")), ce qui provoque exactement ce dont nous avons besoin.

A partir de JBoss, 7 choses ont changé mais je suppose qu'il y a encore un moyen de le faire. Une autre approche consistait à essayer de créer notre propre sous-système JBoss qui est appelé après le démarrage de tous les autres sous-systèmes, mais nous n'avons pas réussi à trouver un moyen d'attendre que les autres sous-systèmes terminent les opérations dont nous avons besoin.

Quelles autres options pourrions-nous examiner?

Répondre

1

Vous pouvez avoir une servlet, par ex. BootstrapServlet.java, défini avec le paramètre load-on-startup> 1/load-on-startup> dans votre fichier WEB-INF/web.xml et effectue l'initialisation dans ce servlet.

+0

Merci pour cet indice. Cependant, nous avons souvent plus d'un fichier WAR dans notre fichier EAR et nous devrons définir leur ordre de démarrage (ce qui devrait être possible). Dans certains cas, nous n'aurons même pas de fichier WAR et donc pas web.xml. – Thomas

+0

autre chose à considérer pourrait être, vérifier si le service (s) sont disponibles dans une boucle .. ou faire le temps d'initialisation basé, de sorte que la classe de démarrage ou servlet attend x minuts avant de commencer à initialiser .. souvent le déploiement est rapide être juste 1 minute .. un dernier pense pourrait être d'avoir les services s'inscrire eux-mêmes quand prêt (si c'est possible avec les services) ainsi vous pouvez vérifier dans une boucle quand tous les services sont prêts –

1

Vous pouvez mettre une classe annotée avec @Startup dans un fichier EAR différent, ou mieux WAR. Un WAR sera - je pense - déployé par défaut après tout EAR sans avoir à configurer quoi que ce soit.

Dans la classe de démarrage, vous pouvez simplement appeler l'initialisation réelle, qui est déployée avec le reste de votre application avec myapp.ear. L'appel est effectué via une interface locale ou distante EJB.

+0

Cela pourrait être une option mais normalement je Je ne veux pas avoir à créer une autre application juste pour initialiser le premier. Merci pour l'indice cependant. – Thomas

Questions connexes