001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSender;
018 import com.liferay.portal.kernel.monitoring.RequestStatus;
019 import com.liferay.portal.kernel.monitoring.statistics.DataSampleThreadLocal;
020 import com.liferay.portal.kernel.portlet.LiferayPortletConfig;
021 import com.liferay.portal.monitoring.statistics.portlet.PortletRequestDataSample;
022 import com.liferay.portal.monitoring.statistics.portlet.PortletRequestType;
023 import com.liferay.portal.util.PropsValues;
024
025 import java.io.IOException;
026
027 import javax.portlet.ActionRequest;
028 import javax.portlet.ActionResponse;
029 import javax.portlet.EventRequest;
030 import javax.portlet.EventResponse;
031 import javax.portlet.Portlet;
032 import javax.portlet.PortletConfig;
033 import javax.portlet.PortletContext;
034 import javax.portlet.PortletException;
035 import javax.portlet.RenderRequest;
036 import javax.portlet.RenderResponse;
037 import javax.portlet.ResourceRequest;
038 import javax.portlet.ResourceResponse;
039
040
045 public class MonitoringPortlet implements InvokerPortlet {
046
047 public static boolean isMonitoringPortletActionRequest() {
048 return _monitoringPortletActionRequest;
049 }
050
051 public static boolean isMonitoringPortletEventRequest() {
052 return _monitoringPortletEventRequest;
053 }
054
055 public static boolean isMonitoringPortletRenderRequest() {
056 return _monitoringPortletRenderRequest;
057 }
058
059 public static boolean isMonitoringPortletResourceRequest() {
060 return _monitoringPortletResourceRequest;
061 }
062
063 public static void setMonitoringPortletActionRequest(
064 boolean monitoringPortletActionRequest) {
065
066 _monitoringPortletActionRequest = monitoringPortletActionRequest;
067 }
068
069 public static void setMonitoringPortletEventRequest(
070 boolean monitoringPortletEventRequest) {
071
072 _monitoringPortletEventRequest = monitoringPortletEventRequest;
073 }
074
075 public static void setMonitoringPortletRenderRequest(
076 boolean monitoringPortletRenderRequest) {
077
078 _monitoringPortletRenderRequest = monitoringPortletRenderRequest;
079 }
080
081 public static void setMonitoringPortletResourceRequest(
082 boolean monitoringPortletResourceRequest) {
083
084 _monitoringPortletResourceRequest = monitoringPortletResourceRequest;
085 }
086
087 public MonitoringPortlet() {
088 }
089
090 public MonitoringPortlet(
091 InvokerPortlet invokerPortlet,
092 SingleDestinationMessageSender singleDestinationMessageSender) {
093
094 _invokerPortlet = invokerPortlet;
095 _singleDestinationMessageSender = singleDestinationMessageSender;
096 }
097
098 public void destroy() {
099 _invokerPortlet.destroy();
100 }
101
102 public Integer getExpCache() {
103 return _invokerPortlet.getExpCache();
104 }
105
106 public Portlet getPortlet() {
107 return _invokerPortlet.getPortlet();
108 }
109
110 public ClassLoader getPortletClassLoader() {
111 return _invokerPortlet.getPortletClassLoader();
112 }
113
114 public PortletConfig getPortletConfig() {
115 return _invokerPortlet.getPortletConfig();
116 }
117
118 public PortletContext getPortletContext() {
119 return _invokerPortlet.getPortletContext();
120 }
121
122 public Portlet getPortletInstance() {
123 return _invokerPortlet.getPortletInstance();
124 }
125
126 public void init(PortletConfig portletConfig) throws PortletException {
127 LiferayPortletConfig liferayPortletConfig =
128 (LiferayPortletConfig)portletConfig;
129
130 _invokerPortlet.init(liferayPortletConfig);
131
132 com.liferay.portal.model.Portlet portletModel =
133 liferayPortletConfig.getPortlet();
134
135 _actionTimeout = portletModel.getActionTimeout();
136 _renderTimeout = portletModel.getRenderTimeout();
137 }
138
139 public boolean isCheckAuthToken() {
140 return _invokerPortlet.isCheckAuthToken();
141 }
142
143 public boolean isFacesPortlet() {
144 return _invokerPortlet.isFacesPortlet();
145 }
146
147 public boolean isStrutsBridgePortlet() {
148 return _invokerPortlet.isStrutsBridgePortlet();
149 }
150
151 public boolean isStrutsPortlet() {
152 return _invokerPortlet.isStrutsPortlet();
153 }
154
155 public void processAction(
156 ActionRequest actionRequest, ActionResponse actionResponse)
157 throws IOException, PortletException {
158
159 PortletRequestDataSample portletRequestDataSample = null;
160
161 try {
162 if (_monitoringPortletActionRequest) {
163 portletRequestDataSample = new PortletRequestDataSample(
164 PortletRequestType.ACTION, actionRequest, actionResponse);
165
166 portletRequestDataSample.setTimeout(_actionTimeout);
167
168 portletRequestDataSample.prepare();
169 }
170
171 _invokerPortlet.processAction(actionRequest, actionResponse);
172
173 if (_monitoringPortletActionRequest) {
174 portletRequestDataSample.capture(RequestStatus.SUCCESS);
175 }
176 }
177 catch (Exception e) {
178 _processException(
179 _monitoringPortletActionRequest, portletRequestDataSample, e);
180 }
181 finally {
182 if (portletRequestDataSample != null) {
183 _singleDestinationMessageSender.send(portletRequestDataSample);
184
185 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
186 }
187 }
188 }
189
190 public void processEvent(
191 EventRequest eventRequest, EventResponse eventResponse)
192 throws IOException, PortletException {
193
194 PortletRequestDataSample portletRequestDataSample = null;
195
196 try {
197 if (_monitoringPortletEventRequest) {
198 portletRequestDataSample = new PortletRequestDataSample(
199 PortletRequestType.EVENT, eventRequest, eventResponse);
200
201 portletRequestDataSample.prepare();
202 }
203
204 _invokerPortlet.processEvent(eventRequest, eventResponse);
205
206 if (_monitoringPortletEventRequest) {
207 portletRequestDataSample.capture(RequestStatus.SUCCESS);
208 }
209 }
210 catch (Exception e) {
211 _processException(
212 _monitoringPortletEventRequest, portletRequestDataSample, e);
213 }
214 finally {
215 if (portletRequestDataSample != null) {
216 _singleDestinationMessageSender.send(portletRequestDataSample);
217
218 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
219 }
220 }
221 }
222
223 public void render(
224 RenderRequest renderRequest, RenderResponse renderResponse)
225 throws IOException, PortletException {
226
227 PortletRequestDataSample portletRequestDataSample = null;
228
229 try {
230 if (_monitoringPortletRenderRequest) {
231 portletRequestDataSample = new PortletRequestDataSample(
232 PortletRequestType.RENDER, renderRequest, renderResponse);
233
234 portletRequestDataSample.setTimeout(_renderTimeout);
235
236 portletRequestDataSample.prepare();
237 }
238
239 _invokerPortlet.render(renderRequest, renderResponse);
240
241 if (_monitoringPortletRenderRequest) {
242 portletRequestDataSample.capture(RequestStatus.SUCCESS);
243 }
244 }
245 catch (Exception e) {
246 _processException(
247 _monitoringPortletRenderRequest, portletRequestDataSample, e);
248 }
249 finally {
250 if (portletRequestDataSample != null) {
251 _singleDestinationMessageSender.send(portletRequestDataSample);
252
253 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
254 }
255 }
256 }
257
258 public void serveResource(
259 ResourceRequest resourceRequest, ResourceResponse resourceResponse)
260 throws IOException, PortletException {
261
262 PortletRequestDataSample portletRequestDataSample = null;
263
264 try {
265 if (_monitoringPortletResourceRequest) {
266 portletRequestDataSample = new PortletRequestDataSample(
267 PortletRequestType.RESOURCE, resourceRequest,
268 resourceResponse);
269
270 portletRequestDataSample.prepare();
271 }
272
273 _invokerPortlet.serveResource(resourceRequest, resourceResponse);
274
275 if (_monitoringPortletResourceRequest) {
276 portletRequestDataSample.capture(RequestStatus.SUCCESS);
277 }
278 }
279 catch (Exception e) {
280 _processException(
281 _monitoringPortletResourceRequest, portletRequestDataSample, e);
282 }
283 finally {
284 if (portletRequestDataSample != null) {
285 _singleDestinationMessageSender.send(portletRequestDataSample);
286
287 DataSampleThreadLocal.addDataSample(portletRequestDataSample);
288 }
289 }
290 }
291
292 public void setInvokerPortlet(InvokerPortlet invokerPortlet) {
293 _invokerPortlet = invokerPortlet;
294 }
295
296 public void setPortletFilters() throws PortletException {
297 _invokerPortlet.setPortletFilters();
298 }
299
300 public void setSingleDestinationMessageSender(
301 SingleDestinationMessageSender singleDestinationMessageSender) {
302
303 _singleDestinationMessageSender = singleDestinationMessageSender;
304 }
305
306 private void _processException(
307 boolean monitoringPortletRequest,
308 PortletRequestDataSample portletRequestDataSample, Exception e)
309 throws IOException, PortletException {
310
311 if (monitoringPortletRequest) {
312 portletRequestDataSample.capture(RequestStatus.ERROR);
313 }
314
315 if (e instanceof IOException) {
316 throw (IOException)e;
317 }
318 else if (e instanceof PortletException) {
319 throw (PortletException)e;
320 }
321 else {
322 throw new PortletException("Unable to process portlet", e);
323 }
324 }
325
326 private static boolean _monitoringPortletActionRequest =
327 PropsValues.MONITORING_PORTLET_ACTION_REQUEST;
328 private static boolean _monitoringPortletEventRequest =
329 PropsValues.MONITORING_PORTLET_EVENT_REQUEST;
330 private static boolean _monitoringPortletRenderRequest =
331 PropsValues.MONITORING_PORTLET_RENDER_REQUEST;
332 private static boolean _monitoringPortletResourceRequest =
333 PropsValues.MONITORING_PORTLET_RESOURCE_REQUEST;
334
335 private long _actionTimeout;
336 private InvokerPortlet _invokerPortlet;
337 private long _renderTimeout;
338 private SingleDestinationMessageSender _singleDestinationMessageSender;
339
340 }