1
22
23 package com.liferay.portal.kernel.servlet;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.portlet.PortletClassLoaderUtil;
28 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
29 import com.liferay.portal.kernel.util.PortalInitable;
30 import com.liferay.portal.kernel.util.PortalInitableUtil;
31
32 import javax.servlet.ServletContextEvent;
33 import javax.servlet.ServletContextListener;
34
35
43 public abstract class PortalClassLoaderServletContextListener
44 implements PortalInitable, ServletContextListener {
45
46 public PortalClassLoaderServletContextListener() {
47 }
48
49 public void contextDestroyed(ServletContextEvent event) {
50 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
51
52 ClassLoader contextClassLoader =
53 Thread.currentThread().getContextClassLoader();
54
55 try {
56 Thread.currentThread().setContextClassLoader(
57 PortalClassLoaderUtil.getClassLoader());
58
59 _servletContextListener.contextDestroyed(event);
60 }
61 finally {
62 Thread.currentThread().setContextClassLoader(contextClassLoader);
63 }
64 }
65
66 public void contextInitialized(ServletContextEvent event) {
67 _event = event;
68 _portletClassLoader = Thread.currentThread().getContextClassLoader();
69
70 PortalInitableUtil.init(this);
71 }
72
73 public void portalInit() {
74 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
75
76 ClassLoader contextClassLoader =
77 Thread.currentThread().getContextClassLoader();
78
79 try {
80 Thread.currentThread().setContextClassLoader(
81 PortalClassLoaderUtil.getClassLoader());
82
83 _servletContextListener = getInstance();
84
85 _servletContextListener.contextInitialized(_event);
86 }
87 catch (Exception e) {
88 _log.error(e, e);
89 }
90 finally {
91 Thread.currentThread().setContextClassLoader(
92 contextClassLoader);
93 }
94 }
95
96 protected abstract ServletContextListener getInstance() throws Exception;
97
98 private static Log _log =
99 LogFactoryUtil.getLog(PortalClassLoaderServletContextListener.class);
100
101 private ServletContextEvent _event;
102 private ServletContextListener _servletContextListener;
103 private ClassLoader _portletClassLoader;
104
105 }