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:
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 ^^
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:
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