session - Memcached 和 Tomcat 8 session 管理器问题

标签 session tomcat memcached tomcat8 session-management

我们在使用 Tomcat 7 的 Web 应用程序中使用 Memcached 进行 session 管理,它的工作非常有魅力。为了让它工作,我将以下 jar 添加到 Tomcat 的 lib 文件夹中

  • spymemcached-2.8.12.jar
  • couchbase-client-1.1.4.jar
  • memcached-session-manager-tc7-1.6.5.jar
  • memcached-session-manager-1.6.5.jar

并对 Tomcat 的 server.xml 进行了以下更改

<Context path="customersupport" docBase="customerSupportOrderCentral#v2" sessionCookieName="CUSTOMERSUPPORT-JSESSIONID">
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:oc-cs-elasticcache.w8eptf.cfg.usw1.cache.amazonaws.com:11211"
sticky="false" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" />
</Context>

现在我们正在将我们的 JDK 升级到 1.8 并将 Tomcat 版本升级到 8。我一直在网上研究它,结果是因为 tomcat 8 不支持 getSessionCookieName,我必须为 tomcat 8 更新 memcache jar 文件.所以我在 tomcat 的 lib 文件夹中添加了一组新的 jar 文件,如下所示。

  • spymemcached-2.11.1.jar
  • memcached-session-manager-tc8-1.8.1.jar
  • memcached-session-manager-1.8.1.jar
  • couchbase-client-1.4.0.jar

保持 server.xml 不变,但现在 Tomcat 在启动时抛出以下错误。

06-Jan-2016 07:03:48.934 SEVERE [main] org.apache.tomcat.util.digester.Digester.startElement Begin event threw error
 java.lang.NoClassDefFoundError: org/apache/catalina/Lifecycle
    at java.lang.ClassLoader.findBootstrapClass(Native Method)
    at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1012)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:413)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:116)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1178)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:766)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1344)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1451)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:551)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:599)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:310)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:484)

如果我不更改 server.xml 以包含 memcache 管理器,它工作正常但使用 memcache session 管理器时会抛出上述错误。我真的可以在这里使用一些帮助来解决这个问题。

谢谢

最佳答案

我遇到了同样的问题,卡住了 2 天。我这边的问题是我在 tomcat/lib 和另一个项目特定的类路径 - tomcat/{project}/conf 中有以下 memcache 特定的 jar。当我从 tomcat/{project}/conf 中删除这些 jar 时问题得到解决

spymemcached-2.11.1.jar memcached-session-manager-tc8-1.8.1.jar memcached-session-manager-1.8.1.jar

关于session - Memcached 和 Tomcat 8 session 管理器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636317/

相关文章:

asp.net-mvc - 使所有 Controller 无 session 的全局开关

session - Netty https ( TLS ) session 持续时间 : why is renegotiation needed?

python - Webapp2 session 在请求之间丢失

linux - 如何为 JIRA 和 Confluence 创建多个 URL?

tomcat - @PostConstruct 未在 Glassfish 中调用

c# - Entity Framework 5.x 6.x 缓存框架

cookies - 什么应该存储在 session 中,什么应该存储在 cookie 中?

java - Apache Tomcat 错误 http 状态 404

ruby-on-rails - 如何使用 memcache 加速 rails/heroku

java - 关于此异常可能来自何处的任何想法?