001
014
015 package com.liferay.portal.kernel.deploy.hot;
016
017 import com.liferay.portal.kernel.messaging.DestinationNames;
018 import com.liferay.portal.kernel.messaging.MessageBusUtil;
019 import com.liferay.portal.kernel.messaging.MessageListener;
020 import com.liferay.portal.kernel.servlet.ServletContextUtil;
021 import com.liferay.portal.kernel.util.ProxyFactory;
022 import com.liferay.portal.kernel.util.WebKeys;
023
024 import java.lang.reflect.Field;
025
026 import java.util.ArrayList;
027 import java.util.List;
028 import java.util.Set;
029
030 import javax.servlet.ServletContext;
031
032
035 public abstract class BaseHotDeployListener implements HotDeployListener {
036
037 public void throwHotDeployException(
038 HotDeployEvent event, String msg, Throwable t)
039 throws HotDeployException {
040
041 ServletContext servletContext = event.getServletContext();
042
043 String servletContextName = servletContext.getServletContextName();
044
045 throw new HotDeployException(msg + servletContextName, t);
046 }
047
048 protected Object newInstance(
049 ClassLoader portletClassLoader, Class<?> interfaceClass,
050 String implClassName)
051 throws Exception {
052
053 return ProxyFactory.newInstance(
054 portletClassLoader, interfaceClass, implClassName);
055 }
056
057 protected Object newInstance(
058 ClassLoader portletClassLoader, Class<?>[] interfaceClasses,
059 String implClassName)
060 throws Exception {
061
062 return ProxyFactory.newInstance(
063 portletClassLoader, interfaceClasses, implClassName);
064 }
065
066 protected void registerClpMessageListeners(
067 ServletContext servletContext, ClassLoader portletClassLoader)
068 throws Exception {
069
070 List<MessageListener> clpMessageListeners =
071 (List<MessageListener>)servletContext.getAttribute(
072 WebKeys.CLP_MESSAGE_LISTENERS);
073
074 if (clpMessageListeners != null) {
075 return;
076 }
077
078 clpMessageListeners = new ArrayList<MessageListener>();
079
080 Set<String> classNames = ServletContextUtil.getClassNames(
081 servletContext);
082
083 for (String className : classNames) {
084 if (className.endsWith(".ClpMessageListener")) {
085 Class<?> clpMessageListenerClass = portletClassLoader.loadClass(
086 className);
087
088 MessageListener clpMessageListener =
089 (MessageListener)clpMessageListenerClass.newInstance();
090
091 Field servletContextNameField =
092 clpMessageListenerClass.getField(
093 "SERVLET_CONTEXT_NAME");
094
095 String clpServletContextName = servletContextNameField.get(
096 clpMessageListener).toString();
097
098 if (clpServletContextName.equals(
099 servletContext.getServletContextName())) {
100
101 continue;
102 }
103
104 clpMessageListeners.add(clpMessageListener);
105
106 MessageBusUtil.registerMessageListener(
107 DestinationNames.HOT_DEPLOY, clpMessageListener);
108 }
109 }
110
111 servletContext.setAttribute(
112 WebKeys.CLP_MESSAGE_LISTENERS, clpMessageListeners);
113 }
114
115 protected void unregisterClpMessageListeners(ServletContext servletContext)
116 throws Exception {
117
118 List<MessageListener> clpMessageListeners =
119 (List<MessageListener>)servletContext.getAttribute(
120 WebKeys.CLP_MESSAGE_LISTENERS);
121
122 if (clpMessageListeners != null) {
123 servletContext.removeAttribute(WebKeys.CLP_MESSAGE_LISTENERS);
124
125 for (MessageListener clpMessageListener : clpMessageListeners) {
126 MessageBusUtil.unregisterMessageListener(
127 DestinationNames.HOT_DEPLOY, clpMessageListener);
128 }
129 }
130 }
131
132 }