Уничтожение сервлета
Метод destroy позволяет классу the HttpServlet уничтожить сервлет и индифицировать уничтожение. Чтобы уничтожить любые связанные с севлетом ресурсы, переопределите метод destroy. Метод destroy должен отменить любой инициализирующий процесс и синхронизировать установившийся статус с текущим статусом в памяти.
Следующий пример показывает метод destroy, который сопровождает псевдокод метода init из предыдущего урока:
public class DBServlet ... { Connection connection = null;
... // Метод init
public void destroy() { // Закрываем соединение и подготавливаем объект для сборщика мусора
connection.close(); connection = null; } }
Сервер вызывает метод destroy после того, как завершатся все вызовы сервиса, или пройдет определенный промежуток времени устанавливаемый сервером, что быстрее произойдет. Если Ваш сервлет производит какую-либо "долгоиграющую" операцию, метод service может продолжать выполняться в тот момент, когда сервер вызовет метод destroy. Вы ответственны за то, чтоб быть уверенным что, эти процессы должны быть завершены. Следующий урок
покажет Вам как.
Метод destroy описанный выше в примере предполагает, что все клиентские транзакции были завешены на тот момент, когда был вызван метод destroy, потому как сервлет не использовал "долгоиграющих" операций.
Сервлет выполняется до тех пор, пока сервер не уничтожит его, например, по запросу системного администратора. Когда сервер уничтожает сервлет, сервер запускает метод сервлета destroy. Этот метод запускается один раз; сервер не будет запускать метод destroy опять, до тех пор, пока сервер не перезагрузит этот сервлет и не проинициализирует.
В момент, когда сервер вызывает метод destroy, другой поток может принимать запрос. Урок Управление сервисными потоками во время выключения сервлета расскажет Вам, как произвести "чистое" выключение в случаях, когда могут выполняться "долгоиграющие" потоки запросов.