Boa noite Paulo,
Segue a stack.
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:
...
@Path("/refreshValue/{component.id}")
public void refreshValue(ComponentsModel component) {
try {
...
} catch (Exception e) {
log.error(e.getMessage(), e);
validator.add( new ValidationMessage(this.processErrorMessage( e ), "error") );
validator.onErrorUse( Results.page() ).of( ComponentController.class ).error();
} finally {
if( session != null ) {
session.close();
session = null;
}
}
result.use(Results.logic()).redirectTo(ComponentController.class).result( message.toString() );
}
public void result(String msg) {
result.include("values", msg);
}
public void error() {}
Tenho minha JSP result.jsp que só mosta o
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
@Path("/refreshValue/{component.id}")
public void refreshValue(ComponentsModel component) {
try {
....
} catch (Exception e) {
log.error(e.getMessage(), e);
message.delete(0, message.length());
message.append( this.processErrorMessage( e ) );
} finally {
if( session != null ) {
session.close();
session = null;
}
}
result.include("values", msg);
}
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,.