1

グーグルのチュートリアルを使用して簡単なグーグルウェブツールキットプロジェクトを作成し、グーグルアプリエンジンにデプロイしました。onModuleLoad()で、クライアント側のrpcサービスアクションのテストボタンを作成しました。

public void onModuleLoad() {
    // Listen for mouse events on the test Cron button.
    cronTestButton.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        calculateStockData();
    }
    });
}

calculateStockData()関数は、サービスを作成し、サーバー上でcalculateStockData(callback)関数を実行して、単純なStockDataオブジェクトを返します。

private void calculateStockData() {
    // Initialize the service proxy.
    if (stockPriceSvc == null) {
        stockPriceSvc = GWT.create(StockDataService.class);
    }

    // Set up the callback object.
    AsyncCallback<StockData> callback = new AsyncCallback<StockData>() {
        public void onFailure(Throwable caught) {

        }

        public void onSuccess(StockData result) {
            updateTable(result);
        }
    };
    // Make the call to the stock price service.
    stockPriceSvc.calculateStockData(callback);
}

したがって、web.xmlファイルには、次のサービスが定義されています。

<servlet>
<servlet-name>stockDataServiceImpl</servlet-name>
    <servlet-class>
    com.google.gwt.sample.stockwatcher.server.stockdata.StockDataServiceImpl
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>stockDataServiceImpl</servlet-name>
<url-pattern>/stockwatcher/stockPrices</url-pattern>
</servlet-mapping>

cronテストボタンを使用してコードを実行すると、onSuccessで成功したときにサービスからの応答としてStockDataオブジェクトを受け取り、updateTable()関数でgwtflexTableを更新します。

問題は、それがcronジョブを介して実行されるときに、calculateStockData()サービス関数に応答してgwtウィジェットでこれと同じ更新アクションを実行したいということです。

したがって、cron.xmlに以下を追加した後、cronジョブはcalculateStockData()関数を正しく実行しています。

<cron>
    <url>/stockwatcher/stockPrices</url>
    <description>Get stock prices every 5 minutes</description>
    <schedule>every 5 minutes synchronized</schedule>
</cron>

しかし、クライアント側でcronジョブの実行からの応答を処理するリスナーを設定する方法がわかりません。誰かがこれを手伝ってもらえますか?さらに情報が必要な場合はお知らせください。

4

1 に答える 1

1

AppEngine では、チャネル APIを使用してサーバーからクライアントにデータをプッシュできます (クライアント コードでgwt-gae-channelを使用してチャネルに接続します)。

それ以外の場合 (そして単純化しすぎている場合)、データをサーバーに保存し、クライアントに定期的に新しいデータをポーリングさせる必要があります。

于 2012-04-13T12:41:36.797 に答える