我正在编写一个简单的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