Hi all,

I just want to discuss a new module I would like to see in Wicket. It is 
mentioned in the list of ideas in Confluence for Wicket 8:

https://cwiki.apache.org/confluence/display/WICKET/Ideas+for+Wicket+8.0

The Module is going to provide metrics to see how often requests have been 
handled from a webapp, how many render calls have been processed and other 
metrics:

https://github.com/klopfdreh/wicket/tree/wicket_metrics

I used the framework mentioned in the Confluence article and did a lot of 
research not to create a big performance and code impact because of changing 
every class in Wicket Core.

As you can see in the commits I used AspectJ. To get the Code working for you, 
you have to do the following steps:

1. Fetch the branch https://github.com/klopfdreh/wicket/tree/wicket_metrics

2. Just drop the jars of aspectjrt and aspectjweaver into the tomcat 8 lib 
folder
http://mvnrepository.com/artifact/org.aspectj/aspectjrt/1.8.8
http://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.8.8

4. Add the java agent to the jvm start options: 
-javaagent:/pathToServer/lib/aspectjweaver-1.8.8.jar

the metrics dependency is shipped with the project

5. Add the maven dependency wicket-metrics to your project (and install the 
snapshot locally before) and write WicketMetrics.startJmxReporter(); in your 
applications init();

6. Do a request to your project

7. Open jvisualvm and the tomcat process and have a look at metrics mbeans 
(mbean plugin has to be installed)

>>>> So now the reason why I used Aspectj:

1. The metrics code does not pull down the performance because of a lot of 
additional method invocations if not needed

2. If the metrics project is not resolved Wicket acts like nothing changed

3. Because of aspects also components written by the developers are also 
measured. So if a component extends Component the render method and the 
constructor calls are measured (for example). The developer dont have to take 
care of the statistics (See example)

4. It is clearly visible which Aspect is providing metrics about a component 
and you dont have to dig through the whole Wicket Code to find the measurement 
implementations

5. If there is an error in the statistics they can be turned off easily

Example class:
https://github.com/klopfdreh/wicket/blob/wicket_metrics/wicket-metrics/src/main/java/org/apache/wicket/metrics/aspects/ComponentAspect.java

In my opinion this is the right way to implement it - even if this means to do 
a little setup before. (jvm-parameter,copy jars)

Just try it out and let me know what are the results! :-)

kind regards

Tobias

Reply via email to