ClassNotFoundException (often) in Tomcat Application

489 views
Skip to first unread message

freh...@gmail.com

unread,
Mar 6, 2014, 6:52:45 PM3/6/14
to haze...@googlegroups.com

I have one tomcat instance ONLY and am initializing a Hazelcast map in a ServletContextListener in the contextInitialized call.

I also store the created map on the ServletContext.

Finally, I store the ServletContext in a static variable in another class so I can easily access around my application.

-------------------------

However, when I run a SqlPredicate in the map (after retrieving it from the ServletContext) I get a ClassNotFoundException on the class that I am storing on the map.

The ClassNotFoundException happens about 1 out of 3 times. I don't understand how my class can be there, then not there, then there again?

SEVERE: [10.224.168.202]:5701 [Test] com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: com.model.helper.ActiveUser

java.util.concurrent.ExecutionException: com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: com.model.helper.ActiveUser

       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)

       at java.util.concurrent.FutureTask.get(FutureTask.java:111)

       at com.hazelcast.map.operation.QueryOperation.runParallel(QueryOperation.java:127)

       at com.hazelcast.map.operation.QueryOperation.run(QueryOperation.java:73)

       at com.hazelcast.spi.impl.OperationServiceImpl.doRunOperation(OperationServiceImpl.java:273)

       at com.hazelcast.spi.impl.OperationServiceImpl.runOperation(OperationServiceImpl.java:183)

       at com.hazelcast.spi.impl.InvocationImpl.doInvoke(InvocationImpl.java:170)

       at com.hazelcast.spi.impl.InvocationImpl.invoke(InvocationImpl.java:104)

       at com.hazelcast.map.proxy.MapProxySupport.query(MapProxySupport.java:752)

       at com.hazelcast.map.proxy.MapProxyImpl.values(MapProxyImpl.java:462)

       at com.util.GlobalMaps.getActiveUserName(GlobalMaps.java:67)                                 <------- my POJO with static variable to ServletContext and static methods against my created Hazelcast map stored on context

       at com.services.v1.PlanService.getPlans(PlanService.java:29)                                       <------- JAX-RS service (I believe this is under the covers really a servlet?)

       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

       at java.lang.reflect.Method.invoke(Method.java:606)

       at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)

       at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)

       at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:165)

       at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:89)

       at org.apache.openejb.server.cxf.rs.AutoJAXRSInvoker.invoke(AutoJAXRSInvoker.java:66)

       at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:57)

       at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:93)

       at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)

       at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)

       at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:237)

       at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.onMessage(CxfRsHttpListener.java:178)

       at org.apache.openejb.server.rest.RsServlet.service(RsServlet.java:53)

       at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

       at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

       at org.apache.logging.log4j.core.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:66)

       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

       at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)

       at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)

       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)

       at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

       at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

       at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

       at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)

       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:724)

Caused by: com.hazelcast.nio.serialization.HazelcastSerializationException: java.lang.ClassNotFoundException: com.model.helper.ActiveUser

       at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.read(DefaultSerializers.java:190)

       at com.hazelcast.nio.serialization.StreamSerializerAdapter.read(StreamSerializerAdapter.java:59)

       at com.hazelcast.nio.serialization.SerializationServiceImpl.toObject(SerializationServiceImpl.java:218)

       at com.hazelcast.map.operation.QueryOperation$1.call(QueryOperation.java:107)

       at com.hazelcast.map.operation.QueryOperation$1.call(QueryOperation.java:89)

       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

       at java.util.concurrent.FutureTask.run(FutureTask.java:166)

       at com.hazelcast.util.executor.ManagedExecutorService$Worker.run(ManagedExecutorService.java:166)

       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:724)

       at com.hazelcast.util.executor.PoolExecutorThreadFactory$ManagedThread.run(PoolExecutorThreadFactory.java:59)

Caused by: java.lang.ClassNotFoundException: com.model.helper.ActiveUser

       at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

       at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

       at java.security.AccessController.doPrivileged(Native Method)

       at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

       at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

       at org.apache.openejb.server.cxf.transport.util.CxfContainerClassLoader.findClass(CxfContainerClassLoader.java:95)

       at org.apache.openejb.server.cxf.transport.util.CxfContainerClassLoader.loadClass(CxfContainerClassLoader.java:100)

       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

       at com.hazelcast.nio.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:83)

       at com.hazelcast.nio.IOUtil$1.resolveClass(IOUtil.java:77)

       at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1610)

       at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)

       at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)

       at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)

       at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)

       at com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer.read(DefaultSerializers.java:185)

       ... 11 more



Noctarius

unread,
Mar 7, 2014, 1:28:08 AM3/7/14
to haze...@googlegroups.com
The exception sounds like there are class loader issues. Have you tried to the the web app class loader explicitly inside the listener (while initializing HZ?). I’m not yet sure which class loader is the TCCL (Thread Context ClassLoader) at time of executing the listener. Possibly it is the containers class loader but not the web app class loader. That way the container class loader won’t have access to your web app classes later on.

Chris

--
You received this message because you are subscribed to the Google Groups "Hazelcast" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hazelcast+...@googlegroups.com.
To post to this group, send email to haze...@googlegroups.com.
Visit this group at http://groups.google.com/group/hazelcast.
To view this discussion on the web visit https://groups.google.com/d/msgid/hazelcast/2d24a59f-d02b-4859-9605-1dbf9525267c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

freh...@gmail.com

unread,
Mar 7, 2014, 6:18:08 PM3/7/14
to haze...@googlegroups.com, noctar...@googlemail.com

Thanks Chris, that indeed solved the problem!
Reply all
Reply to author
Forward
0 new messages