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
