IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Listener de session et fermeture de fenêtre


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Listener de session et fermeture de fenêtre
    Salut,

    J'ai un peu de mal à comprendre comment marchent les listeners...
    J'utilise HttpSessionListener, j'ai mis un point d'arret sur la première instruction de ma fonction "public void sessionDestroyed(HttpSessionEvent evt)"
    (j'ai mis les lignes correspondantes au listener dans web.xml)

    Voici ce que j'ai : longtemps apres avoir fermé ma fenêtre (surement au timeout de ma session), l'application s'arrete enfin sur mon point d'arret. La plupart du temps ma variable dbCon est nulle, parfois non (???).
    Voici ce que je veux : si un utilisateur ferme sa fenetre, mon listener m'avertit immédiatement, de telle manière que je puisse demander à ma connexion base de données de faire l'opération commit (à cause d'instructions SQL qui bloquent certains enregistrements, et qu'il faut débloquer).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class SessionListener implements HttpSessionListener
    {   
      // new session 
      public void sessionCreated(HttpSessionEvent evt) {}   
     
      // if session is closed
      public void sessionDestroyed(HttpSessionEvent evt)
      {    
        HttpSession session = evt.getSession();
        DBConnect dbCon = (DBConnect)session.getAttribute("dbCon");
        if (dbCon != null)
          dbCon.manualLockRelease(); // envoie un commit
      }
    j'ai essayé d'utiliser aussi les classes HttpSessionBindingListener et HttpSessionAttributeListener, mais l'application ne semble appeler aucune des fonctions quand je ferme mon navigateur.

    Est ce que quelqu'un aurait l'amabilité de m'éclairer svp. Merci ^^

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    C'est assez logique, car la fermeture de ton navigateur n'entraine
    aucun évenement coté serveur.

    De plus, attendre la fermeture du navigateur pour faire un commit me semble être une bien mauvaise idée.
    Un transaction n'est pas censée durer longtemps.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut
    J'ai trouvé!
    ma réponse se trouve dans l'evenement javascript onunload
    pas possible en jsp... domage

    EDIT : ce onunload empeche la redirection à la fermeture de fenêtre, mais permet d'ouvrir une nouvelle fenetre... qui est généralement bouffée par l'anti popup. Il faut donc utiliser un peu d'AJAX sur ce coup, qui nous permettra de balancer un petit script(fermeture de connexion bd en jsp en ce qui me concerne) juste avant que le fenetre se ferme

    Citation Envoyé par fr1man
    De plus, attendre la fermeture du navigateur pour faire un commit me semble être une bien mauvaise idée.
    Un transaction n'est pas censée durer longtemps.
    forcer le commit à la fermeture de la fenetre me permet de faire sauter les verrous SQL mis en place par les requetes du type SELECT... FOR UPDATE NOWAIT (qui malheureusement sont inscrits sur la durée), sans attendre que le timeout de ma session tue la connexion

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut Listener de session et fermeture de fenêtre
    Salut,
    J'ai le même problèmé sur les listener. J'utilise également HttpSessionListener
    Je veux que si un utlisateur ferme sa fenêtre, mon Listener m'avertisse de façon que je puisse faire l'opération de commit en base quand je ferme ma fenêtre. mais j'y arrive pas. Je fais aussi du jsp comme toi juli3nh. Peut tu stp m'éclairer d'avantage avec plus de détails sur la solution que tu as trouver pour ton probleme.

    code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public void sessionCreated(HttpSessionEvent event) {
            HttpSession vlSession = event.getSession();
            vlSession.setMaxInactiveInterval(60);// timeout
     
     
        }
     
     
        public void sessionDestroyed(HttpSessionEvent event) {
            HttpSession vlSession = event.getSession();
            User vlUser = (User) vlSession.getAttribute("steJava.appli.User");
            if (vlUser != null && vlUser.isConnected()) {
                System.out.println("SessionListener : sessionDestroyed : vlUser.getId() : "+vlUser.getId());
                System.out.println("SessionListener : sessionDestroyed : vlUser.getSociety().getId() : "+vlUser.getSociety().getId());
     //maj du fichier cote serveur de donnee stelink sur le logout du user		
    try{
    ITuxConnection vlTuxConn = new ITuxConnection(vlSession);
    RequestBuffer vlReqB;		
    vlTuxConn.calAlarm(CodeOp.OP_ALR_SECURITY_LOG,ITuxConnection.NOTINTRANSAC, vlUser.getId(), vlReqB);// Operation de commit
    ConnectedUserList.getInstance().decrementNbConnectedUser(vlUser.getSociety().getId(),vlUser.getId());
     
    			} catch (GuiException vaGuiException) {
    	        	 vaGuiException.printStackTrace();
     
    .........
    Votre aide me serait d'un grand soulagement
    merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détruire une session à la fermeture d'une fenètre.
    Par dell77 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 07/12/2006, 17h12
  2. [WD9] Evénement de fermeture de fenêtre
    Par EpOnYmE187 dans le forum WinDev
    Réponses: 3
    Dernier message: 14/12/2005, 10h50
  3. ouverture et fermeture de fenêtre
    Par froggies dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 11h36
  4. opération sur fermeture de fenêtre
    Par java_math dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/06/2004, 22h52
  5. [JSP] session et fermeture de session
    Par monoeilouais dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/04/2004, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo