我正在編寫一個簡單的Google Web Toolkit服務,它充當代理,它基本上存在以允許客戶端向不同服務器發佈POST。客戶端實質上使用此服務來請求HTTP調用。該服務只有一個異步方法調用,稱爲ajax(),它應該只是轉發服務器響應。我的代碼實施呼叫看起來像這樣:Google Web Toolkit來自服務實現的異步調用
class ProxyServiceImpl extends RemoteServiceServlet implements ProxyService {
@Override
public Response ajax(String data) {
RequestBuilder rb = /*make a request builder*/
RequestCallback rc = new RequestCallback() {
@Override
public void onResponseReceived(Response response) {
/* Forward this response back to the client as the return value of
the ajax method... somehow... */
}
};
rb.sendRequest(data, requestCallback);
return /* The response above... except I can't */;
}
}
當然,你可以看到我的問題的基本形式。 ajax()方法是異步使用的,但是GWT決定是聰明的並且將它隱藏在笨拙的舊開發人員身上,所以他們只需編寫普通的Java代碼就可以不用回調。 GWT服務基本上只是做魔術而不是接受回調參數。
然後,麻煩出現了,因爲GWT隱藏了我的回調對象。我試圖從服務實現中創建自己的異步調用,但是我不能,因爲GWT服務假定您在服務實現中同步行爲。我該如何解決這個問題,並從我的服務方法實現中進行異步調用?
只是爲了驗證 - 你希望ajax方法阻塞,直到你的異步sendRequest完成,然後返回結果 - 是的?你有兩個異步調用,一個是通過rpc從gwt客戶端到gwt服務器,另一個是從gwt服務器到外部服務器的異步調用,對吧? – 2010-06-07 02:36:38
是的,這基本上是正確的 – 2010-06-07 20:33:21