JSF 1.x,Facelets,Richfaces,Ajax... - Requisições Malucas

5 respostas
A

Olá amigos,

Estou trabalhando com um sistema que está dando uma baita dor de cabeça.
Ele é estruturado em um rich:tabpanel, em cada painel é dada uma série de opções para o usuário escolher, e quando avança rerenderiza via ajax alguns paineis que exibem esta seleção.
99% das requisições são feitas via ajax. Como a abaixo:

<a4j:form ajaxSubmit="true" reRender="selecoes" rendered="true">

						<h:selectBooleanCheckbox value="#{estadosController.testeArea}">
							<a4j:support event="onchange"
								action="#{estadosController.testeAreaMetodo}" />
						</h:selectBooleanCheckbox>
						<h:outputText value=" Selecionar multiplas areas de interesse: " />
						<br />
						<br />
						<a4j:include viewId="treeint.xhtml"
							id="includeAssuntoId" style="width: 100%;" />
						<br />
						<a4j:commandButton value="Enviar"
							action="#{estadosController.setarMultiplasAreas}"
							reRender="selecoes,abageral, erros" />

					</a4j:form>
Ultimamente, um problema tem se tornado frequente... Quando eu faço qualquer requisição em ajax, é mostrado um painel:
<rich:modalPanel id="panel_loading" autosized="true">
			 Aguarde <br />
			<h:graphicImage id="idgraficloadpanel"
				url="/imagens/loading_vermelho.gif" style="clear: both;" />
		</rich:modalPanel>
		<a4j:status id="idstatusloadpanel"
			onstart="Richfaces.showModalPanel('panel_loading')"
			onstop="Richfaces.hideModalPanel('panel_loading')" />

Os loadings normalmente funcionam sem problemas, entretanto algumas requisições estão demorando DEMAIS e o painel de loading fica eternamente rodando.... O mais estranho é que o erro se apresentam de forma totalmente aleatória, e em um ponto que funcionou a 2 minutos atraz, apresenta erro.

container usado: Tomcat 6

Gostaria de saber se algum de vocês já se deparou com isso ou pode me dar uma luz de como proceder pra arrumar esta coisa.

Agradeço pela atenção =]

5 Respostas

D

Amigo, não tenho certeza, mas talvez seja algo relacionado a cache. Tenta incluir o seguinte código na página:

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

Sendo que aí tá com JQuery então não sei se serve para você. Mas no Richfaces deve ter alguma forma de fazer a mesma coisa.

A

Amigo, tentei adicionar essa linha e tentei também via config no web.xml:

<filter> <display-name>RichFaces Filter</display-name> <filter-name>richfaces</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> <init-param> <param-name>enable-cache</param-name> <param-value>false</param-value> </init-param> </filter>
Não deu certo… o erro é extremamente inconstante. é dificil até fazer ele acontecer. (O mais engraçado é que na maquina do chefe sempre dá de primeira. Na minha demora pelo menos 30 tentativas exaustivas)

gomesrod

Já experimentou monitorar as requisições feitas pelo browser, através de alguma ferramenta como Firebug ou IEHttpHeaders ?
A situação é realmente estranha, talvez isso dê alguma pista sobre que caminho seguir para descobrir a origem do problema.

A
Sim, tentei... firebug por um bom tempo, quando o problema se apresenta, o console mostra que ele ta em um loading eterno da pagina. vou tentar forçar e posto um pedaço do header. tentei tirar todos os tunnings do web.xml, e mesmo assim apresenta problema, tentei por novamente... problema...
<context-param>
    <description>The buffer size to set on the response when the  ResponseWriter is generated.
		By default the value is -1, which will not assign a buffer size on the response.</description>
    <param-name>facelets.BUFFER_SIZE</param-name>
    <param-value>8192</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
  </context-param>
  <context-param>
    <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>org.ajax4jsf.COMPRESS_STYLE</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>org.richfaces.LoadStyleStrategy</param-name>
    <param-value>all</param-value>
  </context-param>
  <!-- --> <context-param>
    <param-name>org.richfaces.LoadScriptStrategy</param-name>
    <param-value>all</param-value>
  </context-param> 
  <filter>
    <display-name>RichFaces Filter</display-name>
    <filter-name>richfaces</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
    <init-param>
      <param-name>enable-cache</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forceparser</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>richfaces</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
  </filter-mapping>
  <filter>
    <display-name>Ajax4jsf Filter</display-name>
    <filter-name>ajax4jsf</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>ajax4jsf</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>

Tentei com forceparcer off, on... o mesmo para a cache...
Vou continuar a batalha aqui, se não nada de feriado para mim.

gomesrod

Nesse caso também existe a possibilidade de o problema não ter nada a ver com o richfaces… talvez a requisição esteja engasgando em algum lugar no lado server, um deadlock ou algo assim.

Seu próximo passo poderia ser caprichar nas mensagens de log no Java (no início do método chamado pelo ajax, nas consultas a banco e em todos os demais pontos relevantes até o final da execução). Caso esteja parando em algum lugar no meio do caminho vc fica mais próximo de saber onde foi.

E veja se tem algum esquema para setar um timeout nas chamadas Ajax.

Criado 21 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 5
Participantes 3