Comment déterminer l’ordre des écouteurs dans web.xml

J’ai eu un tas d’auditeurs de contexte de servlet dans mon application Web Java, chacun rassemblant des informations sur l’environnement.

Certains d’entre eux dépendent d’informations qui sont recueillies par un autre auditeur. Mais je ne peux pas déterminer l’ordre dans lequel les auditeurs sont enregistrés et appelés, je dois donc dupliquer le code.

Je comprends que les auditeurs sont inscrits dans l’ordre de leur commande dans web.xml mais cela me semble un peu vague, trop vague pour pouvoir en tenir compte.

Avez-vous un indice sur la façon dont je peux résoudre mon problème?

Tous les conteneurs de servlets et les conteneurs Java EE implémentent ssortingctement cette partie de la spécification. Vous pouvez compter sur le fait que les écouteurs sont appelés dans l’ordre que vous avez spécifié dans web.xml.

Vous pouvez avoir une structure de données Application LEVEL (HashMap) qui sera mise à jour par chaque filtre / écouteur lorsqu’il rencontre les données des demandes. Cela permettra à chaque auditeur de ne mettre à jour que l’essentiel. Vous pouvez placer le code commun dans un écouteur de base afin d’éviter toute duplication de code.

Pourquoi est-ce vague? L’ordre dans web.xml est très précisément l’ordre dans lequel ils sont appelés, il est très clairement indiqué dans la spécification Java EE. Il est tout à fait correct de s’y fier.

Il semblerait que vous puissiez créer un ListenerManager que vous placez en tant que votre seul auditeur et que celui-ci contienne les autres auditeurs. Lorsque l’événement arrive, appelez simplement chacun des autres auditeurs dans l’ordre de votre choix (probablement l’ordre que vous avez créé dans le constructeur du ListenerManager).

Malheureusement, cela signifie un changement de code lorsque vous ajoutez des auditeurs, mais vous pouvez éviter cela en utilisant judicieusement les fichiers de propriétés et le code de création-à partir du nom de la classe.