Author: mrdon Date: Sat Sep 30 17:48:24 2006 New Revision: 451703 URL: http://svn.apache.org/viewvc?view=rev&rev=451703 Log: Adding activation interceptor, and added profiling hook in dispatcher WW-1460
Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java struts/struts2/trunk/core/src/main/resources/struts-default.xml Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?view=diff&rev=451703&r1=451702&r2=451703 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Sat Sep 30 17:48:24 2006 @@ -65,6 +65,7 @@ import com.opensymphony.xwork2.util.XWorkContinuationConfig; import com.opensymphony.xwork2.util.location.Location; import com.opensymphony.xwork2.util.location.LocationUtils; +import com.opensymphony.xwork2.util.profiling.UtilTimerStack; import freemarker.template.Template; @@ -296,7 +297,9 @@ extraContext.put(ActionContext.VALUE_STACK, ValueStackFactory.getFactory().createValueStack(stack)); } + String timerKey = "Handling request from Dispatcher"; try { + UtilTimerStack.push(timerKey); String namespace = mapping.getNamespace(); String name = mapping.getName(); String method = mapping.getMethod(); @@ -335,6 +338,8 @@ } catch (Exception e) { LOG.error("Could not execute action", e); sendError(request, response, context, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e); + } finally { + UtilTimerStack.pop(timerKey); } } @@ -643,4 +648,19 @@ public void setConfigurationManager(ConfigurationManager mgr) { this.configurationManager = mgr; } + + /** + * @return the devMode + */ + public boolean isDevMode() { + return devMode; + } + + /** + * @param devMode the devMode to set + */ + public void setDevMode(boolean devMode) { + this.devMode = devMode; + } + } Added: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java?view=auto&rev=451703 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java (added) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java Sat Sep 30 17:48:24 2006 @@ -0,0 +1,63 @@ +/* + * $Id: CreateSessionInterceptor.java 439747 2006-09-03 09:22:46Z mrdon $ + * + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.struts2.interceptor; + +import org.apache.struts2.dispatcher.Dispatcher; + +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.interceptor.AbstractInterceptor; +import com.opensymphony.xwork2.util.profiling.UtilTimerStack; + +/** + * Allows profiling to be enabled or disabled via request parameters, when + * devMode is enabled. + */ +public class ProfilingActivationInterceptor extends AbstractInterceptor { + + private String profilingKey = "profiling"; + + /** + * @return the profilingKey + */ + public String getProfilingKey() { + return profilingKey; + } + + /** + * @param profilingKey the profilingKey to set + */ + public void setProfilingKey(String profilingKey) { + this.profilingKey = profilingKey; + } + + @Override + public String intercept(ActionInvocation invocation) throws Exception { + if (Dispatcher.getInstance().isDevMode()) { + Object val = invocation.getInvocationContext().getParameters().get(profilingKey); + if (val != null) { + String sval = (val instanceof String ? (String)val : ((String[])val)[0]); + boolean enable = "yes".equalsIgnoreCase(sval) || "true".equalsIgnoreCase(sval); + UtilTimerStack.setActive(enable); + invocation.getInvocationContext().getParameters().remove(profilingKey); + } + } + return invocation.invoke(); + + } + +} Modified: struts/struts2/trunk/core/src/main/resources/struts-default.xml URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/struts-default.xml?view=diff&rev=451703&r1=451702&r2=451703 ============================================================================== --- struts/struts2/trunk/core/src/main/resources/struts-default.xml (original) +++ struts/struts2/trunk/core/src/main/resources/struts-default.xml Sat Sep 30 17:48:24 2006 @@ -47,6 +47,7 @@ <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/> <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" /> <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" /> + <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" /> <!-- Basic stack --> <interceptor-stack name="basicStack"> @@ -142,6 +143,7 @@ <interceptor-ref name="i18n"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> + <interceptor-ref name="profiling"/> <interceptor-ref name="scoped-model-driven"/> <interceptor-ref name="model-driven"/> <interceptor-ref name="fileUpload"/>