kryo

369 views
Skip to first unread message

chang yuans

unread,
May 27, 2011, 9:37:14 PM5/27/11
to memcached-session-manager
I use MSM 1.4.1 version on tomcat environment, but it occur
exception :
Warning: Could not load session with id xxxxxxxxx from memcached.
com.esotericsoftware.kryo.SerializationException: Unable to
serialize object of
type: java.util.concurrent.ConcurrentHashMap at
........
Caused by com.esotericsoftware.kryo.SerializationException: Unable
to serialize object of
type: XX.XX.myLogout

So, I find the code from google :

package XX.XX.serializer;
import java.util.concurrent.ConcurrentHashMap;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.serialize.MapSerializer;
import de.javakaffee.web.msm.serializer.kryo.KryoCustomization;

public class CustomKryoRegistration implements KryoCustomization {
public void customize(Kryo kryo) {
kryo.register(ConcurrentHashMap.class, new
MapSerializer(kryo));
}
}

And add to the tomcat context :
<Context path="/mobilemail" docBase="D:\webapp\WebRoot"
reloadable="true">
<Manager
className=
"de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes=
"n1:192.168.112.1:11211,n2:192.168.112.2:11211"
....
customConverter="XX.XX.CustomKryoRegistration"
/>
</Context>

But the exception still occur , the myLogout class , it implements
HttpSessionBindingListener ,
is it is the reason ? Hoa can i resolve it ?

Thanks your help, first !

yuans



implements HttpSessionBindingListener

Martin Grotzke

unread,
May 28, 2011, 3:30:11 AM5/28/11
to memcached-se...@googlegroups.com, chang yuans
Hi Yuans,

On 05/28/2011 03:37 AM, chang yuans wrote:
> I use MSM 1.4.1 version on tomcat environment, but it occur
> exception :
> Warning: Could not load session with id xxxxxxxxx from memcached.
> com.esotericsoftware.kryo.SerializationException: Unable to
> serialize object of
> type: java.util.concurrent.ConcurrentHashMap at
> ........
> Caused by com.esotericsoftware.kryo.SerializationException: Unable
> to serialize object of
> type: XX.XX.myLogout

The ConcurrentHashMap is mentioned as it's the root of the object graph.
The leaf object causing the issue seems to be the XX.XX.MyLogout.

Can you post the whole stacktrace?
Can you post the source code of XX.XX.MyLogout?

Can you try serializing MyLogout in an isolated environment, like this?

Kryo kryo = new Kryo();
kryo.setRegistrationOptional( true );
final MyLogout obj = new MyLogout()
final byte[] serialized = new ObjectBuffer( kryo ).writeObject( obj );
final MyLogout deserialized = new ObjectBuffer( kryo
).readObject(serialized, MyLogout.class);
Assert.assertEquals( deserialized, obj );

Perhaps you need to register some serializers for MyLogout being
serialized successfully.

The ConcurrentHashMap serializer is not needed, kryo should choose the
MapSerializer automatically for ConcurrentHashMap.

Are you using sticky or non-sticky sessions btw?

Cheers,
Martin

--
Martin Grotzke
http://twitter.com/martin_grotzke

signature.asc

chang yuans

unread,
May 30, 2011, 7:49:28 AM5/30/11
to memcached-session-manager
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

Martin Grotzke

unread,
May 30, 2011, 8:43:42 AM5/30/11
to memcached-se...@googlegroups.com, chang yuans
Hi Yuans,

On 05/30/2011 01:49 PM, chang yuans wrote:
> Hi Martin:
> ----------------------------------------
> (1) the exception stack is :

You're actually posting two different exceptions here.

> 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)

This one happens as you cannot access session attributes from an
expiring session. Thus the "Session already invalidated" exception. If
you search the web you'll find a lot about this (it isn't related to msm
but it's a servlet spec "issue"). The valueUnbound implementation
actually looks weird in some places (e.g. that it tries to "invalidate"
the session again - which makes no sense for a session being invalidated
in that moment). You might want to read a bit about proper valueUnbound
implementation.


Now comes the one related to msm/kryo...


> 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)

[...]


> 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)

This serialization trace tells you that it tries to deserialize the
Logger in myLogout. And this is the issue: you should not serialize the
logger!


>
> -----------------------------------------------
> (2) myLogout.java source code :

[...]


> public class myLogout implements HttpSessionBindingListener{
> private Logger logger = Logger.getLogger(myLogout.class);

The logger should either be be static, so that it isn't serialized by
kryo. An alternative would be to mark it as transient, but this would
require more work during deserialization, so making it static is the
simplest thing to make it work.


Btw, if you subscribe to the mailing list your emails are accepted
directly. Right now I have to approve them manually each time.

signature.asc

Yuans

unread,
May 30, 2011, 9:00:23 PM5/30/11
to memcached-session-manager
Martin:

Your answer is correct ,I change the logger to static ,the
exception is disappear !
Thanks for your help very munch .
I will continue to test the MSM solution for us.

Yuans


On May 30, 8:43 pm, Martin Grotzke <martin.grot...@googlemail.com>
wrote:
> Hi Yuans,
>
> On 05/30/2011 01:49 PM, chang yuans wrote:> Hi Martin:
> > ----------------------------------------
> > (1) the exception stack is :
>
> You're actually posting two different exceptions here.
>
>
>
>
>
> > 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.ja­va:
> > 1077)
> >         at
> > de.javakaffee.web.msm.MemcachedBackupSession.getAttribute(MemcachedBackupSe­ssion.java:
> > 121)
> >         at
> > org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSess­ionFacade.java:
> > 110)
> >         at com.ever.login.myLogout.valueUnbound(myLogout.java:100)
> >         at
> > org.apache.catalina.session.StandardSession.removeAttributeInternal(Standar­dSession.java:
> > 1686)
> >         at
> > de.javakaffee.web.msm.MemcachedBackupSession.removeAttributeInternal(Memcac­hedBackupSession.java:
> > com.esotericsoftware.kryo.serialize.FieldSerializer.readObjectData(FieldSer­ializer.java:
> > 238)
>
> This serialization trace tells you that it tries to deserialize the
> Logger in myLogout. And this is the issue: you should not serialize the
> logger!
>
>
>
>
>
> > -----------------------------------------------
> > (2) myLogout.java source code :
> [...]
> > public class myLogout implements HttpSessionBindingListener{
> >     private Logger logger = Logger.getLogger(myLogout.class);
>
> The logger should either be be static, so that it isn't serialized by
> kryo. An alternative would be to mark it as transient, but this would
> require more work during deserialization, so making it static is the
> simplest thing to make it work.
>
> Btw, if you subscribe to the mailing list your emails are accepted
> directly. Right now I have to approve them manually each time.
>
> Cheers,
> Martin
>
> --
> Martin Grotzkehttp://twitter.com/martin_grotzke
>
>  signature.asc
> < 1KViewDownload- Hide quoted text -
>
> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -

Martin Grotzke

unread,
May 31, 2011, 12:54:41 AM5/31/11
to memcached-se...@googlegroups.com

Great!

Cheers,
Martin

Reply all
Reply to author
Forward
0 new messages