Thanks. I'll love to see this.
I'm rewriting the session serialize code as a plug-in module (that was your
offer), so I need sterilization support for ServerSession.
Please take care of that as fast as you can.
--Shai
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Friday, December 29, 2000 06:17
To: [EMAIL PROTECTED]
Subject: RE: Session Serialize code
I'll check in the fix tommorow - the HttpSessionBindingEvent and
session reloading should go into the facade22 module.
I was thinking about this - does it make sense to keep the session code in
the core ? It seems to me that maintaining an object store is orthogonal
to the http functionality - all that's needed in core is management of the
session IDs ( create, encode in cookies/urls, etc ) - while the actual
store shouldn't be part of the core.
I'll try to find a way to decouple that even more than it is today,
probably that would help anyone who is working on advanced session
management as it'll make it independent of tomcat ( or server container ).
Costin
> I can't see ServerSession.writeObject (and readObject) there.
> You must have code which is ServerSession aware, since SeverSession member
> ssm (point to its manager) is not serializeable.
>
> Here is jon's original code (3.2.1): This must be fixed to be 3.3
> compatible. I can do that (it's really easy), but I don't know how to
handle
> the HttpSessionBindingEvent (in writeObject) below (It seems that
> ServerSession can't cast to HttpSession).
>
> Please let me know if you think this is un-needed.
>
> /**
> * Read a serialized version of this session object from the specified
> * object input stream.
> * <p>
> * <b>IMPLEMENTATION NOTE</b>: The reference to the owning Manager
> * is not restored by this method, and must be set explicitly.
> *
> * @param stream The input stream to read from
> *
> * @exception ClassNotFoundException if an unknown class is specified
> * @exception IOException if an input/output error occurs
> */
> private void readObject(ObjectInputStream stream)
> throws ClassNotFoundException, IOException {
>
> // Deserialize the scalar instance variables (except
> Manager)
> creationTime = ((Long) stream.readObject()).longValue();
> id = (String) stream.readObject();
> lastAccessedTime = ((Long) stream.readObject()).longValue();
> thisAccessedTime = ((Long)
stream.readObject()).longValue();
> maxInactiveInterval = ((Integer)
> stream.readObject()).intValue();
> isNew = ((Boolean) stream.readObject()).booleanValue();
> isValid = ((Boolean) stream.readObject()).booleanValue();
>
> attributes = (Hashtable) stream.readObject();
> }
>
>
> /**
> * Write a serialized version of this session object to the specified
> * object output stream.
> * <p>
> * <b>IMPLEMENTATION NOTE</b>: The owning Manager will not be stored
> * in the serialized representation of this Session. After calling
> * <code>readObject()</code>, you must set the associated Manager
> * explicitly.
> * <p>
> * <b>IMPLEMENTATION NOTE</b>: Any attribute that is not Serializable
> * will be silently ignored. If you do not want any such attributes,
> * be sure the <code>distributable</code> property of our associated
> * Manager is set to <code>true</code>.
> * <p>
> * <b>IMPLEMENTATION NOTE</b>: If we can't serialize the object stored
> in
> * the session, then check to see if it implements
> * HttpSessionBindingListener and then call its
> * valueUnbound method, allowing it to save its state
> * correctly instead of just being lost into the etherworld
> *
> * @param stream The output stream to write to
> *
> * @exception IOException if an input/output error occurs
> */
> private void writeObject(ObjectOutputStream stream) throws IOException
{
>
> // Write the scalar instance variables (except Manager)
> stream.writeObject(new Long(creationTime));
> stream.writeObject(id);
> stream.writeObject(new Long(lastAccessedTime));
> stream.writeObject(new Long(thisAccessedTime));
> stream.writeObject(new Integer(maxInactiveInterval));
> stream.writeObject(new Boolean(isNew));
> stream.writeObject(new Boolean(isValid));
>
> if (attributes.size() > 0) {
> // Accumulate the names of serializable attributes
> Hashtable results = new
> Hashtable(attributes.size());
>
> for (Enumeration e = attributes.keys();
> e.hasMoreElements() ; ) {
> String key = (String) e.nextElement();
> Object value = attributes.get(key);
> if (value instanceof Serializable) {
> results.put(key, value);
> }
> // if we can't serialize the object stored
> in
> // the session, then check to see if it
> implements
> // HttpSessionBindingListener and then call
> its
> // valueUnbound method, allowing it to save
> its state
> // correctly instead of just being lost into
> the etherworld
> else if (value instanceof
> HttpSessionBindingListener ) {
> try {
>
> ((HttpSessionBindingListener)value)
> .valueUnbound(new
> HttpSessionBindingEvent(this, key));
> } catch (Exception f) {
> // ignored
> }
> }
> }
> stream.writeObject(results);
> } else {
> stream.writeObject(new Hashtable());
> }
> }
> }
>
>
>
> --Shai
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Friday, December 29, 2000 03:24
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]
> Subject: Re: Session Serialize code
>
> Hi Shai,
>
> Mea culpa :-)
>
> I moved Jon's code to org.apache.tomcat.util.ObjectSerializer
> ( I removed all dependencies to Session or tomcat internals - it should
> work for any serializable object ).
>
> ( my intentions were to make it more reusable and to reuse it in reloading
> context attributes, etc - there are other objects that might get lost in
> a server reload ).
>
> Let me know if you can use it in this form, and I can certainly add it
> back.
>
> Costin
>
>
>
> > Hi Costin,
> >
> > As discussed a week ago, someone took out Jon's code to serialize
session
> > from 3.3.
> > That code was part of 3.2 but does not exist in 3.3. Could you please
add
> it
> > back into ServerSession??
> >
> > As proposed by you I'm working on "SerializableSession" module, and I
need
> > that piece of code to serialize sessions.
> >
> > (Functions: writeObject, readObject)
> > Thx.
> >
> > ________________________
> > Shai Fultheim
> > Chief Technology Officer
> > BRM Group
> >
> > E-Mail: [EMAIL PROTECTED]
> > Mobile: 972-53-866-459
> > Office: 972-2-5891-459
> >
> .
> hx.
> >
> > ________________________
> > Shai Fultheim
> > Chief Technology Officer
> > BRM Group
> >
> > E-Mail: [EMAIL PROTECTED]
> > Mobile: 972-53-866-459
> > Office: 972-2-5891-459
> >
> .
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]