[RESOLVIDO] Primefaces push

Pessoal, alguém conhece bem o PrimePush do primefaces ?
Estou dando uma estudada nele e implementei um exemplo do próprio prime, so que está dando um erro que não estou identificando o motivo.

Eu fiz esta classe :

[code]package org.primefaces.examples.view;

import java.io.Serializable;

import org.primefaces.push.PushContext;
import org.primefaces.push.PushContextFactory;

public class GlobalCounterBean implements Serializable {

private static final long serialVersionUID = -5427586947481134443L;
private int count;

public int getCount() {
    return count;
}

public void setCount(int count) {
    this.count = count;
}

public synchronized void increment() {
    System.out.println("INICIANDO increment()");
    count++;

    PushContext pushContext = PushContextFactory.getDefault().getPushContext();
    pushContext.push("/counter", String.valueOf(count));

    System.out.println("finalizado increment()");

}

}[/code]

Com este Xhtml :

[code]
<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=“http://www.w3.org/1999/xhtml
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:p=“http://primefaces.org/ui”>

<p:growl id=“growl” showDetail=“true” />

<f:view>
<h:head>
<style type=“text/css”>
.display {
font-size: 36px !important;
}
</style>
<script type=“text/javascript”>

        function handleMessage(data) {
        	alert(data);
            $('.display').html(data);
        }

	&lt;/script&gt;
&lt;/h:head&gt;
&lt;h:body&gt;
	&lt;h:form id="form"&gt;
		&lt;h:outputText id="out" value="#{globalCounter.count}"
			styleClass="ui-widget display" /&gt;
		<br />

		&lt;p:commandButton value="Click"
			actionListener="#{globalCounter.increment}" /&gt;
	&lt;/h:form&gt;
	&lt;p:socket onMessage="handleMessage" channel="/counter" /&gt;
&lt;/h:body&gt;

</f:view>
</html>[/code]

Este exemplo na verdade é o exemplo counter que tem no manual do Primefaces.
A diferença aqui é que eu estou implementando no GlassFish 3.12
No glasfish eu ativei o Comet na opção da console SERVER-CONFIG/NETWORK-CONFIG/NETWORK-LISTENERS. Nesta opção peguei o listener que esta apontando para a porta 8080 e marquei as opções :Websockets Support e Comet Support

A aplicação sobre, porém que quando clico no botão que deveria atualizar o contador na tela, recebo essa mensagem na console do glassfish

[#|2013-01-20T15:10:53.981-0200|SEVERE|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=93;_ThreadName=Thread-2;|[Atmosphere-AsyncWrite-3] WARN org.atmosphere.cpr.DefaultBroadcaster - This message {"data":"5"} will be lost, adding it to the BroadcasterCache|#]

Não ocorre nenhuma exception, so esta mensagem. Percebo que o contador esta mudando a cada clique no botão, porem ele não atualiza na tela: (This message {“data”:“5”} ).
Alguém tem uma dica, ou consegue ver algo neste código que estou deixando passar ?

Obrigado

Tenho duas informações novas :

1º) Achei um texto na WEb dizendo que não posso ativar :Websockets Support e Comet Support juntos. Alguém que conheça os conceitos poderia me explicar sobre :Websockets e Comet Support ?

2º) Em outro texto uma pessoa comentou que o PrimePush e o GlassFish não trabalham bem direito

Acho que ta faltando uma anotação no seu GlobalCounterBean

A anotação de managed bean não estou usando pq fiz a configuração do managed bean no faces-config.
Tirando essa anotação, não existe nenhuma outra referenciada na documentação do primefaces

Novidades sobre essa tranqueira. Parece que está estável agora.

Em conversas no fórum do prime faces descobri que usando o primefaces 3.5 com o atmosfere 1.1 o GlassFish 3.1.2 tem que funcionar com o primepush.
Realmente haviam bugs que impediam o bom funcionamento do glassfish com as versões anterioes do atmosfere e primefaces.

