Попробуйте:
- Создайте Фильтр сервлета .
- Заставить его реализовать DynamicMBean .Зарегистрируйте компонент в методе фильтра init (и отмените его регистрацию в методе destroy )
- Определите синхронизированный WeakHashMap field.
- В методе фильтра doFilter захватите URI запроса перед FilterChain s doFilter метод вызывается.Вставьте поток и URI запроса в WeakHashMap.
- Вызовите цепочку.
- В блоке finally вставьте текущий поток и некоторую произвольную константу, например NO REQUEST , вWeakHashMap.
- Реализуйте DynamicMBean, чтобы MBeanInfo представлял один MBeanAttributeInfo на поток в WeakHashMap.Сделайте имена атрибутов именами потоков и введите URI (или String ).
- Реализуйте DynamicMBean, чтобы getAttribute метод возвращает URI потока, который соответствует запрошенному имени атрибута.
- Настройте фильтр так, чтобы он вызывался для всех диапазонов URI, которые вы хотите отслеживать.
Когда выпросмотрев атрибуты MBean, вы увидите URI (или NO REQUEST ) для каждого потока, который все еще активен в JVM, обработавшей хотя бы один запрос.Когда поток завершается (и, возможно, после нескольких циклов GC), запись WeakHashMap будет удалена.
Теперь, когда я ее читаю, это выглядит немного утомительно, но это должно быть довольно просто.
// Николай