3

さらに進む前に、メソッドを呼び出して、非同期 HTTP REST 呼び出しをトリガーする (後で別のエンドポイントにステータスを送信する) 状況があります。エンドポイントに応答が返されるまでメソッドを待機させ、取得したステータスを確認してさらに続行します。Javaで実行可能なソリューションを探しています。擬似コードまたは実装が役立ちます

同様のケースを見た@非同期Java呼び出しのグループを待機する軽量の方法ですが、実装が簡単かどうかについてはあまり考えていません。

実装の詳細

以下のように非同期応答を処理するための JAX-RS エンドポイントがあります。

@POST
@Path("/status")
@Consumes("application/xml")
public Response processConfigStatus(@Context UriInfo uriInfo, ConfigStatus configStatus)
{
   // process Status got from the async REST call
   return ResponseHelper.createNoContentResponse();
}

処理するクラス

Class ProcessData{

  public void updateData()
    checktStatus(uri);
    update();// should wait untill the processConfigStatus() endpoint gives status
  }

  private  checktStatus(String uri){
     // makes a REST call to a URI using a JAX-RS webclient or a httpclient this returns HTTP 200 or 204 code immediatley. And then the Server process the request asynchronously and gives back the status to JAX-RS endpoint(/status).
     post(uri);
  }

}

別のクラスからのメソッド呼び出し

ProcessData pd = new ProcessData()
pd.updateData();
4

2 に答える 2

4

CountDownLatchを使用するのはどうですか?

他のスレッドで実行されている一連の操作が完了するまで、1つ以上のスレッドが待機できるようにする同期支援。

于 2012-09-17T23:56:12.793 に答える
0

あなたが提供したリンクと同じように、応答を待っている非同期呼び出しの数を追跡し、その数がゼロになるまで待つ方法を実装する必要があります。


count = numAsyncCalls
..calling all of the RESTful services here (each call must have some sort of callback to decrement 'count' variable above..
while (count > 0)
   wait around

リンクでの CountDownLatch の使用は、私の疑似コードとほとんど同じに見えます

于 2011-02-12T18:27:46.987 に答える