В нашем журнале Tomcat и webapps есть загадочная ошибка. Веб-приложение Java работает на Tomcat 6, использует базу данных Oracle 11g. Все заявки зарегистрированы. Мы используем Commons DBCP для пула соединений с базой данных. Одной из особенностей нашего приложения является то, что все соединения ограничены запросами. Мы реализовали это с помощью SmartDataSource от Spring. Отпускание соединений заключено в try / finally, поэтому даже если во время запроса возникнет ошибка, соединение будет освобождено. Это работает хорошо все время, пока мы его тестировали.
Однажды наш сервер вернул ошибку 503 «Служба недоступна». В логах мы нашли только одно исключение: org.apache.commons.dbcp.AbandonedTrace$AbandonedObjectException
. Таким образом, похоже, что Common DBCP отказался от сборщика соединений и обнаружил потерянное соединение и сообщил об этом. Это не ошибка сама по себе, это предположение, что ошибка в другом месте.
Трассировка сообщает нам точное время и код, когда было установлено соединение. Мы исследовали это время в журналах, и был запрос, который начался, но никогда не заканчивался. Это объясняет, почему соединение не было разорвано, но что нас беспокоит, так это то, как try / finally могло быть прервано?
Я думаю, что это проблема Tomcat, потому что в журналах наших приложений не было других исключений, и потому что код ошибки, который возвратил сервер, не был обычной ошибкой 500 «Внутренняя ошибка сервера».
У кого-нибудь есть предложения, почему это может произойти? Возможно, Tomcat прерывает поток, так что try / finally игнорируется?