Will,
I am perfectly aware of everything you said. I have been working
with Tomcat for last few years. I should have clarified that before.
I can do lot of these things using clusters and in-memory session
replications. I was looking for some plug-in modules for Tomcat (and not
external solutions like JBoss cache and Tangosol) to quickly implement
cache sharing between web applications in a single Tomcat instance. I have
one of my own based on persistent storage but that is not really
efficient.
Thanks anyway.
Regards.
Will Hartung [EMAIL PROTECTED]
05/13/2005 02:27 PM
Please respond to
Tomcat Users List tomcat-user@jakarta.apache.org
To
Tomcat Users List tomcat-user@jakarta.apache.org
cc
Subject
Re: In-memory session replication without Clustering
From: Atanu Neogi [EMAIL PROTECTED]
Sent: Friday, May 13, 2005 10:38 AM
Hi,
a.What is the best way to share a HttpSession between web
applications running on a single Tomcat instance ? That Tomcat instance
is
not a cluster node and clustering has not been enabled.
b. What is the best way to share other java Object information
(without
using common persistence storage ) in memory between web applications?
Are
the add-on cache modules like JBoss cache etc. only solution?
The problem is that the webapps have their own distinct classloader
hierarchies, so that's one thing that makes sharing objects across webapps
difficult. Recall that an objects Class is based not just on the actual
Class it uses, but the Classloader for the class as well. Thus if you have
the an object of ClassX that's loaded by the classloader for WebappA, and
another object of ClassX loaded by WebappB, and in WebappA you try:
ClassX myObject = (ClassX)getObjectFromWebappB();
That will fail with a class cast exception, because WebappA.ClassX !=
WebappB.ClassX.
Using a clustering style caching solution helps remedy this by
serializing
the objects, which breaks a lot of those dependencies, but is obviously
expensive.
One thing you can do, however, is move any classes that you want to share
across webapps out into the common/lib or common/classes directories.
Those
classes are all shared across webapps, so they can safely be used back and
forth between them, since they share the Common classloader.
As for sharing HttpSessions, I don't think you can do that directly, as
each
webapp will have their own unique session. You'll need to have some other
means to identify the user outside of the sessionid (like, say, their
login
name if they authenticate, or an arbitrary domain level cookie that you
create on the fly if it doesn't exist yet).
Then you use that credential to access shared information stored in a
Cache
that's loaded from the Common classloader.
Regards,
Will Hartung
([EMAIL PROTECTED])
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]