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 checkAuthToken, 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,
113 checkAuthToken, facesPortlet, 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 isCheckAuthToken() {
167 return _invokerPortlet.isCheckAuthToken();
168 }
169
170 public boolean isDestroyable() {
171 return _invokerPortlet.isDestroyable();
172 }
173
174 public boolean isFacesPortlet() {
175 return _invokerPortlet.isFacesPortlet();
176 }
177
178 public boolean isStrutsBridgePortlet() {
179 return _invokerPortlet.isStrutsBridgePortlet();
180 }
181
182 public boolean isStrutsPortlet() {
183 return _invokerPortlet.isStrutsPortlet();
184 }
185
186 public void prepare(
187 com.liferay.portal.model.Portlet portletModel, Portlet portlet,
188 PortletConfig portletConfig, PortletContext portletContext,
189 boolean checkAuthToken, boolean facesPortlet, boolean strutsPortlet,
190 boolean strutsBridgePortlet)
191 throws PortletException {
192
193 _invokerPortlet.prepare(
194 portletModel, portlet, portletConfig, portletContext,
195 checkAuthToken, facesPortlet, strutsPortlet, strutsBridgePortlet);
196 }
197
198 public void prepare(
199 com.liferay.portal.model.Portlet portletModel, Portlet portlet,
200 PortletContext portletContext)
201 throws PortletException {
202
203 _invokerPortlet.prepare(portletModel, portlet, portletContext);
204 }
205
206 public void processAction(
207 ActionRequest actionRequest, ActionResponse actionResponse)
208 throws IOException, PortletException {
209
210 PortletRequestDataSample portletRequestDataSample = null;
211
212 try {
213 if (_monitoringPortletActionRequest) {
214 portletRequestDataSample = new PortletRequestDataSample(
215 PortletRequestType.ACTION, actionRequest, actionResponse);
216
217 portletRequestDataSample.prepare();
218 }
219
220 _invokerPortlet.processAction(actionRequest, actionResponse);
221
222 if (_monitoringPortletActionRequest) {
223 portletRequestDataSample.capture(RequestStatus.SUCCESS);
224 }
225 }
226 catch (Exception e) {
227 _processException(
228 _monitoringPortletActionRequest, portletRequestDataSample, e);
229 }
230 finally {
231 if (portletRequestDataSample != null) {
232 _singleDestinationMessageSender.send(portletRequestDataSample);
233
234 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
235 }
236 }
237 }
238
239 public void processEvent(
240 EventRequest eventRequest, EventResponse eventResponse)
241 throws IOException, PortletException {
242
243 PortletRequestDataSample portletRequestDataSample = null;
244
245 try {
246 if (_monitoringPortletEventRequest) {
247 portletRequestDataSample = new PortletRequestDataSample(
248 PortletRequestType.EVENT, eventRequest, eventResponse);
249
250 portletRequestDataSample.prepare();
251 }
252
253 _invokerPortlet.processEvent(eventRequest, eventResponse);
254
255 if (_monitoringPortletEventRequest) {
256 portletRequestDataSample.capture(RequestStatus.SUCCESS);
257 }
258 }
259 catch (Exception e) {
260 _processException(
261 _monitoringPortletEventRequest, portletRequestDataSample, e);
262 }
263 finally {
264 if (portletRequestDataSample != null) {
265 _singleDestinationMessageSender.send(portletRequestDataSample);
266
267 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
268 }
269 }
270 }
271
272 public void render(
273 RenderRequest renderRequest, RenderResponse renderResponse)
274 throws IOException, PortletException {
275
276 PortletRequestDataSample portletRequestDataSample = null;
277
278 try {
279 if (_monitoringPortletRenderRequest) {
280 portletRequestDataSample = new PortletRequestDataSample(
281 PortletRequestType.RENDER, renderRequest, renderResponse);
282
283 portletRequestDataSample.prepare();
284 }
285
286 _invokerPortlet.render(renderRequest, renderResponse);
287
288 if (_monitoringPortletRenderRequest) {
289 portletRequestDataSample.capture(RequestStatus.SUCCESS);
290 }
291 }
292 catch (Exception e) {
293 _processException(
294 _monitoringPortletRenderRequest, portletRequestDataSample, e);
295 }
296 finally {
297 if (portletRequestDataSample != null) {
298 _singleDestinationMessageSender.send(portletRequestDataSample);
299
300 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
301 }
302 }
303 }
304
305 public void serveResource(
306 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
307 throws IOException, PortletException {
308
309 PortletRequestDataSample portletRequestDataSample = null;
310
311 try {
312 if (_monitoringPortletResourceRequest) {
313 portletRequestDataSample = new PortletRequestDataSample(
314 PortletRequestType.RESOURCE, resourceRequest,
315 resourceResponse);
316
317 portletRequestDataSample.prepare();
318 }
319
320 _invokerPortlet.serveResource(resourceRequest, resourceResponse);
321
322 if (_monitoringPortletResourceRequest) {
323 portletRequestDataSample.capture(RequestStatus.SUCCESS);
324 }
325 }
326 catch (Exception e) {
327 _processException(
328 _monitoringPortletResourceRequest, portletRequestDataSample, e);
329 }
330 finally {
331 if (portletRequestDataSample != null) {
332 _singleDestinationMessageSender.send(portletRequestDataSample);
333
334 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
335 }
336 }
337 }
338
339 public void setInvokerPortlet(InvokerPortlet invokerPortlet) {
340 _invokerPortlet = invokerPortlet;
341 }
342
343 public void setPortletFilters() throws PortletException {
344 _invokerPortlet.setPortletFilters();
345 }
346
347 public void setSingleDestinationMessageSender(
348 SingleDestinationMessageSender singleDestinationMessageSender) {
349
350 _singleDestinationMessageSender = singleDestinationMessageSender;
351 }
352
353 private void _processException(
354 boolean monitoringPortletRequest,
355 PortletRequestDataSample portletRequestDataSample, Exception e)
356 throws IOException, PortletException {
357
358 if (monitoringPortletRequest) {
359 portletRequestDataSample.capture(RequestStatus.ERROR);
360 }
361
362 if (e instanceof IOException) {
363 throw (IOException)e;
364 }
365 else if (e instanceof PortletException) {
366 throw (PortletException)e;
367 }
368 else {
369 throw new PortletException("Unable to process portlet", e);
370 }
371 }
372
373 private static boolean _monitoringPortletActionRequest =
374 PropsValues.MONITORING_PORTLET_ACTION_REQUEST;
375 private static boolean _monitoringPortletEventRequest =
376 PropsValues.MONITORING_PORTLET_EVENT_REQUEST;
377 private static boolean _monitoringPortletRenderRequest =
378 PropsValues.MONITORING_PORTLET_RENDER_REQUEST;
379 private static boolean _monitoringPortletResourceRequest =
380 PropsValues.MONITORING_PORTLET_RESOURCE_REQUEST;
381
382 private InvokerPortlet _invokerPortlet;
383 private SingleDestinationMessageSender _singleDestinationMessageSender;
384
385 }