java Quel est le problème avec mon écouteur dans mon fichier web.xml?




jboss portlet (2)

Nous utilisons JBoss 4.22 avec des portlets. Lorsque le point d'écoute n'est pas dans le fichier web.xml, le portlet est chargé, mais l'écouteur sessionDestroyed () n'est jamais appelé (évidemment). Lors de l'ajout, le portlet n'est pas chargé et aucune exception ou message de journal ne s'affiche. Y a-t-il des pièges dont je devrais être au courant?

   <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
             version="2.4">


           <!-- Listeners used by application -->
        <listener>
            <listener-class>listenerpackage.MyClassThatImplementsHttpSessionListener</listener-class>
        </listener>
    ...Other tags...
    </web-app>

En réponse aux commentaires, j'ai cherché dans le code pour trouver des points chauds. Le constructeur de mon écouteur a quelques problèmes possibles. Normalement (pas en tant qu'auditeur), une instance serait créée par le constructeur du portlet pertinent (celui qui n'est pas chargé lorsque l'écouteur est ajouté au web.xml). Puis-je toujours m'attendre à ce que ce soit le cas ou le conteneur crée-t-il lui-même une instance?


Le problème est que les écouteurs déclarés dans le document de déploiement sont instanciés lorsque ce document est chargé. Ma classe a été conçue pour être instanciée par le portlet si l'information nécessaire n'était pas disponible.

Une solution consiste à utiliser un écouteur HttpSession Binding Listener et à ajouter la classe en tant qu'attribut à la session. Ensuite, unbound () est appelé lorsque la session est invalide. :)


Votre noeud d'écouteur est-il dans le bon ordre dans votre fichier web.xml? Peut-être que c'est ignoré en raison de ne pas suivre la DTD? Par exemple, les servlets, les mappages servlet, les config session sont tous supposés être devant l'écouteur.





portlet