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