Manually (clients)

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());

CDI

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.

Spring

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.

AspectJ

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.