Есть Oracle и JDK 1.3. В Oracle лежат Java классы взаимодействия с внешним SOAP сервисом.
Сделано это следующим образом:
1. Открывается сокет
2. выставляется timeout
3. посылается запрос SOAP сервису
4. ждется ответ от сервиса
5. если по прошествии некотрого времени ответ не получен выкидывается exception
Вопрос в следующем: нужно ли перед пунктом 5 закрывать socket или он сам по timeout'у закроется?
По факту мы имеем проблему — по прошествии очень большого количества времени БД падает из-за слишком болього числа открытых сессий и в данный момент мы грешим именно на этот код.
P.S. Я слышал что в JDK 1.3 была какая-то проблема с реализацие сокетов и что она пофикшена в JDK 1.4 — это случайно не она?
Date start = new Date();
while(((result = this.in.read(c)) == -1)) {
int elapsed = new Date().getSeconds() — start.getSeconds();
if (elapsed > this.timeout) {
throw new MyException("...");
}
}