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