You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Richard Mixon (qwest)" <rn...@qwest.net> on 2005/02/14 02:12:48 UTC
RE: SOLVED - commons-logging logger instances - how to initialize in replicated session objects
In case anyone else ends up with similar problems trying to get session
replication to work for objects that have a commons logging (or other
similar) non-serializable instance variable), here's how I solved it.
I created the following abstract class with the two methods "readObject"
and "readObjectNoData" (not sure this one is really needed). All of my
classes that might bet saved in a session and be replicated drive
directly/indirectly from this class. I was hoping for something a bit
more elegant, but it works for now.
Thanks Trond for the idea.
Any comments or criticisms are welcome.
Thanks - Richard
package com.acme.common.util;
import java.io.Serializable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**Loggable Object Class.
* <p>Abstract class to derive business and utility
* objects from that require logging support and that
* may be serialized (e.g. for Session replication, etc.).
*/
public abstract class LoggableObject implements Serializable {
private static final long serialVersionUID = 1L;
public transient Log log = LogFactory.getLog(getClass().getName());
private void readObject(java.io.ObjectInputStream stream) throws
java.io.IOException, ClassNotFoundException {
stream.defaultReadObject(); // Let default behaviour occur (i.e.
handle non-static, non-transient fields)
if (log == null) { // Initialize log instance if it is null
log = LogFactory.getLog(getClass().getName());
}
}
private void readObjectNoData() throws java.io.ObjectStreamException
{
if (log == null) { // Initialize log instance if it is null
log = LogFactory.getLog(getClass().getName());
}
}
}
-----Original Message-----
From: Richard Mixon (qwest) [mailto:rnmixon@qwest.net]
Sent: Saturday, February 12, 2005 6:43 AM
To: Tomcat Users List
Subject: RE: commons-logging logger instances - how to initialize in
replicated session objects
Thanks Trond, I had forgotten about readObject.That may be a better
option than creating yet another utility method.
Trond G. Ziarkowski wrote:
> Hi,
>
> I'm maybe stepping out of my territory here, but I think that static
> members are not serialized/deserialized. To re-initialize your static
> logger maybe you should try to implement the
> readObject(java.io.ObjectInputStream in) method from the
> java.io.Serializable interface something like this:
>
> readObject(...) {
> super.readObject(...);
> log = LogFactory.getLog(...);
> }
>
> Hope this is of some help
>
> Trond
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org