Thank you, Andrew, for your fast reply.

I hope this works, but I still don't undestand what happens when the server is restarted when the sessionCount (current active sessions) is 10.

Will sessionWillPassivate() and sessionDidActivate() be called 10 times? Why not once? But if they were called once, my count variable would be 1 instead of 10 after a restart.

Could someone explain me in a few words what happens when the server is restarted?

Thanx,
  Christian


Bodycombe, Andrew wrote:


The easiest way is probably to have a single listener that implements both
the HttpSessionListener and HttpSessionActivationListener interfaces. This
has a single count of active sessions.

In the sessionCreated() method, increment the count
In the sessionDestroyed() method, decrement the count
In the sessionDidActivate() method, increment the count
In the sessionWillPassivate() method, decrement the count.

This should eliminate the need to store anything in the session.

Hope this helps
        Andy

-----Original Message-----
From: Christian Hauser [mailto:[EMAIL PROTECTED] Sent: 04 September 2003 10:01
To: Tomcat Users List
Subject: Re: Counting active sessions if server restarts very often



Shapira, Yoav wrote:



Howdy,



Is there an other way to implement this? Maybe by saving the variable
activeSessions to a session (which is restored when the server has
restarted)?


This is not a bad idea, and might be the easiest way.  A DB write on
shutdown/read on startup is also an option.


To recapitulate: I want to display all active sessions (~ active users). I use HttpSessionListener and increment a static int field every time sessionCreated is called. Unfortunately the server is restarted very often so I'd like to remember the active sessions by putting them into the session.

But how? Like this?

public class SessionCounter implements HttpSessionListener {

public synchronized void sessionCreated(HttpSessionEvent event) {
Integer i = (Integer)event.getSession().getAttribute("session.counter");
if (i == null) {
i = new Integer(0);
}
int activeSessions = i.intValue() + 1;
event.getSession().setAttribute("session.counter", activeSessions);
}


public synchronized void sessionDestroyed(HttpSessionEvent event) {
Integer i = (Integer)event.getSession().getAttribute("session.counter");
if (i == null) {
i = new Integer(0);
}
int activeSessions = i.intValue();
if (activeSessions > 0) {
activeSessions--;
}
event.getSession().setAttribute("session.counter", activeSessions);
}


   public static int getActiveSessions() {
     return activeSessions;
   }
}


Jon Wingfield gave me the hint to put an object that implements HttpSessionActivationListener as an attribute to the session.
But if I do that in the SessionListener#sessionCreated method I have 100 of those objects around when 100 concurrent users are using my web application. Does that make any sense?
And what should I do when the object implementing HttpSessionActivationListener enters sessionWillPassivate? How do I save the count of active sessions?


Sorry for all those questions, but I'd like to count the sessions even when the server restarts very often.

Thank you for your help,
   Christian



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to