Problem with Javassist + ClassCastException
fkj Aug 6, 2010 9:56 AMI have recently ported a Seam application form JBoss AS 5.1 to Tomcat 6.0.29.
After that I started to get a ClassCastException in a HttpSessionListener that I have. I'm not able to simulate it locally. Tomcat session persistence is disabled. I'm using the same Javassist version as JBoss.
Code:
@Override public void sessionDestroyed(HttpSessionEvent arg0) { try { TBTecnico tecnico = (TBTecnico) arg0.getSession().getAttribute("tecnicoLogado"); if(tecnico != null && tecnico.getAtendente() != null) { Lifecycle.beginCall(); StAtendimentoService stAtendimentoService = (StAtendimentoService) Component .getInstance("stAtendimentoService"); stAtendimentoService.finalizarAtendimenosAtendente(tecnico.getAtendente()); StAtendenteDisponivelService stAtendenteDisponivelService = (StAtendenteDisponivelService) Component.getInstance("stAtendenteDisponivelService"); stAtendenteDisponivelService.logout(tecnico.getAtendente()); Lifecycle.endCall(); } } catch(Exception e) { e.printStackTrace(); new ExceptionMail("SessionListener AreaTecnico", e); } }
Sometimes the exception has one stack trace and sometimes another
Stack trace 1:
java.lang.ClassCastException: .persistence.mysql.service.chat.StAtendimentoService_$$_javassist_seam_69 cannot be cast to .persistence.mysql.service.chat.StAtendimentoService at .tecnico.SessionListener.sessionDestroyed(SessionListener.java:32) at org.apache.catalina.session.StandardSession.expire(StandardSession.java:708) at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:575) at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:700) at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:685) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1316) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) at java.lang.Thread.run(Thread.java:619)
Stack trace 2:
java.lang.ClassCastException: .persistence.mysql.service.chat.StAtendimentoService_$$_javassist_seam_69 cannot be cast to .persistence.mysql.service.chat.StAtendimentoService at .tecnico.SessionListener.sessionDestroyed(SessionListener.java:32) at org.apache.catalina.session.StandardSession.expire(StandardSession.java:708) at org.apache.catalina.session.StandardSession.expire(StandardSession.java:643) at org.apache.catalina.session.StandardSession.invalidate(StandardSession.java:1148) at org.apache.catalina.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:150) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.seam.contexts.FacesLifecycle.invalidateSession(FacesLifecycle.java:158) at org.jboss.seam.contexts.FacesLifecycle.endRequest(FacesLifecycle.java:135) at org.jboss.seam.jsf.SeamPhaseListener.afterResponseComplete(SeamPhaseListener.java:525) at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:253) at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:196) at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) at .jsf.filter.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:41) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619)
Thanks for any help,
Felipe