diff options
Diffstat (limited to 'branches/sca-android/modules/tracing-aspectj/src/main/java/org')
3 files changed, 275 insertions, 0 deletions
diff --git a/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/LoggingAspect.java b/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/LoggingAspect.java new file mode 100644 index 0000000000..8ad64d498b --- /dev/null +++ b/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/LoggingAspect.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.aspectj; + +import java.util.Arrays; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; + +/** + * @version $Rev$ $Date$ + */ +@Aspect +public class LoggingAspect { + @Pointcut("call(* org.apache.tuscany.sca..*(..)) && (!within(org.apache.tuscany.sca.aspectj.*Aspect))") + public void anyMethodCall() { + } + + @Pointcut("execution(* org.apache.tuscany.sca..*(..)) && (!within(org.apache.tuscany.sca.aspectj.*Aspect))") + public void anyMethodExecution() { + } + + @Pointcut("call(* java.util.logging.Logger.info(..))") + public void anyLogCall() { + } + + @Pointcut("cflow(anyMethodExecution()) && anyLogCall()") + public void anyLog() { + + } + + // @Around("anyMethodCall() || anyLog()") + @Around("anyLog()") + public Object around(ProceedingJoinPoint jp) throws Throwable { + System.out.println("Around: " + jp); + long start = System.currentTimeMillis(); + try { + return jp.proceed(); + } finally { + long end = System.currentTimeMillis(); + System.out.println("Roundtrip is " + (end - start) + "ms for " + jp.getSignature()); + } + + } + + @Before("anyMethodCall()") + public void before(JoinPoint jp) { + System.out.println("Before: " + jp); + System.out.println("Location: " + jp.getSourceLocation()); + System.out.println("This: " + jp.getThis()); + System.out.println("Target: " + jp.getTarget()); + System.out.println("Input: " + Arrays.asList(jp.getArgs())); + } + + @After("anyMethodCall()") + public void after(JoinPoint jp) { + System.out.println("After: " + jp); + } + + @AfterReturning(pointcut = "anyMethodCall()", returning = "result") + public void afterReturning(JoinPoint jp, Object result) { + System.out.println("After returning: " + jp + " " + result); + } + + @AfterThrowing(pointcut = "anyMethodCall()", throwing = "e") + public void afterThrowing(Exception e) { + } + +} diff --git a/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java b/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java new file mode 100644 index 0000000000..67fe54f396 --- /dev/null +++ b/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.aspectj; + +import java.util.Arrays; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; + +/** + * @version $Rev$ $Date$ + */ +@Aspect +public class SimpleTracingAspect extends TracingAspect { + + public SimpleTracingAspect() { + super(); + } + + @Override + protected void completeLog() { + System.out.println("completeLog()"); + } + + @Pointcut("execution(public * org.apache.tuscany.sca..*.*(..)) &&!within(java..*)") + protected void entry() { + } + + @Pointcut("within(org.apache.tuscany.sca..*) && !within(org.apache.tuscany.sca.aspectj.*Aspect)") + protected void withinScope() { + } + + @Override + protected void logEnter(JoinPoint jp) { + System.out.println("> " + jp.getSignature()); + if (jp.getArgs().length != 0) { + System.out.println("Input: " + Arrays.asList(jp.getArgs())); + } + } + + @Override + protected void logExit(JoinPoint jp) { + // System.out.println("> " + jp.getSignature()); + } + + @Override + protected void logException(JoinPoint jp, Throwable throwable) { + System.out.println("! " + jp.getSignature() + " " + throwable.getMessage()); + } + + @Override + protected void logExit(JoinPoint jp, Object result) { + System.out.println("< " + jp.getSignature()); + if (!jp.getSignature().toString().startsWith("void ")) { + System.out.println("Output: " + result); + } + } + + @Override + protected void startLog() { + System.out.println("startLog()"); + } + +} diff --git a/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/TracingAspect.java b/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/TracingAspect.java new file mode 100644 index 0000000000..53ef73573b --- /dev/null +++ b/branches/sca-android/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/TracingAspect.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.sca.aspectj; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; + +/** + * @version $Rev$ $Date$ + */ + +@Aspect +public abstract class TracingAspect { + + @Pointcut("") + protected abstract void entry(); + + /** ignore join points outside this scope - use within(..) */ + @Pointcut("") + protected abstract void withinScope(); + + @Pointcut("withinScope() && call(* java..*.*(..))") + protected void exit() { + } + + @Pointcut("withinScope() && entry() && !cflowbelow(entry())") + void start() { + } + + @Pointcut("withinScope() && cflow(entry()) && !cflowbelow(exit()) && !within(org.apache.tuscany.sca.aspectj.*Aspect)") + void trace() { + } + + @Pointcut("!handler(*) && !preinitialization(new(..))") + protected void supportsAfterAdvice() { + } + + @Before("start()") + public void beforeStart() { + startLog(); + } + + @Before("trace() && supportsAfterAdvice()") + public void beforeTrace(JoinPoint jp) { + logEnter(jp); + } + + @After("trace() && supportsAfterAdvice()") + public void afterTrace(JoinPoint jp) { + logExit(jp); + } + + @AfterReturning(pointcut = "trace() && supportsAfterAdvice()", returning = "result") + public void afterReturning(JoinPoint jp, Object result) { + logExit(jp, result); + } + + @AfterThrowing(pointcut = "trace() && supportsAfterAdvice()", throwing = "e") + public void afterThrowing(JoinPoint jp, Throwable e) { + logException(jp, e); + } + + @After("start()") + public void afterStart() { + completeLog(); + } + + protected abstract void logEnter(JoinPoint jp); + + protected abstract void logExit(JoinPoint jp); + protected abstract void logExit(JoinPoint jp, Object result); + protected abstract void logException(JoinPoint jp, Throwable throwable); + + protected abstract void startLog(); + + protected abstract void completeLog(); + +} |