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