На stop
или undeploy/redeploy
из следующей ошибки Spring framework 3.0.5
на основе веб-приложений регистрируется в Tomcat7's catalina.out
:Почему весна Контекст не изящно закрыт?
SEVERE: The web application [/nomination##1.0-qa] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [[email protected]]) and a value of type [org.springframework.security.core.context.SecurityContextImpl] (value [[email protected]ffffff: Null authentication]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
изначально я думал о реализации ServletContextListener
и close()
контекст там. Тем не менее, нашел ContextLoaderListener
, который реализует ServletContextListener
настроенное как и в web.xml
:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
От Javadocs:
**contextDestroyed**
public void contextDestroyed(ServletContextEvent event)
Close the root web application context.
Specified by:
contextDestroyed in interface ServletContextListener
Итак, мой вопрос, почему ThreadLocal не чисто освобожденный ContextLoaderListener.contextDestroyed()
?
Мы сталкиваемся с ошибками PermGen
, и при исследовании находим это. В нескольких местах есть код, аналогичный следующему:
ApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(se.getSession().getServletContext());
MyBeanClass x = context.getBean(
"myBean", MyBeanClass.class);
x.someMethod();
Мне интересно, останавливается ли приведенный выше фрагмент в чистоте? Любые указатели будут очень благодарны.
У меня возникла эта ошибка при нарушении моего корневого контекста приложения на два. Вместо одного корневого контекста с двумя контекстами дочерних сервлетов теперь у меня есть корневой контекст для начальной загрузки (с теми же двумя контекстами дочернего сервлета), и я программно создаю дочерний контекст позже. Конфигурация безопасности продолжает оставаться в контексте корневого приложения в этом проекте, но теперь появились предупреждения об утечке. Ясно, что это связано в моем случае с разбиением корневого контекста приложения на два. –
@Mihai Danila У меня есть только один контекст приложения. – kmansoor
Как настраивается контекст безопасности? – NimChimpsky