2011-05-15 9 views
3

gwt-혜성 확장 here을 시험 중입니다. 서버에서 클라이언트로 메시지를 가져올 수 없습니다.GWT 용 gwt-혜성의 기본 사용

RPC 서비스를 구현 한 기본 GWT 응용 프로그램이 있습니다.

클라이언트 : 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> 

나는 클라이언트 측 (청취자)의 혜성 리너가 트리거 될 것으로 기대한다. 그러나 아무 일도 일어나지 않을 것으로 보인다. 더 이상 문제를 디버깅 할 수있는 방법을 모르겠다. 아무 것도 실행하지 못합니다.

혜성 서블릿 (myComet)이 트리거되고 어떤 일을하는지 알 수있는 방법이 있습니까?

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

그러나 web.xml에 혜성 URL이/mockgui/혜성입니다 :

답변

4

이것이 당신이 혜성 요청에 사용하는 URL 것 같다. 적어도이

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

을? :와 위의 라인을 교체 시도하고 그것은 여전히 ​​작동하지 않는 경우 URL은 실제로 혜성 서블릿 가리키는 경우

Window.alert(serverUrl); 

을하고 볼 수 .

행운을 빈다.