我想部署一个Grails应用程序到Tomcat 8.0.15。如果有问题,操作系统是CentOS 7,Java版本是1.7.0_71,memcached版本是1.4.20。Memcached和Tomcat 8不兼容
我使用Grails Standalone Tomcat plugin来使用memcached作为会话管理器,它在Tomcat 7中运行良好。不幸的是,迁移到Tomcat 8并不像预期那么简单。
我发现这个公司的依赖关系中:de.javakaffee.msm:memcached-session-manager-tc7:1.6.4
,所以我试图将其更改为tc8
(存在于Maven)和更新各种其他插件的版本。
不幸的是,我碰到一个问题就来了,同时部署在Tomcat 8应用:
04-Feb-2015 16:26:08.371 INFO [http-nio-8080-exec-17] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /opt/tomcat/webapps/ROOT.war
2015-02-04 16:26:18 ERROR [GrailsContextLoaderListener] Error initializing the application: loader constraint violation: when resolving overridden method "de.javakaffee.web.msm.MemcachedBackupSessionManager.changeSessionId(Lorg/apache/catalina/Session;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, de/javakaffee/web/msm/MemcachedBackupSessionManager, and its superclass loader (instance of java/net/URLClassLoader), have different Class objects for the type ger.changeSessionId(Lorg/apache/catalina/Session;)V used in the signature
java.lang.LinkageError: loader constraint violation: when resolving overridden method "de.javakaffee.web.msm.MemcachedBackupSessionManager.changeSessionId(Lorg/apache/catalina/Session;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, de/javakaffee/web/msm/MemcachedBackupSessionManager, and its superclass loader (instance of java/net/URLClassLoader), have different Class objects for the type ger.changeSessionId(Lorg/apache/catalina/Session;)V used in the signature
at java.lang.Class.privateGetDeclaredMethods(Class.java:2615)
at java.lang.Class.getDeclaredMethods(Class.java:1860)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
总之,有一个叫changeSessionId
方法,它是由类de.javakaffee.web.msm.MemcachedBackupSessionManager
覆盖,但是它有一些不同于什么类加载器期待。
我在Google上找不到任何帮助,并尝试更改很多版本和依赖项,结果无济于事,所以我决定回滚到Tomcat 7.但是我想在此留下此情况,以免有人找到解决方案。
是的,我知道。我在问题中说过,我尝试将插件的依赖项更改为Tomcat8的jar,但它没有工作:( – mathifonseca