-
[SESSION]
Est ce que qq1 pourrait me dépatouiller d'un léger soucis.
Je suis en jdk 1.2.2 et serveur d'appli WebSphere 3.5.6
Je cherche à compter le nombre d'utilisateurs connectés, pour cela je comptais m'appuyer sur le nombre de session active... mais je ne sais pas comment faire pour les comptabiliser...
qq1 aurait il une idée ?
Merci
-
l'eternel probleme ...
Ca vaut ce que ca vaut:
Tu ajoute un HttpSessionListener a ton web.xml
pour sessionCreated(), tu incremente un compteur dans le context d'application.
pour sessionDestroyed, tu decrementes le compteur.
Bon courage
-
Ce que tu me proposes serait trop simple ;) ce n'est valable qu'à partir du jdk 1.3 ou plus précisément du servlet 2.3
une autre id ? ca serait génial !
Merci
-
Dans ce cas faut le faire a la mano , creer une classe wrapper de HttpSession.
A chaque création d'une instance du wrapper tu incrementes un compteur ds la factory du wrapper, puis tu retournes une HttpSession. idem pour la destruction.
@+
-
Aurais tu un bout de code en exemple ?
arci
-
non rien sous la main.
En gros au lieu de creer un httpSession tu cree un myHttpSession qui retourne un httpSession et qui incremente un compteur.
Dans ton prog tu utilises myHttpSession.
@+
-
un solution encore plus simple serait de sous classer HttpSession ( c pas final non ?) et d'y rajouter un champ static et synchronisé count, plus un mutateur et un accesseur.
@+
-
pas final mais c'est une interface...
Je crois que l'encapsulation c'est la seule methode. Tu vas devoir creer une classe qui creera une Session au lieu de request.
MyHttpSession sess = MonUtil.getSession(request);
Et etre tres methodique...
Autre solution, peut etre plus simple, l'ancienne version de j2ee avait dans HttpSessionContext les methodes necessaires pour recuperer toutes les sessions. C'est deprecated dans 1.3
Ca vaut le coup d'essayer, mais tu ecris du code deprecated.. :(
-
Merci pour les infos
bon en gros ce que je suis entrain d'essayer de faire c d'implémenter le code de la 1.3 ( HttpSessionListener et le HttpSessionEvent) en spécifique dans mon appli... :twisted: en utilisant le listener... tout ce passe bien, mais à priori le listener ne chope pas le fait qu'une session s'est créée ou même détruire...
Comment fonctionne un listener ? Il attend un évênement, et à partir de cet evênement il agit ? Y a-t-il moyen de l'obliger à se déclencher ?
Pour ce qui est de la recup du context, c tellement deprecated que ca fonctionne carrement pas - j'y avait pensé malgré tout ! :lol:
Merci pour les infos en tout cas !!
-
si tu veux reimplementer le listener toi-meme, il te faudra reimplementer une bonne partie du moteur servlet.
Ca te coutera beaucoup moins cher d'updater a une version plus recente.
-
Oui c kler ! :lol: :lol: , je me suis souvenu de se léger détails... J'ai trouvé une soluce plus au moins approximative mais qui fonctionne tout de même, je la post dès que j'ai 10min !
Merci pour votre aide en tout cas !
-
alors le moyen détourné que j'ai trouvé, et de créer un objet lors de la création de la session (SessionCounter.java), dans cette classe, j'y met une variable statique. Lors de la construction de cet objet, j'incremente cette variable, et lors de sa destruction (utilisation de la methode finalize) je décrémente ce dit compteur.
Le seul "hic" à cette méthode, est le déclenchement du GC pour vider les objets qui ne sont plus utilisés (d'où l'utilisation de la méthode finalize).
Je fais donc appel au System.gc() dans la page de login de l'appli et à priori ca fonctionne plutot pas mal.
Voilou
aller rulezzzzz