私はプロキシとして機能する単純なGoogleWebToolkitサービスを作成しています。これは基本的に、クライアントが別のサーバーにPOSTを実行できるようにするために存在します。クライアントは基本的にこのサービスを使用してHTTP呼び出しを要求します。このサービスには、ajax()と呼ばれる非同期メソッド呼び出しが1つだけあり、サーバーの応答を転送するだけです。呼び出しを実装するための私のコードは次のようになります。
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サービスは、サービス実装で同期的に動作することを前提としているため、できません。これを回避し、サービスメソッドの実装から非同期呼び出しを行うにはどうすればよいですか?