INFO | No Spring WebApplicationInitializer types detected on classpath
INFO | starts initialization... (configured nodes definition n1:192.168.0.43:12587, failover nodes null)
ERROR | The session manager failed to start
org.apache.catalina.LifecycleException: Failed to start component [de.javakaffee.web.msm.MemcachedBackupSessionManager[/tomahawk]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5268)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: de.javakaffee.web.msm.SuffixLocatorBinaryConnectionFactory.getAuthWaitTime()J
at de.javakaffee.web.msm.SuffixLocatorBinaryConnectionFactory.createMemcachedNode(SuffixLocatorBinaryConnectionFactory.java:116)
at net.spy.memcached.MemcachedConnection.createConnections(MemcachedConnection.java:141)
at net.spy.memcached.MemcachedConnection.
at net.spy.memcached.DefaultConnectionFactory.createConnection(DefaultConnectionFactory.java:176)
at net.spy.memcached.MemcachedClient.
at de.javakaffee.web.msm.MemcachedClientFactory.createMemcachedClient(MemcachedClientFactory.java:53)
at de.javakaffee.web.msm.MemcachedSessionService.createMemcachedClient(MemcachedSessionService.java:505)
at de.javakaffee.web.msm.MemcachedSessionService.startInternal(MemcachedSessionService.java:426)
at de.javakaffee.web.msm.MemcachedBackupSessionManager.startInternal(MemcachedBackupSessionManager.java:518)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
... 8 more
^[[?1;2cERROR | Context [/tomahawk] startup failed due to previous errors
INFO | Starting ProtocolHandler ["ajp-nio-8009"]
INFO | Starting ProtocolHandler ["http-nio2-8080"]
INFO | Starting ProtocolHandler ["http-nio2-8443"]
********************************************************
【问题】
同名方法(createMemcachedNode)存在于两个类中:
1> de.javakaffee.web.msm.SuffixLocatorBinaryConnectionFactory.createMemcachedNode
2> net.spy.memcached.BinaryConnectionFactory.createMemcachedNode
如果调用到BinaryConnectionFactory中的此方法,则没有问题,如果调用到SuffixLocatorBinaryConnectionFactory的方法就会出现【NoSuchMethodError】
net.spy.memcached.MemcachedConnection.createConnections调用
/////////begin/////
private final ConnectionFactory connectionFactory;
MemcachedNode qa = this.connectionFactory.createMemcachedNode(sa, ch, this.bufSize);
/////////end///////
而connectionFactory有多个实现类,如上面的(1)和(2),应该使用(2)就不会有问题。
可以考虑通过jvm参数-D,指定其实现类。
【解决】
经比对,发现jar版本不一致,memcached-session-manager-1.8.2.jar需要用到spymemcached-2.11.1.jar而不是spymemcached-2.8.1.jar。