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 Thread currentThread = Thread.currentThread();
53
54 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
55
56 try {
57 currentThread.setContextClassLoader(
58 PortalClassLoaderUtil.getClassLoader());
59
60 _servletContextListener.contextDestroyed(event);
61 }
62 finally {
63 currentThread.setContextClassLoader(contextClassLoader);
64 }
65 }
66
67 public void contextInitialized(ServletContextEvent event) {
68 _event = event;
69
70 Thread currentThread = Thread.currentThread();
71
72 _portletClassLoader = currentThread.getContextClassLoader();
73
74 PortalInitableUtil.init(this);
75 }
76
77 public void portalInit() {
78 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
79
80 Thread currentThread = Thread.currentThread();
81
82 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
83
84 try {
85 currentThread.setContextClassLoader(
86 PortalClassLoaderUtil.getClassLoader());
87
88 _servletContextListener = getInstance();
89
90 _servletContextListener.contextInitialized(_event);
91 }
92 catch (Exception e) {
93 _log.error(e, e);
94 }
95 finally {
96 currentThread.setContextClassLoader(contextClassLoader);
97 }
98 }
99
100 protected abstract ServletContextListener getInstance() throws Exception;
101
102 private static Log _log =
103 LogFactoryUtil.getLog(PortalClassLoaderServletContextListener.class);
104
105 private ServletContextEvent _event;
106 private ServletContextListener _servletContextListener;
107 private ClassLoader _portletClassLoader;
108
109 }