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