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.BasePortalLifecycle;
21 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
22
23 import javax.servlet.ServletContext;
24 import javax.servlet.ServletContextEvent;
25 import javax.servlet.ServletContextListener;
26
27
34 public abstract class PortalClassLoaderServletContextListener
35 extends BasePortalLifecycle implements ServletContextListener {
36
37 public PortalClassLoaderServletContextListener() {
38 }
39
40 public void contextDestroyed(ServletContextEvent servletContextEvent) {
41 portalDestroy();
42 }
43
44 public void contextInitialized(ServletContextEvent servletContextEvent) {
45 _servletContextEvent = servletContextEvent;
46
47 ServletContext servletContext = servletContextEvent.getServletContext();
48
49 _servletContextName = servletContext.getServletContextName();
50
51 Thread currentThread = Thread.currentThread();
52
53 _portletClassLoader = currentThread.getContextClassLoader();
54
55 registerPortalLifecycle();
56 }
57
58 protected void doPortalDestroy() {
59 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
60 PortletClassLoaderUtil.setServletContextName(_servletContextName);
61
62 Thread currentThread = Thread.currentThread();
63
64 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
65
66 try {
67 currentThread.setContextClassLoader(
68 PortalClassLoaderUtil.getClassLoader());
69
70 _servletContextListener.contextDestroyed(_servletContextEvent);
71 }
72 finally {
73 currentThread.setContextClassLoader(contextClassLoader);
74
75 PortletClassLoaderUtil.setClassLoader(null);
76 PortletClassLoaderUtil.setServletContextName(null);
77 }
78 }
79
80 protected void doPortalInit() {
81 PortletClassLoaderUtil.setClassLoader(_portletClassLoader);
82 PortletClassLoaderUtil.setServletContextName(_servletContextName);
83
84 Thread currentThread = Thread.currentThread();
85
86 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
87
88 try {
89 currentThread.setContextClassLoader(
90 PortalClassLoaderUtil.getClassLoader());
91
92 _servletContextListener = getInstance();
93
94 _servletContextListener.contextInitialized(_servletContextEvent);
95 }
96 catch (Exception e) {
97 _log.error(e, e);
98 }
99 finally {
100 currentThread.setContextClassLoader(contextClassLoader);
101 }
102 }
103
104 protected abstract ServletContextListener getInstance() throws Exception;
105
106 private static Log _log = LogFactoryUtil.getLog(
107 PortalClassLoaderServletContextListener.class);
108
109 private ServletContextEvent _servletContextEvent;
110 private ServletContextListener _servletContextListener;
111 private ClassLoader _portletClassLoader;
112 private String _servletContextName;
113
114 }