Preciso fazer mais testes mas aparentemente ta funcionando. Deixei rodando horas esse exemplo e ele não parou de funcionar pelo menos.

Coloquei os seguintes jars do atmosfere na aplicação :
atmosphere-compat-jbossweb-1.1.0-SNAPSHOT.jar
atmosphere-compat-tomcat-1.1.0-SNAPSHOT.jar
atmosphere-compat-tomcat7-1.1.0-SNAPSHOT.jar
atmosphere-runtime-1.1.0-SNAPSHOT.jar

Mudei a versão do primefaces de 3.4 para 3.5
primefaces-3.5.jar

PS : Meu glassfish é o 3.1.2 e está habilitado a opção comet. A opção webSocket está desabilitada.

no Web.xml ficou assim :

[code]

<?xml version=“1.0” encoding=“UTF-8”?>
<web-app version=“3.0” xmlns=“http://java.sun.com/xml/ns/javaee
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/</url-pattern>
<url-pattern>
.jsf</url-pattern>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

&lt;servlet&gt;
	&lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt;
	&lt;servlet-class&gt;org.primefaces.resource.ResourceServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;

&lt;servlet-mapping&gt;
	&lt;servlet-name&gt;Resource Servlet&lt;/servlet-name&gt;
	&lt;url-pattern&gt;/primefaces_resource/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;

&lt;servlet&gt;
	&lt;servlet-name&gt;Push Servlet&lt;/servlet-name&gt;
	&lt;servlet-class&gt;org.primefaces.push.PushServlet&lt;/servlet-class&gt;	
&lt;/servlet&gt;

&lt;servlet-mapping&gt;
	&lt;servlet-name&gt;Push Servlet&lt;/servlet-name&gt;
	&lt;url-pattern&gt;/primepush/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;

&lt;context-param&gt;
	&lt;param-name&gt;javax.faces.PARTIAL_STATE_SAVING&lt;/param-name&gt;
	&lt;param-value&gt;false&lt;/param-value&gt;
&lt;/context-param&gt;

</web-app>[/code]

Criei uma aplicação baseado no counter que tem na pagina do primefaces

ManagedBean :

[code]
package org.primefaces.examples.view;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.push.PushContext;
import org.primefaces.push.PushContextFactory;

@ManagedBean(name = "globalCounter")
@ViewScoped
public class GlobalCounterBean {

private int count = 0;

private static boolean emLoop = true;


public  void parar(ActionEvent e) {
	emLoop = false;
	System.out.println(emLoop);
}


public void monitor(ActionEvent e) {

	PushContext pushContext = PushContextFactory.getDefault()
			.getPushContext();
	while (emLoop) {			
		this.count++;			
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}		
		pushContext.push(&quot;/counter&quot;, String.valueOf(this.count));			
		System.out.println(count);		
	}
}

}[/code]

Xhtml

[code]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>

<html xmlns=“http://www.w3.org/1999/xhtml
xmlns:ui=“http://java.sun.com/jsf/facelets
xmlns:h=“http://java.sun.com/jsf/html
xmlns:f=“http://java.sun.com/jsf/core
xmlns:p=“http://primefaces.org/ui”>

<p:growl id=“growl” showDetail=“true” />

<f:view>
<h:head>
<style type=“text/css”>
.display {
font-size: 36px !important;
}
</style>
<script type=“text/javascript”>
function handleMessage(data) {
$(’.display’).html(data);
}
</script>
</h:head>
<h:body>
<h:form id=“form” prependId=“false”>
<p:remoteCommand autoRun=“true” name=“monitorSocket” actionListener="#{globalCounter.monitor}" async=“true” ></p:remoteCommand>
<h:outputText id=“out” styleClass=“display” />
<p:commandButton value=“Parar” ajax=“true” actionListener="#{globalCounter.parar}" />
</h:form>
<p:socket onMessage=“handleMessage” channel="/counter" />
</h:body>
</f:view>
</html>[/code]