2011-05-15 5 views
3

Я пробовал расширение gwt-comet here. Я не могу получить любые сообщения с сервера клиенту.Основное использование gwt-кометы для GWT

У меня есть основное приложение GWT с реализацией службы RPC.

Клиент: 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(); 
} 

Сервер: 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> 

Я ожидаю, что слушатель комет на стороне клиента (слушателя) будет запущен, но ничего не происходит. Я не знаю, как я могу отладить проблему дальше - ничего не удается выполнить.

Есть ли способ увидеть, когда запущен серт comet (myComet) и что он делает?

ответ

4

Кажется, это URL вы используете для кометы запроса:

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

Но ваша комета URL в web.xml является/mockgui/кометы. Можете ли вы по крайней мере попытаться заменить эту строку с этим ?:

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

и если она по-прежнему не работает, сделайте

Window.alert(serverUrl); 

и посмотреть, если URL на самом деле указывает на кометы сервлета ,

Удачи вам!

Смежные вопросы