1
14
15 package com.liferay.portlet;
16
17 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSender;
18 import com.liferay.portal.monitoring.RequestStatus;
19 import com.liferay.portal.monitoring.statistics.DataSampleThreadLocal;
20 import com.liferay.portal.monitoring.statistics.portlet.PortletRequestDataSample;
21 import com.liferay.portal.monitoring.statistics.portlet.PortletRequestType;
22 import com.liferay.portal.util.PropsValues;
23
24 import java.io.IOException;
25
26 import javax.portlet.ActionRequest;
27 import javax.portlet.ActionResponse;
28 import javax.portlet.EventRequest;
29 import javax.portlet.EventResponse;
30 import javax.portlet.Portlet;
31 import javax.portlet.PortletConfig;
32 import javax.portlet.PortletContext;
33 import javax.portlet.PortletException;
34 import javax.portlet.RenderRequest;
35 import javax.portlet.RenderResponse;
36 import javax.portlet.ResourceRequest;
37 import javax.portlet.ResourceResponse;
38
39
45 public class MonitoringPortlet implements InvokerPortlet {
46
47 public static boolean isMonitoringPortletActionRequest() {
48 return _monitoringPortletActionRequest;
49 }
50
51 public static boolean isMonitoringPortletEventRequest() {
52 return _monitoringPortletEventRequest;
53 }
54
55 public static boolean isMonitoringPortletRenderRequest() {
56 return _monitoringPortletRenderRequest;
57 }
58
59 public static boolean isMonitoringPortletResourceRequest() {
60 return _monitoringPortletResourceRequest;
61 }
62
63 public static void setMonitoringPortletActionRequest(
64 boolean monitoringPortletActionRequest) {
65
66 _monitoringPortletActionRequest = monitoringPortletActionRequest;
67 }
68
69 public static void setMonitoringPortletEventRequest(
70 boolean monitoringPortletEventRequest) {
71
72 _monitoringPortletEventRequest = monitoringPortletEventRequest;
73 }
74
75 public static void setMonitoringPortletRenderRequest(
76 boolean monitoringPortletRenderRequest) {
77
78 _monitoringPortletRenderRequest = monitoringPortletRenderRequest;
79 }
80
81 public static void setMonitoringPortletResourceRequest(
82 boolean monitoringPortletResourceRequest) {
83
84 _monitoringPortletResourceRequest = monitoringPortletResourceRequest;
85 }
86
87 public MonitoringPortlet() {
88 }
89
90 public MonitoringPortlet(
91 InvokerPortlet invokerPortlet,
92 SingleDestinationMessageSender singleDestinationMessageSender) {
93
94 _invokerPortlet = invokerPortlet;
95 _singleDestinationMessageSender = singleDestinationMessageSender;
96 }
97
98 public InvokerPortlet create(
99 com.liferay.portal.model.Portlet portletModel, Portlet portlet,
100 PortletConfig portletConfig, PortletContext portletContext,
101 boolean facesPortlet, boolean strutsPortlet,
102 boolean strutsBridgePortlet)
103 throws PortletException {
104
105 InvokerPortlet invokerPortlet = _invokerPortlet.create(
106 portletModel, portlet, portletContext);
107
108 MonitoringPortlet monitoringPortlet = new MonitoringPortlet(
109 invokerPortlet, _singleDestinationMessageSender);
110
111 monitoringPortlet.prepare(
112 portletModel, portlet, portletConfig, portletContext, facesPortlet,
113 strutsPortlet, strutsBridgePortlet);
114
115 return monitoringPortlet;
116 }
117
118 public InvokerPortlet create(
119 com.liferay.portal.model.Portlet portletModel, Portlet portlet,
120 PortletContext portletContext)
121 throws PortletException {
122
123 InvokerPortlet invokerPortlet = _invokerPortlet.create(
124 portletModel, portlet, portletContext);
125
126 MonitoringPortlet monitoringPortlet = new MonitoringPortlet(
127 invokerPortlet, _singleDestinationMessageSender);
128
129 monitoringPortlet.prepare(portletModel, portlet, portletContext);
130
131 return monitoringPortlet;
132 }
133
134 public void destroy() {
135 _invokerPortlet.destroy();
136 }
137
138 public Integer getExpCache() {
139 return _invokerPortlet.getExpCache();
140 }
141
142 public Portlet getPortlet() {
143 return _invokerPortlet.getPortlet();
144 }
145
146 public ClassLoader getPortletClassLoader() {
147 return _invokerPortlet.getPortletClassLoader();
148 }
149
150 public PortletConfig getPortletConfig() {
151 return _invokerPortlet.getPortletConfig();
152 }
153
154 public PortletContext getPortletContext() {
155 return _invokerPortlet.getPortletContext();
156 }
157
158 public Portlet getPortletInstance() {
159 return _invokerPortlet.getPortletInstance();
160 }
161
162 public void init(PortletConfig portletConfig) throws PortletException {
163 _invokerPortlet.init(portletConfig);
164 }
165
166 public boolean isDestroyable() {
167 return _invokerPortlet.isDestroyable();
168 }
169
170 public boolean isFacesPortlet() {
171 return _invokerPortlet.isFacesPortlet();
172 }
173
174 public boolean isStrutsBridgePortlet() {
175 return _invokerPortlet.isStrutsBridgePortlet();
176 }
177
178 public boolean isStrutsPortlet() {
179 return _invokerPortlet.isStrutsPortlet();
180 }
181
182 public void prepare(
183 com.liferay.portal.model.Portlet portletModel, Portlet portlet,
184 PortletConfig portletConfig, PortletContext portletContext,
185 boolean facesPortlet, boolean strutsPortlet,
186 boolean strutsBridgePortlet)
187 throws PortletException {
188
189 _invokerPortlet.prepare(
190 portletModel, portlet, portletConfig, portletContext, facesPortlet,
191 strutsPortlet, strutsBridgePortlet);
192 }
193
194 public void prepare(
195 com.liferay.portal.model.Portlet portletModel, Portlet portlet,
196 PortletContext portletContext)
197 throws PortletException {
198
199 _invokerPortlet.prepare(portletModel, portlet, portletContext);
200 }
201
202 public void processAction(
203 ActionRequest actionRequest, ActionResponse actionResponse)
204 throws IOException, PortletException {
205
206 PortletRequestDataSample portletRequestDataSample = null;
207
208 try {
209 if (_monitoringPortletActionRequest) {
210 portletRequestDataSample = new PortletRequestDataSample(
211 PortletRequestType.ACTION, actionRequest, actionResponse);
212
213 portletRequestDataSample.prepare();
214 }
215
216 _invokerPortlet.processAction(actionRequest, actionResponse);
217
218 if (_monitoringPortletActionRequest) {
219 portletRequestDataSample.capture(RequestStatus.SUCCESS);
220 }
221 }
222 catch (Exception e) {
223 _processException(
224 _monitoringPortletActionRequest, portletRequestDataSample, e);
225 }
226 finally {
227 if (portletRequestDataSample != null) {
228 _singleDestinationMessageSender.send(portletRequestDataSample);
229
230 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
231 }
232 }
233 }
234
235 public void processEvent(
236 EventRequest eventRequest, EventResponse eventResponse)
237 throws IOException, PortletException {
238
239 PortletRequestDataSample portletRequestDataSample = null;
240
241 try {
242 if (_monitoringPortletEventRequest) {
243 portletRequestDataSample = new PortletRequestDataSample(
244 PortletRequestType.EVENT, eventRequest, eventResponse);
245
246 portletRequestDataSample.prepare();
247 }
248
249 _invokerPortlet.processEvent(eventRequest, eventResponse);
250
251 if (_monitoringPortletEventRequest) {
252 portletRequestDataSample.capture(RequestStatus.SUCCESS);
253 }
254 }
255 catch (Exception e) {
256 _processException(
257 _monitoringPortletEventRequest, portletRequestDataSample, e);
258 }
259 finally {
260 if (portletRequestDataSample != null) {
261 _singleDestinationMessageSender.send(portletRequestDataSample);
262
263 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
264 }
265 }
266 }
267
268 public void render(
269 RenderRequest renderRequest, RenderResponse renderResponse)
270 throws IOException, PortletException {
271
272 PortletRequestDataSample portletRequestDataSample = null;
273
274 try {
275 if (_monitoringPortletRenderRequest) {
276 portletRequestDataSample = new PortletRequestDataSample(
277 PortletRequestType.RENDER, renderRequest, renderResponse);
278
279 portletRequestDataSample.prepare();
280 }
281
282 _invokerPortlet.render(renderRequest, renderResponse);
283
284 if (_monitoringPortletRenderRequest) {
285 portletRequestDataSample.capture(RequestStatus.SUCCESS);
286 }
287 }
288 catch (Exception e) {
289 _processException(
290 _monitoringPortletRenderRequest, portletRequestDataSample, e);
291 }
292 finally {
293 if (portletRequestDataSample != null) {
294 _singleDestinationMessageSender.send(portletRequestDataSample);
295
296 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
297 }
298 }
299 }
300
301 public void serveResource(
302 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
303 throws IOException, PortletException {
304
305 PortletRequestDataSample portletRequestDataSample = null;
306
307 try {
308 if (_monitoringPortletResourceRequest) {
309 portletRequestDataSample = new PortletRequestDataSample(
310 PortletRequestType.RESOURCE, resourceRequest,
311 resourceResponse);
312
313 portletRequestDataSample.prepare();
314 }
315
316 _invokerPortlet.serveResource(resourceRequest, resourceResponse);
317
318 if (_monitoringPortletResourceRequest) {
319 portletRequestDataSample.capture(RequestStatus.SUCCESS);
320 }
321 }
322 catch (Exception e) {
323 _processException(
324 _monitoringPortletResourceRequest, portletRequestDataSample, e);
325 }
326 finally {
327 if (portletRequestDataSample != null) {
328 _singleDestinationMessageSender.send(portletRequestDataSample);
329
330 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
331 }
332 }
333 }
334
335 public void setInvokerPortlet(InvokerPortlet invokerPortlet) {
336 _invokerPortlet = invokerPortlet;
337 }
338
339 public void setPortletFilters() throws PortletException {
340 _invokerPortlet.setPortletFilters();
341 }
342
343 public void setSingleDestinationMessageSender(
344 SingleDestinationMessageSender singleDestinationMessageSender) {
345
346 _singleDestinationMessageSender = singleDestinationMessageSender;
347 }
348
349 private void _processException(
350 boolean monitoringPortletRequest,
351 PortletRequestDataSample portletRequestDataSample, Exception e)
352 throws IOException, PortletException {
353
354 if (monitoringPortletRequest) {
355 portletRequestDataSample.capture(RequestStatus.ERROR);
356 }
357
358 if (e instanceof IOException) {
359 throw (IOException)e;
360 }
361 else if (e instanceof PortletException) {
362 throw (PortletException)e;
363 }
364 else {
365 throw new PortletException("Unable to process portlet", e);
366 }
367 }
368
369 private static boolean _monitoringPortletActionRequest =
370 PropsValues.MONITORING_PORTLET_ACTION_REQUEST;
371 private static boolean _monitoringPortletEventRequest =
372 PropsValues.MONITORING_PORTLET_EVENT_REQUEST;
373 private static boolean _monitoringPortletRenderRequest =
374 PropsValues.MONITORING_PORTLET_RENDER_REQUEST;
375 private static boolean _monitoringPortletResourceRequest =
376 PropsValues.MONITORING_PORTLET_RESOURCE_REQUEST;
377
378 private InvokerPortlet _invokerPortlet;
379 private SingleDestinationMessageSender _singleDestinationMessageSender;
380
381 }