Any further word on this?  

I created a listener that implements both HttpSessionAttributeListener and 
ServletContextAttributeListener (code below).  It exposed a few other classes 
we were putting into the session.  

However, I continue to get the log4j NonSerializable exceptions without any 
indication from the listener that something has been added that contains 
org.apache.log4j.Level.

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextAttributeEvent;
import java.io.ObjectOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class FindNonSerializableSessionAttributesListener implements 
HttpSessionAttributeListener, ServletContextAttributeListener {
    private static final Log logger = 
LogFactory.getLog(FindNonSerializableSessionAttributesListener.class);

    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) 
{
        checkSerailizable(httpSessionBindingEvent.getName(), 
httpSessionBindingEvent.getValue());
    }

    public void attributeRemoved(HttpSessionBindingEvent 
httpSessionBindingEvent) {}

    public void attributeReplaced(HttpSessionBindingEvent 
httpSessionBindingEvent) {
        checkSerailizable(httpSessionBindingEvent.getName(), 
httpSessionBindingEvent.getValue());
    }

    private void checkSerailizable(String name, Object value) {
        if (logger.isDebugEnabled()) {
            try {
                ObjectOutputStream out = new ObjectOutputStream(new 
ByteArrayOutputStream());
                out.writeObject(value);
                out.close();
                out.flush();
            } catch (IOException e) {
                logger.info("Error serialiazing when setting session attribute 
" + name + "::" + value, e);
            }
        }
    }

    public void attributeAdded(ServletContextAttributeEvent 
servletContextAttributeEvent) {
        checkSerailizable(servletContextAttributeEvent.getName(), 
servletContextAttributeEvent.getValue());
    }

    public void attributeRemoved(ServletContextAttributeEvent 
servletContextAttributeEvent) {
        //To change body of implemented methods use File | Settings | File 
Templates.
    }

    public void attributeReplaced(ServletContextAttributeEvent 
servletContextAttributeEvent) {
        checkSerailizable(servletContextAttributeEvent.getName(), 
servletContextAttributeEvent.getValue());
    }
}




View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4027961#4027961

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4027961
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to