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