1
22
23 package com.liferay.portal.kernel.deploy.hot;
24
25 import com.liferay.portal.kernel.messaging.DestinationNames;
26 import com.liferay.portal.kernel.messaging.MessageBusUtil;
27 import com.liferay.portal.kernel.messaging.MessageListener;
28 import com.liferay.portal.kernel.servlet.ServletContextUtil;
29 import com.liferay.portal.kernel.util.WebKeys;
30
31 import java.lang.reflect.Field;
32
33 import java.util.ArrayList;
34 import java.util.List;
35 import java.util.Set;
36
37 import javax.servlet.ServletContext;
38
39
44 public abstract class BaseHotDeployListener implements HotDeployListener {
45
46 public void throwHotDeployException(
47 HotDeployEvent event, String msg, Throwable t)
48 throws HotDeployException {
49
50 ServletContext servletContext = event.getServletContext();
51
52 String servletContextName = servletContext.getServletContextName();
53
54 throw new HotDeployException(msg + servletContextName, t);
55 }
56
57 protected void registerClpMessageListeners(
58 ServletContext servletContext, ClassLoader portletClassLoader)
59 throws Exception {
60
61 List<MessageListener> clpMessageListeners =
62 (List<MessageListener>)servletContext.getAttribute(
63 WebKeys.CLP_MESSAGE_LISTENERS);
64
65 if (clpMessageListeners != null) {
66 return;
67 }
68
69 clpMessageListeners = new ArrayList<MessageListener>();
70
71 Set<String> classNames = ServletContextUtil.getClassNames(
72 servletContext);
73
74 for (String className : classNames) {
75 if (className.endsWith(".ClpMessageListener")) {
76 Class<?> clpMessageListenerClass = portletClassLoader.loadClass(
77 className);
78
79 MessageListener clpMessageListener =
80 (MessageListener)clpMessageListenerClass.newInstance();
81
82 Field servletContextNameField =
83 clpMessageListenerClass.getField(
84 "SERVLET_CONTEXT_NAME");
85
86 String clpServletContextName = servletContextNameField.get(
87 clpMessageListener).toString();
88
89 if (clpServletContextName.equals(
90 servletContext.getServletContextName())) {
91
92 continue;
93 }
94
95 clpMessageListeners.add(clpMessageListener);
96
97 MessageBusUtil.registerMessageListener(
98 DestinationNames.HOT_DEPLOY, clpMessageListener);
99 }
100 }
101
102 servletContext.setAttribute(
103 WebKeys.CLP_MESSAGE_LISTENERS, clpMessageListeners);
104 }
105
106 protected void unregisterClpMessageListeners(ServletContext servletContext)
107 throws Exception {
108
109 List<MessageListener> clpMessageListeners =
110 (List<MessageListener>)servletContext.getAttribute(
111 WebKeys.CLP_MESSAGE_LISTENERS);
112
113 if (clpMessageListeners != null) {
114 servletContext.removeAttribute(WebKeys.CLP_MESSAGE_LISTENERS);
115
116 for (MessageListener clpMessageListener : clpMessageListeners) {
117 MessageBusUtil.unregisterMessageListener(
118 DestinationNames.HOT_DEPLOY, clpMessageListener);
119 }
120 }
121 }
122
123 }