[RESOLVIDO]JSF Entrou em loop

2 respostas
rogeriosantos77

Gente criei um monstro. rs

Pessoal, eu precisava no managed bean ficar monitorando um serviço socket, até ai beleza.
Crie essa estrutura

@javax.faces.bean.ManagedBean
@ViewScoped
public class ManagedBean implements Serializable {

	private static final long serialVersionUID = -5427586947481134443L;

	boolean cont = true;
	public void start(ActionEvent e) {
		
	
		int i = 0; // So para testar como esta o loop
		while (cont) {
			
			System.out.println(i);
			
                        escuterServicoSocket();


			i++;
			
		}
		
	}

	public void parar(ActionEvent e) {		
		System.out.println("Cancelando loop do método start");
		cont = false;		
	}

}

O No jsp iniciei o método start com o primefaes

<p:commandButton actionListener="#{managedBean.parar}" ajax="true" value="comando"></p:commandButton>

			<p:remoteCommand async="true" autoRun="true" name="init"  actionListener="#{managedBean.start}"
				global="false" />

Ao iniciar a página o método Start fica em loop monitorando que eu quero, porem tem um efeito colateral. Quando eu executo o comando parar e mudo a variavel cont para false, esse valor não se reflete no método start. Se eu coloco um break point no metodo start, mesmo depois de mudar o valor da variavel cont para false no método parar, ela continua como true no método start
O pior vem agora. Se eu colocar um break point no método parar depois do primeiro clique, o valor de cont esta mudado para false.

2 Respostas

rogeriopaguilar

Tenta colocar o modificador volatile na declaração da variável boolean e testa de novo

rogeriosantos77

rogeriopaguilar, valeu pela dica me abriu os olhos para outros detalhes.

O problema resolveu-se depois de usar o valotile e ainda assim trocar o método de actionListener para action, sendo qeu o método precisa ser synchronized

Criado 26 de janeiro de 2013
Ultima resposta 27 de jan. de 2013
Respostas 2
Participantes 2