To handle manually the interception you need to import commons-monitoring-aop. Then you can rely on org.apache.commons.monitoring.aop.MonitoringProxyFactory.
org.apache.commons.proxy.ProxyFactory key defines the proxy factory to use to create proxies For instance to use javassist you set it to org.apache.commons.proxy.factory.javassist.JavassistProxyFactory (and you’ll include javassist in your application).
Then the API is quite simple:
final MyClient client = MonitoringProxyFactory.monitor(MyClient.class, getMyClientInstance());
You just need to decorate your CDI bean/method with the interceptor binding org.apache.commons.monitoring.cdi.Monitored.
For instance:
@Monitored @ApplicationScoped public class MyMonitoredBean { public void myMethod() { // ... } }
Note: in some (old) CDI implementation you’ll need to activate the monitoring interceptor: org.apache.commons.monitoring.cdi.CommonsMonitoringInterceptor.
Note: we are working to make it configurable.
Using org.apache.commons.monitoring.spring.BeanNameMonitoringAutoProxyCreator you can automatically add monitoring to selected beans.
<bean class="org.apache.commons.monitoring.spring.BeanNameMonitoringAutoProxyCreator"> <property name="beanNames"> <list> <value>*Service</value> </list> </property> </bean>
An alternative is to use org.apache.commons.monitoring.spring.PointcutMonitoringAutoProxyCreator which uses a org.springframework.aop.Pointcut to select beans to monitor.
To use AspectJ weaver (it works with build time enhancement too but it is often less relevant) just configure a custom concrete aspect defining the pointcut to monitor:
<aspectj> <aspects> <concrete-aspect name="org.apache.commons.aspectj.MyMonitoringAspectJ" extends="org.apache.commons.monitoring.aspectj.CommonsMonitoringAspect"> <pointcut name="pointcut" expression="execution(* org.apache.commons.monitoring.aspectj.AspectJMonitoringTest$MonitorMe.*(..))"/> </concrete-aspect> </aspects> <weaver> <include within="org.apache.commons.monitoring.aspectj.AspectJMonitoringTest$MonitorMe"/> </weaver> </aspectj>
See AspectJ documentation for more information.