Thanks for the input. Any idea how I can *catch* errors during serialization? I am guessing I will have to create my own PersistanceManager and override some functions..
Has anyone done this (or any other method of doing this)? On 8/17/05, Christoph Kutzinski <[EMAIL PROTECTED]> wrote: > I didn't say that distributables don't have to implement > java.io.Serializable. In fact they have to. > I just had the impression (from your first post) that you thought by > putting an non-serializable Attribute into a HashMap, the attribute > would become serializable, too. > > Example: > If you want to put a java.net.Socket into the session the session won't > be distributable because Socket isn't Serializable. > But if you put the Socket object into a java.util.HashMap (which > implements Serializable) and put the map into the session, the session > still wouldn't be distributable. This is because to serialize the > session the HashMap and ALL its fields must be serialized. Because the > Socket object is now part of the map, this won't work. > > Serializable is just a "marker" interface, i.e. the class just > "declares" that is it serializable. > You should read the Java Tutorial (somewhere in the JDK docs). > There is explained what Serialization really means. > > Christoph > > Lintang JP wrote: > > I'm referring to this document on : > > http://www.onjava.com/pub/a/onjava/2004/04/14/clustering.html?page=2 > > The words "Serializable" here would mean for session replication, right ? > > CMIIW. > > On 8/17/05, Christoph Kutzinski <[EMAIL PROTECTED]> wrote: > > > >>Hi Nishant, > >> > >>where did you read that <distributable> will *enforce* serializability? > >>AFAIK <distributable> "only" means that your sessions can be distributed > >>to different tomcat nodes (i.e. a cluster). It doesn't enforce anything, > >>you have to make sure that your session attributes are serializable by > >>yourself. > >> > >>I've done this for my testing environment with a SessionListener: > >> > >>public class SessionListener implements HttpSessionListener, > >>HttpSessionAttributeListener { > >> > >>private ObjectOutputStream stream = new ObjectOutputStream(new > >>OutputStream() { > >>public void write(int b) {} > >>}); > >> > >>public void attributeAdded(HttpSessionBindingEvent evt) { > >> > >>if (LOCAL_DEBUG) { > >>// try to serialize attribute > >>Object o = evt.getValue(); > >>synchronized (stream) { > >>try { > >>stream.writeObject(o); > >>} catch (IOException e) { > >>System.err.println(evt.getName() + " is not serializable: " + > >>e.getMessage()); > >>e.printStackTrace(); > >>} > >>} > >>} > >>} > >> > >>... > >>} > >> > >>I disable LOCAL_DEBUG in the production environment, because trying to > >>serialize every attribute is probably to expensive under heavy load. > >> > >> > >>@Lintang: > >> > >>That wouldn't help any. If you put your attributes (which are not > >>serializable) into a HashMap (which CAN (!) be serializable) the > >>resulting object (map + attribute) still wouldn't be serializable. > >>Serializable is more than just implementing the java.io.Serializable > >>interface. > >> > >> > >>greetings, > >> > >>Christoph > >> > >> > >> > >> > >>Lintang JP wrote: > >> > >>>hi Nishant, > >>>You might want to put all your session variable inside HashMap or other > >>>datatypes that implements Serializable, rather than put it just in a > >> > >>single > >> > >>>variable. Refer to the javadocs, what are those Serializable data types > >> > >>are. > >> > >>>Or maybe you can build your own class with something like this : > >>>public class StoredSessionValue implements Serializable { > >>>// your session variable goes here > >>>// your setter and getter method for those variables goes here > >>>} > >>> > >>>You did right on your <distributable/> tags. > >>>On 8/17/05, Nishant Deshpande <[EMAIL PROTECTED]> wrote: > >>> > >>> > >>>>Hoping for some help from the tomcat experts on this list. > >>>> > >>>>I want to ensure all objects stored in sessions are serializable. > >>>> > >>>>I read that I can put the <distributable/> tag in my web.xml file to > >>>>'enforce' this. > >>>> > >>>>But I don't see any enforcing happening. I assumed it would throw > >>>>exceptions at runtime when I did 'setAttribute("xxx", > >>>>SomeNonSerializableObject)'. > >>>> > >>>>I have put 'distributable' in > >>>> > >>>>web.xml: <web-app> ... <distributable/> ... </web-app> > >>>> > >>>>I also have the following in server.xml: > >>>> > >>>><DefaultContext reloadable="true" allowLinking="true"> > >>>> > >>>><Loader className="org.apache.catalina.loader.DevLoader" > >>>>reloadable="true" debug="1"/> > >>>><Manager className="org.apache.catalina.session.PersistentManager" > >>>>pathname="/cv/data/tmp" debug="5" saveOnRestart="true" > >>>>distributable="true"> > >>>><Store className="org.apache.catalina.session.FileStore" > >>>>directory="/cv/data/tmp" > >>>>debug="5"/> > >>>></Manager> > >>>> > >>>></DefaultContext> > >>>> > >>>> > >>>>Am I missing something? How is the serializability enforced? > >>>> > >>>>Also another question: the serialization does not happen in the > >>>>directory i specify for Store above, rather it happens in the > >>>>$CATALINA_HOME/work/Catalina/* directories. Any ideas about this one? > >>>> > >>>>Thanks, > >>>> > >>>>Nishant > >>>> > >>>>--------------------------------------------------------------------- > >>>>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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]