001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.portlet.PortletClassLoaderUtil;
020 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
021 import com.liferay.portal.kernel.util.PortalInitable;
022 import com.liferay.portal.kernel.util.PortalInitableUtil;
023
024 import javax.servlet.ServletContext;
025 import javax.servlet.ServletContextEvent;
026 import javax.servlet.ServletContextListener;
027
028
032 public abstract class PortalClassLoaderServletContextListener
033 implements PortalInitable, ServletContextListener {
034
035 public PortalClassLoaderServletContextListener() {
036 }
037
038 public void contextDestroyed(ServletContextEvent event) {
039 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
040 PortletClassLoaderUtil.setServletContextName(_servletContextName);
041
042 Thread currentThread = Thread.currentThread();
043
044 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
045
046 try {
047 currentThread.setContextClassLoader(
048 PortalClassLoaderUtil.getClassLoader());
049
050 _servletContextListener.contextDestroyed(event);
051 }
052 finally {
053 currentThread.setContextClassLoader(contextClassLoader);
054 }
055 }
056
057 public void contextInitialized(ServletContextEvent event) {
058 _event = event;
059
060 ServletContext servletContext = event.getServletContext();
061
062 _servletContextName = servletContext.getServletContextName();
063
064 Thread currentThread = Thread.currentThread();
065
066 _portletClassLoader = currentThread.getContextClassLoader();
067
068 PortalInitableUtil.init(this);
069 }
070
071 public void portalInit() {
072 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
073 PortletClassLoaderUtil.setServletContextName(_servletContextName);
074
075 Thread currentThread = Thread.currentThread();
076
077 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
078
079 try {
080 currentThread.setContextClassLoader(
081 PortalClassLoaderUtil.getClassLoader());
082
083 _servletContextListener = getInstance();
084
085 _servletContextListener.contextInitialized(_event);
086 }
087 catch (Exception e) {
088 _log.error(e, e);
089 }
090 finally {
091 currentThread.setContextClassLoader(contextClassLoader);
092 }
093 }
094
095 protected abstract ServletContextListener getInstance() throws Exception;
096
097 private static Log _log = LogFactoryUtil.getLog(
098 PortalClassLoaderServletContextListener.class);
099
100 private ServletContextEvent _event;
101 private ServletContextListener _servletContextListener;
102 private ClassLoader _portletClassLoader;
103 private String _servletContextName;
104
105 }