Hi Martin:
----------------------------------------
(1) the exception stack is :
ERROR [19:20:29] (myLogout.java:valueUnbound:102) - getAttribute:
Session already invalidated
java.lang.IllegalStateException: getAttribute: Session already
invalidated
at
org.apache.catalina.session.StandardSession.getAttribute(StandardSession.java:
1077)
at
de.javakaffee.web.msm.MemcachedBackupSession.getAttribute(MemcachedBackupSession.java:
121)
at
org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:
110)
at com.ever.login.myLogout.valueUnbound(myLogout.java:100)
at
org.apache.catalina.session.StandardSession.removeAttributeInternal(StandardSession.java:
1686)
at
de.javakaffee.web.msm.MemcachedBackupSession.removeAttributeInternal(MemcachedBackupSession.java:
462)
at
org.apache.catalina.session.StandardSession.expire(StandardSession.java:
801)
at
org.apache.catalina.session.StandardSession.expire(StandardSession.java:
644)
at
org.apache.catalina.session.StandardSession.invalidate(StandardSession.java:
1158)
at
org.apache.catalina.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:
150)
at
com.ever.login.struts.action.LogoutAction.execute(LogoutAction.java:
110)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:
421)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
226)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1164)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at com.ever.util.EncodingFilter.doFilter(EncodingFilter.java:
71)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at com.ever.util.SecurityFilter.doFilter(SecurityFilter.java:
312)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
191)
at
de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:
147)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
554)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
298)
at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:
705)
at org.apache.jk.common.ChannelSocket
$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:662)
May 30, 2011 7:20:29 PM
de.javakaffee.web.msm.MemcachedBackupSessionManager loadFromMemcached
WARNING: Could not load session with id
755829F65AAD0C348ED0A147D3690D5F-n2.worker1 from memcached.
com.esotericsoftware.kryo.SerializationException: Unable to
deserialize object of type: java.util.concurrent.ConcurrentHashMap
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:593)
at
com.esotericsoftware.kryo.ObjectBuffer.readObject(ObjectBuffer.java:
213)
at
de.javakaffee.web.msm.serializer.kryo.KryoTranscoder.deserializeAttributes(KryoTranscoder.java:
257)
at
de.javakaffee.web.msm.TranscoderService.deserializeAttributes(TranscoderService.java:
157)
at
de.javakaffee.web.msm.TranscoderService.deserialize(TranscoderService.java:
114)
at
de.javakaffee.web.msm.MemcachedBackupSessionManager.loadFromMemcached(MemcachedBackupSessionManager.java:
954)
at
de.javakaffee.web.msm.MemcachedBackupSessionManager.findSession(MemcachedBackupSessionManager.java:
519)
at
org.apache.catalina.connector.Request.doGetSession(Request.java:2382)
at
org.apache.catalina.connector.Request.getSessionInternal(Request.java:
2306)
at
org.apache.catalina.connector.Response.isEncodeable(Response.java:
1499)
at
org.apache.catalina.connector.Response.encodeRedirectURL(Response.java:
1183)
at
org.apache.catalina.connector.ResponseFacade.encodeRedirectURL(ResponseFacade.java:
377)
at
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:
385)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
231)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:
1164)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at com.ever.util.EncodingFilter.doFilter(EncodingFilter.java:
71)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at com.ever.util.SecurityFilter.doFilter(SecurityFilter.java:
312)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
191)
at
de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:
147)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
554)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
298)
at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:
705)
at org.apache.jk.common.ChannelSocket
$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.esotericsoftware.kryo.SerializationException: Unable to
deserialize object of type: com.ever.login.myLogout
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:
571)
at
com.esotericsoftware.kryo.serialize.MapSerializer.readObjectData(MapSerializer.java:
129)
at
com.esotericsoftware.kryo.Serializer.readObject(Serializer.java:61)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:589)
... 40 more
Caused by: com.esotericsoftware.kryo.SerializationException:
Serialization trace:
ht (org.apache.log4j.Hierarchy)
repository (org.apache.log4j.spi.RootCategory)
parent (org.apache.log4j.Logger)
logger (com.ever.login.myLogout)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
238)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:
566)
... 43 more
Caused by: java.lang.NullPointerException
at java.util.Vector.ensureCapacityHelper(Vector.java:218)
at java.util.Vector.add(Vector.java:728)
at
com.esotericsoftware.kryo.serialize.CollectionSerializer.readObjectData(CollectionSerializer.java:
113)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:
566)
at
com.esotericsoftware.kryo.serialize.MapSerializer.readObjectData(MapSerializer.java:
129)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
... 51 more
May 30, 2011 7:20:29 PM
de.javakaffee.web.msm.MemcachedBackupSessionManager loadFromMemcached
WARNING: Could not load session with id
755829F65AAD0C348ED0A147D3690D5F-n2.worker1 from memcached.
com.esotericsoftware.kryo.SerializationException: Unable to
deserialize object of type: java.util.concurrent.ConcurrentHashMap
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:593)
at
com.esotericsoftware.kryo.ObjectBuffer.readObject(ObjectBuffer.java:
213)
at
de.javakaffee.web.msm.serializer.kryo.KryoTranscoder.deserializeAttributes(KryoTranscoder.java:
257)
at
de.javakaffee.web.msm.TranscoderService.deserializeAttributes(TranscoderService.java:
157)
at
de.javakaffee.web.msm.TranscoderService.deserialize(TranscoderService.java:
114)
at
de.javakaffee.web.msm.MemcachedBackupSessionManager.loadFromMemcached(MemcachedBackupSessionManager.java:
954)
at
de.javakaffee.web.msm.MemcachedBackupSessionManager.findSession(MemcachedBackupSessionManager.java:
519)
at
org.apache.catalina.connector.Request.doGetSession(Request.java:2382)
at
org.apache.catalina.connector.Request.getSession(Request.java:2120)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
132)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
554)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
298)
at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:
705)
at org.apache.jk.common.ChannelSocket
$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.esotericsoftware.kryo.SerializationException: Unable to
deserialize object of type: com.ever.login.myLogout
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:
571)
at
com.esotericsoftware.kryo.serialize.MapSerializer.readObjectData(MapSerializer.java:
129)
at
com.esotericsoftware.kryo.Serializer.readObject(Serializer.java:61)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:589)
... 20 more
Caused by: com.esotericsoftware.kryo.SerializationException:
Serialization trace:
ht (org.apache.log4j.Hierarchy)
repository (org.apache.log4j.spi.RootCategory)
parent (org.apache.log4j.Logger)
logger (com.ever.login.myLogout)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
238)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
at
com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.readObjectData(ReferenceFieldSerializer.java:
81)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:
566)
... 23 more
Caused by: java.lang.NullPointerException
at java.util.Vector.ensureCapacityHelper(Vector.java:218)
at java.util.Vector.add(Vector.java:728)
at
com.esotericsoftware.kryo.serialize.CollectionSerializer.readObjectData(CollectionSerializer.java:
113)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:
566)
at
com.esotericsoftware.kryo.serialize.MapSerializer.readObjectData(MapSerializer.java:
129)
at
com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSerializer.java:
220)
... 31 more
-----------------------------------------------
(2) myLogout.java source code :
package com.ever.login;
import java.net.*;
import java.util.*;
import javax.servlet.http.*;
import com.ever.exception.*;
import com.ever.log.*;
import org.apache.log4j.*;
public class myLogout implements HttpSessionBindingListener{
private Logger logger = Logger.getLogger(myLogout.class);
private long user_no;
private int db_no;
private String email;
private String pop3host = "";
private String session_id = "";
public myLogout(long user_no, int db_no, String email, String
pop3host, String sid) {
this.user_no = user_no;
this.db_no = db_no;
this.email = email;
this.pop3host = pop3host;
this.session_id = sid;
}
public void setDB_NO(int db_no) {
this.db_no = db_no;
}
public void valueBound(HttpSessionBindingEvent event) {
}
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession sess = event.getSession();
String sid = sess.getId();
if (logger.isDebugEnabled()) {
logger.debug("user_no:[" + user_no + "] myLogout session
id : " + sid);
logger.debug("user_no:[" + user_no + "] myLogout user_no :
" + user_no);
logger.debug("user_no:[" + user_no + "] myLogout db_no : "
+ db_no);
logger.debug("user_no:[" + user_no + "] myLogout email : "
+ email);
logger.debug("user_no:[" + user_no + "] myLogout
pop3host : " + pop3host);
}
// before logout, log how many emails are already in user's
folders
try {
FolderSnapshot.logFolderSnapshot(db_no, user_no,
"myLogout",
session_id);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
/* setup webmail log */
String hostname = null;
String hostaddr = null;
try {
hostname = InetAddress.getLocalHost().getHostName();
hostaddr = InetAddress.getLocalHost().getHostAddress();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
int operation_log_level = WebmailLog.NOTICE;
WebmailLog wmlog = new WebmailLog(WebmailLog.TYPE_AP,
WebmailLog.SERVICE_WEBMAIL,
operation_log_level,
hostname,
hostaddr,
Long.toString(user_no),
email,
sid);
wmlog.setOperation("myLogout.java");
wmlog.setTime((new Long((new java.util.Date()).getTime() /
1000)).intValue(), 0, 0, 0);
/* handle timeout */
try {
Timeout.logout(user_no);
} catch (WebmailException we) {
logger.error(we.getMessage(), we);
wmlog.setResult("Failure");
wmlog.setMsg1("error happened in Timeout.logout(), error
code : " + we.getErrorCode() + " , " +
we.getSourceException().toString());
int ret = wmlog.sendLog();
wmlog.finalize();
} catch (Exception e) {
logger.error(e.getMessage(), e);
if (logger.isDebugEnabled()) {
logger.debug("user_no:[" + user_no + "] ---- myLogout,
Timeout.logout() : " + e.toString());
}
wmlog.setResult("Failure");
wmlog.setMsg1("error happened in Timeout.logout(), error
code : 01603 , " + e.toString());
int ret = wmlog.sendLog();
wmlog.finalize();
}
Properties p = null;
try {
p = (Properties) sess.getAttribute("user_env.user");
} catch (Exception e) {
logger.error(e.getMessage(), e);
//System.out.println("user_no:["+user_no+"] ---- get the
exception when getting properties in session");
}
if (p != null) {
if (logger.isDebugEnabled()) {
logger.debug("user_no:[" + user_no + "] ----
myLogout : session live");
}
sess.invalidate();
} else {
if(logger.isDebugEnabled()){logger.debug("user_no:
["+user_no+"] ---- myLogout : session gone");}
}
wmlog.setResult("Success");
int ret = wmlog.sendLog();
wmlog.finalize();
}
}
---------------------------------------------
(3) Can serializing MyLogout in an isolated environment, like this?
I try ,it cannot success.
---------------------------------------------
(4) using sticky or non-sticky sessions btw?
I use sticky .
Yuans