Во время процедуры запуска сервера я обращаюсь к удаленному хосту за некоторыми данными инициализации. К сожалению, рассматриваемый удаленный хост известен тем, что случайно не реагирует на соединения (скажем, в 3% случаев это происходит). В результате соединение зависает на неопределенное время (возможно, навсегда), и мой сервер не запускается в течение разумного периода времени, если вообще. Он висел на час раньше.
Время ожидания подключения:
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(connectionTimeout);
for (int i = 0; i <= connectionRetries; i++) {
try {
log.info("Establishing connection to ClassNotes service.");
conn.connect();
break;
} catch (SocketTimeoutException e) {
log.warn("Timed out connecting to ClassNotes service.");
}
}
не работает, так как соединение с сервером уже установлено при зависании. Кажется, проблема в том, что он пытается получить InputStream с сервера.
Любой, кому приходилось работать с непослушными сервисами, должен ли я связать процесс получения InputStream с конечным числом попыток и просто иметь дело с одним или двумя потенциальными потоками, висящими в памяти JVM на неопределенный срок? Или есть более распространенный способ справиться с этим в Java?
Также было бы полезно знать, что сервер, запускаемый без информации с удаленного хоста, не так разрушителен, как сервер, не запускающийся вообще.
Заранее спасибо.