Оказывается, затмение - главная проблема здесь.
Я объясню:
Я обернул наше веб-приложение в метод main () для проверки производительности. Мы используем много стороннего кода, а именно Apache commons-pool.
Оказывается, у нас было несколько версий фляги, распределенных по проектам (проекты затмения). В моем приложении, использующем эти проекты, был commons-pool-1.3, в другом проекте - commons-pool-1.2.
При загрузке с использованием контейнера сервлета (Tomcat6) загрузчик классов веб-приложений имел первый приоритет, поэтому он всегда загружал версию веб-приложения. Когда я запустил приложение, используя main () eclipse, в нем не очень разумное поведение экспортировал зависимые проекты jar-файлов в -classpath ДО тех, что в текущем проекте.
Конфликт произошел между двумя версиями commons-pool, что вызвало неопределенное поведение - В случае заимствования объекта ИНОГДА решили создать новый объект. Я не заглядывал внутрь кода реализации, я предполагаю, что это как-то связано со статической картой, удерживаемой GenericKeyedObjectPool (проблемный класс). Поскольку новый экземпляр был создан, он действительно содержит нулевую ссылку на упомянутый глобальный объект.
Решение моей удачи было довольно простым, commons-pool используется только моим веб-приложением, поэтому я мог удалить его из всех проектов, на которые есть ссылки, в противном случае, я думаю, я бы просто попытался обновить их все до одной версии. Если бы я не мог сделать то же самое, я действительно не знаю, что бы я сделал. Это очень странное значение затмения по умолчанию.
Спасибо за чтение и помощь.
// пс. 3 дня. Это время, которое я трачу на понимание, что, черт возьми, я сделал неправильно в своем коде замены сервлета. Оказывается, я даже не проблема. : P