java gwt comet

java - Uso básico de gwt-comet para GWT



(1)

Estoy probando la extensión gwt-comet aquí . No puedo recibir ningún mensaje del servidor al cliente.

Tengo una aplicación GWT básica con una implementación de servicio RPC.

Cliente: MockGui.java

public class MockGui implements EntryPoint { @SerialTypes({ Message.class }) public static abstract class MyMessageSerializer extends CometSerializer { } public void onModuleLoad() { ... goServer(); } public void goServer() { GreetingServiceAsync service = GWT.create(GreetingService.class); service.greetServer(new Message(), new AsyncCallback<Void>() { @Override public void onSuccess(Void result) { // TODO Auto-generated method stub } @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } }); CometListener listener = new CometListener() { public void onConnected(int heartbeat) { } public void onDisconnected() { } public void onHeartbeat() { } public void onRefresh() { } public void onError(Throwable exception, boolean connected) { // warn the user of the connection error } public void onMessage(List<? extends Serializable> messages) { for (Serializable message : messages) { if (message.getClass().equals(Message.class)) { Message myMessage = (Message) message; Window.alert(myMessage .getMessage()); Log.info("This is a ''INFO'' test message"); Log.warn("This is a ''WARN'' test message"); } } } }; String serverUrl = GWT.getModuleBaseURL() + "greet"; CometSerializer serializer = GWT.create(MyMessageSerializer.class); CometClient client = new CometClient(serverUrl, serializer, listener); client.start(); }

Servidor: GreetingServiceImpl.java

public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService { List<Message> messages = new ArrayList<Message>(); public void greetServer(Message message) throws IllegalArgumentException { HttpSession httpSession = getThreadLocalRequest().getSession(); CometSession cometSession = CometServlet.getCometSession(httpSession); Message m = new Message(); m.setMessage("test from server"); cometSession.enqueue(m); } }

web.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <!-- Servlets --> <servlet> <servlet-name>greetServlet</servlet-name> <servlet-class>test.mock.gui.server.GreetingServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>greetServlet</servlet-name> <url-pattern>/mockgui/greet</url-pattern> </servlet-mapping> <!-- the comet servlet for streaming messages to the client --> <servlet> <servlet-name>myComet</servlet-name> <servlet-class>net.zschech.gwt.comet.server.CometServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myComet</servlet-name> <url-pattern>/mockgui/comet</url-pattern> </servlet-mapping> <!-- Default page to serve --> <welcome-file-list> <welcome-file>MockGui.html</welcome-file> </welcome-file-list> </web-app>

Espero que se active el oyente del cometa en el lado del cliente (oyente); sin embargo, nada parece suceder. No sé cómo puedo solucionar el problema más: nada falla en la ejecución.

¿Hay alguna manera de que pueda ver cuándo se activa el servlet del cometa (myComet) y qué está haciendo?


Parece que esta es la URL que está utilizando para la solicitud del cometa:

String serverUrl = GWT.getModuleBaseURL() + "greet";

Pero la URL de su cometa en web.xml es / mockgui / comet. ¿Puedes al menos intentar reemplazar la línea anterior con esto ?:

String serverUrl = GWT.getModuleBaseURL() + "comet";

y si todavía no funciona, haz una

Window.alert(serverUrl);

y ver si la URL apunta realmente al servlet del cometa.

¡Buena suerte!