次のように、2つのサーブレットがあります。
public class ServletA extends HttpServlet {
public void doGet(final HttpServletRequest request,
final HttpServletResponse response) {
// Kick off some async processing
RequestQueue.putRequest(new RequestInfo(...), new FutureCallback<ResponseInfo> () {
@Override
public void completed(ResponseInfo responseInfo) {
// Send some data to database
TransactionManager.getInstance().create(...);
}
)};
// Send response to client
response.getWriter().println("ServletA: SUCCESS");
}
}
public class ServletB extends HttpServlet {
public void doGet(final HttpServletRequest request,
final HttpServletResponse response) {
// Use a CountDownLatch to force synchronous processing on an asynchronous construct
final CountDownLatch completedSignal = new CountDownLatch(1);
RequestQueue.putRequest(new RequestInfo(...), new FutureCallback<ResponseInfo> () {
@Override
public void completed(ResponseInfo responseInfo) {
// Send some data to database, and send response to client
TransactionManager.getInstance().create(...);
response.getWriter().println("ServletB: SUCCESS");
completedSignal.countDown();
}
)};
completedSignal.await();
}
}
問題は、負荷が高い場合、サーブレットAを呼び出すクライアントが、応答として「サーブレットB:成功」を受け取ることがあることです。
なぜこれが必要ですか?どのように修正できますか?
ありがとう。