I’m upgrading my installation to a clustered solution that uses Elasticache
(memcached) to store session information.

I use embedded Jetty, Memcached initialization is like this:

Optional.ofNullable(System.getProperty("memcached.server")).ifPresent(memcachedServer
-> {
    final MemcachedSessionDataMapFactory dataMapFactory = new
MemcachedSessionDataMapFactory();
    final CachingSessionDataStoreFactory dataStoreFactory = new
CachingSessionDataStoreFactory();
    dataStoreFactory.setSessionDataMapFactory(dataMapFactory);
    dataStoreFactory.setSessionStoreFactory(new NullSessionDataStoreFactory());

    final String[] hostAndPort = StringUtils.split(memcachedServer, ':');
    assert hostAndPort.length == 2;
    dataMapFactory.setAddresses(new InetSocketAddress(hostAndPort[0],
Integer.parseInt(hostAndPort[1])));
    dataMapFactory.setExpirySec(3600 * 24);

    try {
        SessionHandler sessionHandler = mainAppContext.getSessionHandler();
        SessionCache sessionCache = new
DefaultSessionCacheFactory().getSessionCache(sessionHandler);
        //new CachingSessionDataStore(new
MemcachedSessionDataMap("localhost", "11211"), new
NullSessionDataStore());
        
sessionCache.setSessionDataStore(dataStoreFactory.getSessionDataStore(sessionHandler));
        sessionHandler.setSessionCache(sessionCache);
    } catch (Exception e) {
        System.err.println("WARNING error initializing memcached: " +
e.getMessage());
    }
});


I have the following exception in logs:

[2017-05-30 06:06:33,816] [WARN] [session]
java.lang.IllegalArgumentException: Non-serializable object
at
net.rubyeye.xmemcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:96)
at
net.rubyeye.xmemcached.transcoders.SerializingTranscoder.encode(SerializingTranscoder.java:208)
at
net.rubyeye.xmemcached.command.text.TextStoreCommand.encodeValue(TextStoreCommand.java:199)
at
net.rubyeye.xmemcached.command.text.TextStoreCommand.encode(TextStoreCommand.java:155)
at
net.rubyeye.xmemcached.impl.MemcachedTCPSession.wrapMessage(MemcachedTCPSession.java:178)
at
com.google.code.yanf4j.core.impl.AbstractSession.write(AbstractSession.java:382)
at
net.rubyeye.xmemcached.impl.MemcachedConnector.send(MemcachedConnector.java:516)
at
net.rubyeye.xmemcached.XMemcachedClient.sendCommand(XMemcachedClient.java:315)
at
net.rubyeye.xmemcached.XMemcachedClient.sendStoreCommand(XMemcachedClient.java:2496)
at net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1338)
at net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1396)
at net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1383)
at
org.eclipse.jetty.memcached.session.MemcachedSessionDataMap.store(MemcachedSessionDataMap.java:154)
at
org.eclipse.jetty.server.session.CachingSessionDataStore.store(CachingSessionDataStore.java:163)
at
org.eclipse.jetty.server.session.AbstractSessionCache.put(AbstractSessionCache.java:520)
at
org.eclipse.jetty.server.session.SessionHandler.complete(SessionHandler.java:371)
at
org.eclipse.jetty.server.session.SessionHandler.complete(SessionHandler.java:388)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:564)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:278)
at
org.eclipse.jetty.io.ssl.SslConnection$3.succeeded(SslConnection.java:148)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
at
org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
at
org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.NotSerializableException:
org.apache.tapestry5.internal.services.LinkImpl
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at
java.util.concurrent.ConcurrentHashMap.writeObject(ConcurrentHashMap.java:1413)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at
org.eclipse.jetty.server.session.SessionData.writeObject(SessionData.java:347)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at
net.rubyeye.xmemcached.transcoders.BaseSerializingTranscoder.serialize(BaseSerializingTranscoder.java:91)
... 39 more

Any ideas which part of Tapestry is causing this? I can’t figure out where
exactly this is happening.

-- 
Ilya Obshadko

Reply via email to