1
19
20 package com.liferay.portal.kernel.servlet;
21
22 import com.liferay.portal.kernel.log.Log;
23 import com.liferay.portal.kernel.log.LogFactoryUtil;
24 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
25 import com.liferay.portal.kernel.util.PortalInitable;
26 import com.liferay.portal.kernel.util.PortalInitableUtil;
27
28 import java.io.IOException;
29
30 import javax.servlet.ServletConfig;
31 import javax.servlet.ServletException;
32 import javax.servlet.http.HttpServlet;
33 import javax.servlet.http.HttpServletRequest;
34 import javax.servlet.http.HttpServletResponse;
35
36
42 public class PortalClassLoaderServlet
43 extends HttpServlet implements PortalInitable {
44
45 public void destroy() {
46 Thread currentThread = Thread.currentThread();
47
48 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
49
50 try {
51 currentThread.setContextClassLoader(
52 PortalClassLoaderUtil.getClassLoader());
53
54 _servlet.destroy();
55 }
56 finally {
57 currentThread.setContextClassLoader(contextClassLoader);
58 }
59 }
60
61 public void init(ServletConfig servletConfig) {
62 _servletConfig = servletConfig;
63
64 PortalInitableUtil.init(this);
65 }
66
67 public void portalInit() {
68 Thread currentThread = Thread.currentThread();
69
70 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
71
72 ClassLoader portalClassLoader = PortalClassLoaderUtil.getClassLoader();
73
74 try {
75 currentThread.setContextClassLoader(portalClassLoader);
76
77 String servletClass = _servletConfig.getInitParameter(
78 "servlet-class");
79
80 _servlet = (HttpServlet)portalClassLoader.loadClass(
81 servletClass).newInstance();
82
83 _servlet.init(_servletConfig);
84 }
85 catch (Exception e) {
86 _log.error(e, e);
87 }
88 finally {
89 currentThread.setContextClassLoader(contextClassLoader);
90 }
91 }
92
93 public void service(
94 HttpServletRequest request, HttpServletResponse response)
95 throws IOException, ServletException {
96
97 Thread currentThread = Thread.currentThread();
98
99 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
100
101 try {
102 currentThread.setContextClassLoader(
103 PortalClassLoaderUtil.getClassLoader());
104
105 _servlet.service(request, response);
106 }
107 finally {
108 currentThread.setContextClassLoader(contextClassLoader);
109 }
110 }
111
112 private static Log _log =
113 LogFactoryUtil.getLog(PortalClassLoaderServlet.class);
114
115 private HttpServlet _servlet;
116 private ServletConfig _servletConfig;
117
118 }