Обучение Java. Сервлеты

Отслеживание сервисных запросов


За слежением за сервисными запросами, включите код в ваш сервлет, который будет считать количество запущенных сервис методов. Этот код должен иметь доступные методы прибавления, вычитания и возвращать их значения. Потому как разные потоки будут обращаться к этим методам, и метод destroy будет ждать, пока их количество не станет равным нулю, доступ к этим методам должен быть синхронизированным. Объект lock с модификатором private это тот объект, с помощью которого производится синхронизация. Например:

public ShutdownExample extends HttpServlet { private int serviceCounter = 0; private Object lock = new Object(); ... //Методы доступа к стетчику

protected void enteringServiceMethod() { synchronized(lock) { serviceCounter++; } } protected void leavingServiceMethod() { synchronized(lock) { serviceCounter--; if (serviceCounter == 0 && isShuttingDown()) notifyAll(); } } protected int numServices() { synchronized(lock) { return serviceCounter; } } }

Метод service должен вызывать метод увеличения счетчика каждый раз, когда метод начинает свое выполнение и вызывать метод уменьшения значения счетчика каждый раз, когда он возвращает значение. Вот один из вариантов того, как мог бы подкласс класса HttpServlet переопределить метод service. Переопределенный метод должен вызывать метод super.service для того, чтобы сохранить оригинальную функциональность метода HttpServlet.service.

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { enteringServiceMethod(); try { super.service(req, resp); } finally { leavingServiceMethod(); } }



Содержание раздела