1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.monitoring.aspectj;
18
19 import org.apache.commons.monitoring.aop.AbstractPerformanceInterceptor;
20 import org.aspectj.lang.ProceedingJoinPoint;
21 import org.aspectj.lang.Signature;
22 import org.aspectj.lang.annotation.Around;
23 import org.aspectj.lang.annotation.Aspect;
24 import org.aspectj.lang.annotation.Pointcut;
25
26 import java.lang.reflect.Method;
27
28 @Aspect
29 public abstract class CommonsMonitoringAspect extends AbstractPerformanceInterceptor<ProceedingJoinPoint> {
30 @Pointcut
31 protected abstract void pointcut();
32
33 @Around("pointcut()")
34 public Object monitor(final ProceedingJoinPoint pjp) throws Throwable {
35 return doInvoke(pjp);
36 }
37
38 @Override
39 protected Object proceed(final ProceedingJoinPoint invocation) throws Throwable {
40 return invocation.proceed();
41 }
42
43 @Override
44 protected String getCounterName(final ProceedingJoinPoint invocation) {
45 final String monitorName = getCounterName(invocation.getTarget(), findMethod(invocation.getSignature()));
46 if (monitorName != null) {
47 return monitorName;
48 }
49 return invocation.getSignature().toLongString();
50 }
51
52 private static Method findMethod(final Signature signature) {
53 if ("org.aspectj.runtime.reflect.MethodSignatureImpl".equals(signature.getClass().getName())) {
54 try {
55 final Method mtd = signature.getClass().getMethod("getMethod");
56 if (!mtd.isAccessible()) {
57 mtd.setAccessible(true);
58 }
59 return Method.class.cast(mtd.invoke(signature));
60 } catch (final Exception e) {
61
62 }
63 }
64 return null;
65 }
66 }