1
22
23 package com.liferay.portal.spring.context;
24
25 import com.liferay.portal.bean.BeanLocatorImpl;
26 import com.liferay.portal.kernel.bean.BeanLocator;
27 import com.liferay.portal.kernel.bean.PortletBeanLocatorUtil;
28 import com.liferay.portal.kernel.portlet.PortletClassLoaderUtil;
29
30 import java.lang.reflect.Method;
31
32 import javax.servlet.ServletContext;
33 import javax.servlet.ServletContextEvent;
34
35 import org.apache.commons.logging.Log;
36 import org.apache.commons.logging.LogFactory;
37
38 import org.springframework.context.ApplicationContext;
39 import org.springframework.web.context.ContextLoader;
40 import org.springframework.web.context.ContextLoaderListener;
41 import org.springframework.web.context.support.WebApplicationContextUtils;
42
43
50 public class PortletContextLoaderListener extends ContextLoaderListener {
51
52 public void contextDestroyed(ServletContextEvent event) {
53 ClassLoader classLoader = PortletClassLoaderUtil.getClassLoader();
54
55 ServletContext servletContext = event.getServletContext();
56
57 try {
58 Class<?> beanLocatorUtilClass = Class.forName(
59 "com.liferay.util.bean.PortletBeanLocatorUtil", true,
60 classLoader);
61
62 Method setBeanLocatorMethod = beanLocatorUtilClass.getMethod(
63 "setBeanLocator", new Class[] {BeanLocator.class});
64
65 setBeanLocatorMethod.invoke(
66 beanLocatorUtilClass, new Object[] {null});
67
68 PortletBeanLocatorUtil.setBeanLocator(
69 servletContext.getServletContextName(), null);
70 }
71 catch (Exception e) {
72 _log.error(e, e);
73 }
74
75 super.contextDestroyed(event);
76 }
77
78 public void contextInitialized(ServletContextEvent event) {
79 super.contextInitialized(event);
80
81 ClassLoader classLoader = PortletClassLoaderUtil.getClassLoader();
82
83 ServletContext servletContext = event.getServletContext();
84
85 ApplicationContext applicationContext =
86 WebApplicationContextUtils.getWebApplicationContext(servletContext);
87
88 BeanLocator beanLocator = new BeanLocatorImpl(
89 classLoader, applicationContext);
90
91 try {
92 Class<?> beanLocatorUtilClass = Class.forName(
93 "com.liferay.util.bean.PortletBeanLocatorUtil", true,
94 classLoader);
95
96 Method setBeanLocatorMethod = beanLocatorUtilClass.getMethod(
97 "setBeanLocator", new Class[] {BeanLocator.class});
98
99 setBeanLocatorMethod.invoke(
100 beanLocatorUtilClass, new Object[] {beanLocator});
101
102 PortletBeanLocatorUtil.setBeanLocator(
103 servletContext.getServletContextName(), beanLocator);
104 }
105 catch (Exception e) {
106 _log.error(e, e);
107 }
108 }
109
110 protected ContextLoader createContextLoader() {
111 return new PortletContextLoader();
112 }
113
114 private static Log _log =
115 LogFactory.getLog(PortletContextLoaderListener.class);
116
117 }