blob: 018bd6eb993bb1f3c0dda7c097a7eaae8d485594 [file] [log] [blame]
package de.ids_mannheim.korap.config;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;
import jakarta.servlet.ServletContextEvent;
/**
* A hack to inject the application context generated by
* SpringJUnit4ClassRunner in the test suite.
*
* @author margaretha
*
*/
public class StaticContextLoaderListener extends ContextLoaderListener {
public static WebApplicationContext applicationContext;
private ClassLoader contextClassLoader;
public StaticContextLoaderListener () {
super(applicationContext);
}
@Override
public void contextInitialized (ServletContextEvent event) {
contextClassLoader = Thread.currentThread().getContextClassLoader();
super.contextInitialized(event);
}
@Override
public void contextDestroyed (ServletContextEvent event) {
// Perform the destruction with the same contextual ClassLoader that was present
// during initialization.
// This a workaround for a bug in org.glassfish.grizzly.servlet.WebappContext
// that causes a memory leak in org.springframework.web.context.ContextLoader.
// This logic should be moved to WebappContext.contextDestroyed(). Until this
// is fixed in Grizzly; This is a good solution.
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(contextClassLoader);
super.contextDestroyed(event);
Thread.currentThread().setContextClassLoader(loader);
}
}