Riz, > I noticed that when I restart the tomcat server the "Active Sessions" > count for one of the applications remains the same as it was before > the server was shut down. Does this make sense?
When you shut down Tomcat, I believe the default is to write session
information out to a saved-sessions file. When you start Tomcat back up,
it reads this file so that any active sessions can be maintained across
the restart.
It is intended to be a nice feature so you don't forcibly log people out
of your application in the event of a restart.
You are probably not experiencing this same phenomenon in your /other/
application for one of three reasons:
1. You don't use sessions.
2. Your sessions contain objects that are non-serializable.
3. Objects in your session are serializable, but you lack
the correct methods in those classes to read the object
from storage.
Tomcat uses basic Java serialization to write the sessions to the
session-save file. If you have a non-serializable objects, they cannot
be serialized.
When reading the objects back into memory, it's still possible that a
session object's class is inappropriate for de-serialization. For
example, I have a "User" class that fails this all the time:
java.io.InvalidClassException: mypackage.User; no valid constructor
It I have a look at my class, I see this definition:
public class User
extends AbstractIdentifiable
implements Serializable
My class implements Serializable, and extends from:
public abstract class AbstractIdentifiable
implements Identifiable
My "Identifiable" interface does not extend anything, and
AbstractIdentifiable does not implement Serializable. Since I don't have
any special serialization code in User, my User class is not
serializable, either, since its parent class is not serializable.
I get exceptions when I start my application, and the sessions die
because they couldn't be read from the session store.
Session persistence seems to be enabled by default, which is odd. I
removed the declaration for <Manager className="...PersistentManager">
from my <Context> definition, and the sessions were still persisted. I
was able to turn it off completely using this configuration:
<Manager className="org.apache.catalina.session.PersistentManager"
debug="99"
saveOnRestart="false"
maxActiveSessions="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
I should note that I'm using Tomcat 4.1.31, so if you are using a
different version, things might be slightly different.
> I should add that we are using mod_jk to forward requests from apache
> web server to tomcat.
mod_jk is irrelevant, here.
Hope that helps.
-chris
signature.asc
Description: OpenPGP digital signature
