У меня есть этот код для метода HTTP GET:
@Override
public Cert get(Representation entity) {
// ...
Cert cert = ct.fetchCertificate(Arrays.asList(domains));
return cert;
}
Это генератор сертификатов, который возвращает сериализованный объект Cert
в клиент.
А внутри метода fetchCertificate
есть метод Thread.sleep
, который заставляет весь сервлет / веб-приложение останавливаться до тех пор, пока метод не возвращается, в результате чего целое веб-приложение не может отвечать на дополнительные запросы HTTP:
// Poll for the challenge to complete.
try {
int attempts = 20;
while (challenge.getStatus() != Status.VALID && attempts-- > 0) {
LOG.info("CHALLENGE ATTEMPTS: " + attempts);
// Did the authorization fail?
if (challenge.getStatus() == Status.INVALID) {
throw new AcmeException("Challenge failed... Giving up.");
}
// Wait for a few seconds
Thread.sleep(5000L);
// Then update the status
challenge.update();
}
} catch(Exception e) {
// ...
}
В Rx Java говорится о том, что является наилучшим способом достижения той же функциональности, но без блокировки приложения.