Seguinte, tenho uma aplicação em AS3 onde a cada X segundos faço uma requisição ao Tomcat para recuperar dados.
Acontece que enquanto estava usando o VRaptor 3.1.1 conseguia recuperar os dados sem problemas, porém minha aplicação passou a efetuar mais de uma requisição no mesmo segundo,
Oq é absolutamento correto no contexto do que estou fazendo, ai encontrie o problema de
# SEVERE: Servlet.service() for servlet default threw exception
# java.util.ConcurrentModificationException
...
java.lang.IllegalStateException: There are two rules that matches the uri ...
Pesquisando no aqui, vi que outras pessoas atulizaram a lib para o VRaptor 3.1.3.
Quando fiz isso minha aplicação AS3 parou de receber a resposta do Tomcat. O request chega para o Tomcat porém a resposta não está sendo identificada pelo AS3. Se chamo a URL pelo borwser consigo a resposta sem problemas.
O VRaptor mudou alguma coisa ao enviar uma resposata? Alguém saberia oq pode ser?
SEVERE: Servlet.service() for servlet default threw exception
java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
at java.util.LinkedList$ListItr.next(LinkedList.java:696)
at com.google.common.collect.Iterators.any(Iterators.java:638)
at com.google.common.collect.Collections2$FilteredCollection.isEmpty(Collections2.java:168)
at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUri(DefaultRouter.java:134)
at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUriAndMethod(DefaultRouter.java:116)
at br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:92)
at br.com.caelum.vraptor.http.DefaultResourceTranslator.translate(DefaultResourceTranslator.java:51)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:64)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
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.core.StandardHostValve.invoke(StandardHostValve.java:128)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Agora vou dizer como consegui resolver pelo menos para o contexto da minha aplicação.
Como estava fazendo:
Bom dessa forma ocorre o erro que é mostado na Stack e também tenho uma intermitencia na recuperação dos dados via AS3. OU seja, hora ele conseguia pegar hora não.
Depois de testar muito e ficar na tentativa e erro consegui resolver da seguinte forma
Em resumo, parei de redirecionar para uma outra página e jogo o resultado na mesma página que chamo. Com isso parou de dar o erro de concorência e o AS3 está conseguindo sempre recuperar os valores.
Mais não consegui descobrir o motivo do erro e nem da intermitência. Até o momento tenho somente um ambiente de teste pequeno, terei que colocar essa aplicação para rodar em produção, ai não sei se os problemas vão voltar,.
Voltei, sei que demorei mais achei que o problema estava resolvido, pois havia testado com algumas requisições e não tinha ocorrido o erro.
Agora que está em teste pesado a apliacação o problema voltou a ocorrer.
Alguém teria alguma idéia
SEVERE: Servlet.service() for servlet default threw exception
java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
at java.util.LinkedList$ListItr.next(LinkedList.java:696)
at com.google.common.collect.Iterators.any(Iterators.java:638)
at com.google.common.collect.Collections2$FilteredCollection.isEmpty(Collections2.java:168)
at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUri(DefaultRouter.java:134)
at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUriAndMethod(DefaultRouter.java:116)
at br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:92)
at br.com.caelum.vraptor.http.DefaultResourceTranslator.translate(DefaultResourceTranslator.java:51)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:64)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
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.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)