CatAopService.java 983 Bytes
package com.dianping.cat.aop;

import java.lang.reflect.Method;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;

import com.dianping.cat.Cat;
import com.dianping.cat.message.Transaction;

@Aspect
public class CatAopService {

	@Around(value = "execution(* *.*(..))")
	public void aroundMethod(ProceedingJoinPoint pjp) {
		MethodSignature joinPointObject = (MethodSignature) pjp.getSignature();
		Method method = joinPointObject.getMethod();
		boolean flag = method.isAnnotationPresent(CatAnnotation.class);

		if (flag) {
			Transaction t = Cat.newTransaction("method", method.getName());

			try {
				pjp.proceed();

				t.setSuccessStatus();
				t.complete();
			} catch (Throwable e) {
				t.setStatus(e);
				Cat.logError(e);
			} finally {
				t.complete();
			}
		} else {
			try {
				pjp.proceed();
			} catch (Throwable e) {
			}
		}
	}

}