Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Wiki Markup
{snippet:id=profilingAspect_struts2|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Activating / Deactivating Profiling

Wiki Markup
{snippet:id=activationDescription|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Using

To enable profiling, first make sure that the profiling interceptor is applied to your action, like:

Code Block
xml
xml

<action ... >   
   ... 
   <interceptor-ref name="profiling"> 
       <param name="profilingKey">profiling</param> 
   </interceptor-ref> 
   ... 
</action> 

Then enable profiling using one of the following methods:

Activate Through System property

Wiki Markup
{snippet:id=activationThroughSystemProperty|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}
Wiki Markup
{snippet:id=activationThroughSystemPropertyDescription|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Activate Through code

Wiki Markup
{snippet:id=activationThroughCode|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}
Wiki Markup
{snippet:id=activationThroughCodeDescription|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Activate Through parameter

Wiki Markup
{snippet:id=activationThroughParameter|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}
Wiki Markup
{snippet:id=activationThroughParameterDescription|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}
Code Block

http://host:port/context/namespace/someAction.action?profiling=true 

Changing the activation parameter name

Set the profilingKey attribute of the profiling interceptor to the desired name:

Code Block
xml
xml

<action ... >   
   ... 
   <interceptor-ref name="profiling"> 
       <param name="profilingKey">profiling</param> 
   </interceptor-ref> 
   ... 
</action> 
{snippet:id=activationThroughParameterWarning|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Warning

Profiling activation through a parameter requires struts.devMode to be true.

Warning
Wiki Markup

Filtering profile information

...

Wiki Markup
{snippet:id=filteringCode|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Write profiling code

...

One could extend the profiling feature provided by Struts2 in their web application as well.

Using UtilTimerStack's push and pop

Code Block
java
java

String logMessage = "Log message"; 
UtilTimerStack.push(logMessage); 
try { 
    // do some code 
} finally { 
    UtilTimerStack.pop(logMessage); // this needs to be the same text as above 
} 
Wiki Markup
{snippet:id=method1|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Using a UtilTimerStack's ProfileBlock template

Wiki Markup
{snippet:id=method2|lang=xml|javadoc=true|url=com.opensymphony.xwork2.util.profiling.UtilTimerStack}

Profiling Log files

...

Code Block
java
java

String result = UtilTimerStack.profile("purchaseItem: ",  
      new UtilTimerStack.ProfilingBlock<String>() { 
           public String doProfiling() { 
              // do some code 
              return "Ok"; 
           } 
      }); 

Profiling Log files

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.

Next: Debugging