2011-05-15 6 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)がトリガーされて何が起きているかわかりますか?

答えて

4

あなたが彗星の要求のために使用されているURLであるようだ。

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

しかし、web.xmlで、あなたの彗星のURLは/ mockgui /彗星です。あなたは、少なくとも

Window.alert(serverUrl); 

を行い、この?:

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

、それはまだ動作しない場合と上記の行を交換しようとすると、URLが実際に彗星のサーブレットを指しているかどうかを確認することができます。

幸運を祈る!

関連する問題