Stefan
Stefan

Reputation: 832

NoClassDefFoundError every second restart of Tomcat

Currently we are facing a strange issue. We have a big application which is deployed as ROOT.war in the webapp directory (no other applications). Tomcat (8.0.32) unpacks the war while starting. It starts as a Windows service.

When we stop the service and start it again then the NoClassDefFoundError occurs (one of our own classes, every time the same). After a new stop/start it does work. Stop/Start -> Doesn't work. Stop/Start -> Does work and so on...

We develop on Eclipse and we don't face this issue during development.

I don't have a clue how to fix this. I tried the reloadable=false on the context and tried autoDeploy=false unpackWars = true on the Host.

We are using Spring/Hibernate.


    Message: Can't instantiate page using constructor 'public my.package.MyPage(org.apache.wicket.request.mapper.parameter.PageParameters)' and argument 'p=[MyOtherPage], userName=[abc1]'. An exception has been thrown during construction!

    Root cause:

    java.lang.NoClassDefFoundError: my.package.MyPanel
         at my.package.MyPage.(MyPage.java:114)
         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
         at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
         at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171)
         at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99)
         at org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137)
         at org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268)
         at org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166)
         at org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
         at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279)
         at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
         at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862)
         at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
         at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
         at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
         at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
         at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)
         at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201)
         at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
         at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)
         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
         at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
         at my.package.web.filter.MDCPersistenceFilter.doFilter(MDCPersistenceFilter.java:47)
         at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
         at my.package.web.filter.TenantContextPersistenceFilter.doFilter(TenantContextPersistenceFilter.java:59)
         at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
         at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
         at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
         at org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:144)
         at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
         at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
         at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
         at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
         at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
         at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256)
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
         at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
         at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
         at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
         at java.lang.Thread.run(Thread.java:745)


    Complete stack:

    org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor 'public my.package.MyPage(org.apache.wicket.request.mapper.parameter.PageParameters)' and argument 'p=[MyOtherPage], userName=[abc1]'. An exception has been thrown during construction!
         at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:194)
         at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99)
         at org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137)
         at org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268)
         at org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166)
         at org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
         at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279)
         at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
         at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862)
         at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
         at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
         at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
         at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
         at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)

    java.lang.reflect.InvocationTargetException
         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
         at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
         at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:171)
         at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99)
         at org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137)
         at org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268)
         at org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166)
         at org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78)
         at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:279)
         at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)
         at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862)
         at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
         at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261)
         at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218)
         at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289)
         at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259)

Note: I renamed our company packages...

On line 114 of MyPage we are creating a new panel of type MyPanel.

Upvotes: 1

Views: 455

Answers (3)

Marius
Marius

Reputation: 1

Had the exact same issue, we had a static final String in our custom class

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

Removing the final fixed it.

Upvotes: 0

ben
ben

Reputation: 1

maybe you can try put spring-security-core-3.1.0.RELEASE.jar to the tomcat's lib dir

Upvotes: 0

Stefan
Stefan

Reputation: 832

Problem was a static { .. } block in my MyPanel.java Nothing strange happened there but it was causing this issue. Thanks for helping!

Upvotes: 1

Related Questions