【问题标题】:NoClassDefFoundError every second restart of TomcatTomcat 每秒重启一次 NoClassDefFoundError
【发布时间】:2018-03-01 06:17:05
【问题描述】:

目前我们面临一个奇怪的问题。我们有一个大型应用程序,它在 webapp 目录中部署为 ROOT.war(没有其他应用程序)。 Tomcat (8.0.32) 在启动时解压战争。它作为 Windows 服务启动。

当我们停止服务并重新启动它时,就会发生 NoClassDefFoundError(我们自己的类之一,每次都相同)。在新的停止/启动后,它确实有效。停止/启动-> 不起作用。停止/启动 -> 是否有效等等...

我们在 Eclipse 上开发,在开发过程中不会遇到这个问题。

我不知道如何解决这个问题。我在上下文中尝试了 reloadable=false 并在主机上尝试了 autoDeploy=false unpackWars = true 。

我们正在使用 Spring/Hibernate。

消息:无法使用构造函数“public my.package.MyPage(org.apache.wicket.request.mapper.parameter.PageParameters)”和参数“p=[MyOtherPage], userName=[abc1]”来实例化页面。施工过程中出现异常! 根本原因: java.lang.NoClassDefFoundError: my.package.MyPanel 在 my.package.MyPage.(MyPage.java:114) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) 在 org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) 在 org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) 在 org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) 在 org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) 在 org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279) 在 org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 在 org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) 在 org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 在 org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) 在 org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) 在 org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 在 my.package.web.filter.MDCPersistenceFilter.doFilter(MDCPersistenceFilter.java:47) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 my.package.web.filter.TenantContextPersistenceFilter.doFilter(TenantContextPersistenceFilter.java:59) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:144) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500) 在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 完整的堆栈: org.apache.wicket.WicketRuntimeException:无法使用构造函数“public my.package.MyPage(org.apache.wicket.request.mapper.parameter.PageParameters)”和参数“p=[MyOtherPage],userName=[ abc1]'。施工过程中出现异常! 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:194) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) 在 org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) 在 org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) 在 org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) 在 org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) 在 org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279) 在 org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 在 org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) 在 org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 在 org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171) 在 org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) 在 org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) 在 org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) 在 org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) 在 org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) 在 org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279) 在 org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) 在 org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) 在 org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 在 org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) 在 org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) 在 org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) 在 org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)

注意:我重命名了我们公司的包...

在 MyPage 的第 114 行,我们正在创建一个 MyPanel 类型的新面板。

【问题讨论】:

  • 你能显示tomcat给出的信息吗?
  • 更新开始帖。
  • 不同项目中的混合 Wicket 版本? JAR 捆绑在 WAR 或 Tomcat/lib 中?
  • Jars 在 webapps/ROOT/WEB-INF/lib 中,只有 1 个 Wicket 版本 (6.18)
  • @Stefan 这个错误是由于 ava.lang.NoClassDefFoundError: my.package.MyPanel .does not find in classpath 。也许你应该编译和构建战争。清除 tomcat 中的历史记录并部署删除工作、临时文件夹

标签: java tomcat classloader


【解决方案1】:

遇到完全相同的问题,我们的自定义类中有一个静态的最终字符串

private static String USERNAME = SecurityContextHolder.getContext().getAuthentication().getName();

删除final 修复它。

【讨论】:

    【解决方案2】:

    也许您可以尝试将 spring-security-core-3.1.0.RELEASE.jar 放入 tomcat 的 lib 目录

    【讨论】:

    • 看起来这个问题几乎在一年前就得到了回答。请务必查看整个线程。
    【解决方案3】:

    问题是我的 MyPanel.java 中的一个静态 { .. } 块 那里没有发生任何奇怪的事情,但它导致了这个问题。感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 2017-06-20
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 2011-09-18
      • 2023-03-14
      相关资源
      最近更新 更多