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