У меня есть 2 веб-сервлета, один запускается в режиме асинхронности:
@WebServlet(name="myServlet", urlPatterns={"/asyncprocess"}, asyncSupported=true)
@ConditionalOnProperty(name="app.processasynch", havingValue="true")
public class AsyncServletGW extends HttpServlet {
@Autowired
private Stage1WorkersPool wp;
private static final Logger LOGGER = LoggerFactory.getLogger(ProcessBusinessLogicStage1Impl.class);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
AsyncContext aCtx = request.startAsync(request, response);
int paymentId = (new Random()).nextInt(100000);
WorkerThread workerThread = wp.getPool().get(paymentId % wp.getNumWorkingThreads());
ThreadUnitWorkImpl py = new ThreadUnitWorkImpl();
String msgBody;
if ("POST".equalsIgnoreCase(request.getMethod())){
msgBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
py.setXmlRequest(msgBody);
py.setACtx(aCtx);
aCtx.getResponse().setContentType("text/plain");
py.setResponse(aCtx.getResponse());
}else{
LOGGER.error("Not a POST request");
}
LOGGER.debug("Servlet Processing : " + py.toString());
workerThread.addUnitOfWork(py);
}
}
А другой в режиме синхронизации
@WebServlet(name="myServlet", urlPatterns={"/syncprocess"})
@ConditionalOnProperty(name="app.processasynch", havingValue="false")
public class SyncServletGW extends HttpServlet {
@Autowired
private ProcessInSynchStages synchP;
private static final Logger LOGGER = LoggerFactory.getLogger(ProcessBusinessLogicStage1Impl.class);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
ThreadUnitWorkImpl py = new ThreadUnitWorkImpl();
String msgBody;
if ("POST".equalsIgnoreCase(request.getMethod())){
msgBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
response.setContentType("text/plain");
py.setXmlRequest(msgBody);
py.setResponse(response);
}else{
LOGGER.error("Not a POST request");
}
ArrayList<ThreadUnitWorkImpl> tuwList = new ArrayList<>();
tuwList.add(py);
synchP.runInSynch(tuwList);
}
}
При вызове асинхронности я получаю печально известное исключение: Решено[org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление]
Во время отладки я заметил, что после первого вызова асинхронного сервлета второй, третий и т. д. всегда задерживаются.Через 1-2 секунды выдается указанное выше исключение, и сервлет обрабатывается.В режиме синхронизации, однако, все идет гладко ... какие-либо предложения?