001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
020 import com.liferay.portal.kernel.util.PortalInitable;
021 import com.liferay.portal.kernel.util.PortalInitableUtil;
022
023 import java.io.IOException;
024
025 import javax.servlet.ServletConfig;
026 import javax.servlet.ServletException;
027 import javax.servlet.http.HttpServlet;
028 import javax.servlet.http.HttpServletRequest;
029 import javax.servlet.http.HttpServletResponse;
030
031
034 public class PortalClassLoaderServlet
035 extends HttpServlet implements PortalInitable {
036
037 public void destroy() {
038 Thread currentThread = Thread.currentThread();
039
040 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
041
042 try {
043 currentThread.setContextClassLoader(
044 PortalClassLoaderUtil.getClassLoader());
045
046 _servlet.destroy();
047 }
048 finally {
049 currentThread.setContextClassLoader(contextClassLoader);
050 }
051 }
052
053 public void init(ServletConfig servletConfig) {
054 _servletConfig = servletConfig;
055
056 PortalInitableUtil.init(this);
057 }
058
059 public void portalInit() {
060 Thread currentThread = Thread.currentThread();
061
062 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
063
064 ClassLoader portalClassLoader = PortalClassLoaderUtil.getClassLoader();
065
066 try {
067 currentThread.setContextClassLoader(portalClassLoader);
068
069 String servletClass = _servletConfig.getInitParameter(
070 "servlet-class");
071
072 _servlet = (HttpServlet)portalClassLoader.loadClass(
073 servletClass).newInstance();
074
075 _servlet.init(_servletConfig);
076 }
077 catch (Exception e) {
078 _log.error(e, e);
079 }
080 finally {
081 currentThread.setContextClassLoader(contextClassLoader);
082 }
083 }
084
085 public void service(
086 HttpServletRequest request, HttpServletResponse response)
087 throws IOException, ServletException {
088
089 Thread currentThread = Thread.currentThread();
090
091 ClassLoader contextClassLoader = currentThread.getContextClassLoader();
092
093 try {
094 currentThread.setContextClassLoader(
095 PortalClassLoaderUtil.getClassLoader());
096
097 _servlet.service(request, response);
098 }
099 finally {
100 currentThread.setContextClassLoader(contextClassLoader);
101 }
102 }
103
104 private static Log _log = LogFactoryUtil.getLog(
105 PortalClassLoaderServlet.class);
106
107 private HttpServlet _servlet;
108 private ServletConfig _servletConfig;
109
110 }