Problemas request/response VRaptor 3

10 respostas
B

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

10 Respostas

B

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

Paulo_Silveira

Oi Bruno

Pode postar a stack trace inteira pra gente?

B

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

Lucas_Cavalcanti

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?

B

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.

Lucas_Cavalcanti

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

B

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

B

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)

Lucas_Cavalcanti

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

B

Parou de dar o problema vlw

Criado 25 de julho de 2010
Ultima resposta 18 de jan. de 2011
Respostas 10
Participantes 3