Problemas request/response VRaptor 3

Boa tarde senhores,

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,

Ex.

REQUEST1 = 'http://localhost:8080/dpp/component/refreshValue/1'
REQUEST2 = 'http://localhost:8080/dpp/component/refreshValue/2'

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?

flw

Fala pessoal,

Conseguiu resolver o problema do retorno voltando o jar paranamer-2.2.jar para paranamer-1.5.jar

Mais voltou a dar o problema de

java.util.ConcurrentModificationException

Como resolvo esse problema?

flw

Oi Bruno

Pode postar a stack trace inteira pra gente?

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,.

o motivo da intermitência é uma falha de concorrência do VRaptor…

no seu AS3 ele deve estar fazendo requests simultâneos e ele está dando esse erro…

só pra saber: qdo o erro ocorre? qdo o servidor está iniciando? em uma request qualquer? volta a dar o erro na mesma instância do servidor?

Boa noite,

Então até onde eu observei o erro ocorre somente na 1ª requisição simultanea que o server recebe. Depois só ocorre a intermitência dos dados.

E sim, meu AS3 envia conexões simultaneas, mais faz parte da aplicação que isso ocorra.

sim sim…

de qqer forma, seu AS3 tá mandando requisições antes do server levantar?

tenta dar um clean no server e no projeto, por via das dúvidas

Fala Lucas,

Então em tese o server já está UP quando a requisição é feita, pois até o momento sou eu quem controla quando o AS3 vai efetuar as requisições.

Vou testar e coloco aqui o resultado se esse problema ocorre mesmo depois de eu executar 1 requisição, antes das requisições simultâneas

flw

Pessoal,

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)

atualiza pro 3.2.0 e vê se esse erro ainda ocorre, por favor?

Parou de dar o problema vlw