public class UtilTimerStack extends Object
-Dxwork.profile.activate=trueThis could be done in the container startup script eg. CATALINA_OPTS in catalina.sh (tomcat) or using "java -Dxwork.profile.activate=true -jar start.jar" (jetty) Code :-
UtilTimerStack.setActivate(true);This could be done in a static block, in a Spring bean with lazy-init="false", in a Servlet with init-on-startup as some numeric value, in a Filter or Listener's init method etc. Parameter:-
<action ... > ... <interceptor-ref name="profiling"> <param name="profilingKey">profiling</param> </interceptor-ref> ... </action> or <action .... > ... <interceptor-ref name="profiling" /> ... </action> through url http://host:port/context/namespace/someAction.action?profiling=true through code ActionContext.getContext().getParameters().put("profiling", "true);To use profiling activation through parameter, one will need to pass in through the 'profiling' parameter (which is the default) and could be changed through the param tag in the interceptor-ref. Warning: Profiling activation through a parameter requires the following:
-Dxwork.profile.mintime=10000One could extend the profiling feature provided by Struts2 in their web application as well.
String logMessage = "Log message"; UtilTimerStack.push(logMessage); try { // do some code } finally { UtilTimerStack.pop(logMessage); // this needs to be the same text as above }or
String result = UtilTimerStack.profile("purchaseItem: ", new UtilTimerStack.ProfilingBlockProfiled result is logged using commons-logging under the logger named 'com.opensymphony.xwork2.util.profiling.UtilTimerStack'. Depending on the underlying logging implementation say if it is Log4j, one could direct the log to appear in a different file, being emailed to someone or have it stored in the db.() { public String doProfiling() { // do some code return "Ok"; } });
Modifier and Type | Class and Description |
---|---|
static interface |
UtilTimerStack.ProfilingBlock<T>
A callback interface where code subjected to profile is to be executed.
|
Modifier and Type | Field and Description |
---|---|
static String |
ACTIVATE_PROPERTY
System property that controls whether this timer should be used or not.
|
protected static ThreadLocal<ProfilingTimerBean> |
current |
static String |
MIN_TIME
System property that controls the min time, that if exceeded will cause a log (at INFO level) to be
created.
|
Constructor and Description |
---|
UtilTimerStack() |
Modifier and Type | Method and Description |
---|---|
static boolean |
isActive()
Determine if profiling is being activated, by searching for a system property
'xwork.profile.activate', default to false (profiling is off).
|
static void |
pop(String name)
End a preformance profiling with the
name given. |
static <T> T |
profile(String name,
UtilTimerStack.ProfilingBlock<T> block)
A convenience method that allows
block of code subjected to profiling to be executed
and avoid the need of coding boiler code that does pushing (UtilTimeBean.push(...)) and
poping (UtilTimerBean.pop(...)) in a try ... |
static void |
push(String name)
Create and start a performance profiling with the
name given. |
static void |
setActive(boolean active)
Turn profiling on or off.
|
protected static ThreadLocal<ProfilingTimerBean> current
public static final String ACTIVATE_PROPERTY
public static final String MIN_TIME
public static void push(String name)
name
given. Deal with
profile hierarchy automatically, so caller don't have to be concern about it.name
- profile namepublic static void pop(String name)
name
given. Deal with
profile hierarchy automatically, so caller don't have to be concern about it.name
- profile namepublic static boolean isActive()
public static void setActive(boolean active)
active
- public static <T> T profile(String name, UtilTimerStack.ProfilingBlock<T> block) throws Exception
block
of code subjected to profiling to be executed
and avoid the need of coding boiler code that does pushing (UtilTimeBean.push(...)) and
poping (UtilTimerBean.pop(...)) in a try ... finally ... block.
Example of usage:
// we need a returning result String result = UtilTimerStack.profile("purchaseItem: ", new UtilTimerStack.ProfilingBlockor() { public String doProfiling() { getMyService().purchaseItem(....) return "Ok"; } });
// we don't need a returning result UtilTimerStack.profile("purchaseItem: ", new UtilTimerStack.ProfilingBlock() { public String doProfiling() { getMyService().purchaseItem(....) return null; } });
T
- any return value if there's one.name
- profile nameblock
- code block subjected to profilingException
Copyright © 2000-2015 Apache Software Foundation. All Rights Reserved.