@Deprecated public class UtilTimerStack extends Object
A timer stack.
Struts2 profiling aspects involves the following:
XWork2 profiling aspects involves the following:
Activating / Deactivating of the profiling feature could be done through:
System properties:
-Dxwork.profile.activate=true
This 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:
One could filter out the profile logging by having a System property as follows. With this 'xwork.profile.mintime' property, one could only log profile information when its execution time exceed those specified in 'xwork.profile.mintime' system property. If no such property is specified, it will be assumed to be 0, hence all profile information will be logged.
-Dxwork.profile.mintime=10000
One 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.ProfilingBlock<String>() { public String doProfiling() { // do some code return "Ok"; } });
Profiled 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.
Modifier and Type | Class and Description |
---|---|
static interface |
UtilTimerStack.ProfilingBlock<T>
Deprecated.
A callback interface where code subjected to profile is to be executed.
|
Modifier and Type | Field and Description |
---|---|
static String |
ACTIVATE_PROPERTY
Deprecated.
System property that controls whether this timer should be used or not.
|
protected static ThreadLocal<ProfilingTimerBean> |
current
Deprecated.
|
static String |
MIN_TIME
Deprecated.
System property that controls the min time, that if exceeded will cause a log (at INFO level) to be
created.
|
Constructor and Description |
---|
UtilTimerStack()
Deprecated.
|
Modifier and Type | Method and Description |
---|---|
static boolean |
isActive()
Deprecated.
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)
Deprecated.
End a performance profiling with the
name given. |
static <T> T |
profile(String name,
UtilTimerStack.ProfilingBlock<T> block)
Deprecated.
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)
Deprecated.
Create and start a performance profiling with the
name given. |
static void |
setActive(boolean active)
Deprecated.
|
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
- Turn profiling on or off.public static <T> T profile(String name, UtilTimerStack.ProfilingBlock<T> block) throws Exception
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 ... finally ... block.
Example of usage:
// we need a returning result String result = UtilTimerStack.profile("purchaseItem: ", new UtilTimerStack.ProfilingBlock<String>() { public String doProfiling() { getMyService().purchaseItem(....) return "Ok"; } });or
// we don't need a returning result UtilTimerStack.profile("purchaseItem: ", new UtilTimerStack.ProfilingBlock<String>() { public String doProfiling() { getMyService().purchaseItem(....) return null; } });
T
- any return value if there's one.name
- profile nameblock
- code block subjected to profilingException
- in case of any errorsCopyright © 2000–2020 Apache Software Foundation. All rights reserved.