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