git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@773050 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
rfeng 2009-05-08 17:13:17 +00:00
parent 6d3c3f65f4
commit 78b93434ca
7 changed files with 0 additions and 438 deletions

View file

@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* 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.
-->
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-modules</artifactId>
<version>1.4-SNAPSHOT</version>
<!--
<relativePath>../pom.xml</relativePath>
-->
</parent>
<artifactId>tuscany-aop-logging</artifactId>
<name>Apache Tuscany AOP-based Logging and Tracing</name>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjlib</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- surefire plugin configuration -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>LATEST</version>
<configuration>
<includes>
<include>**/*TestCase.java</include>
</includes>
<reportFormat>brief</reportFormat>
<useFile>false</useFile>
<forkMode>once</forkMode>
<!-- I hit a bug in maven-surefire-plugin
http://jira.codehaus.org/browse/SUREFIRE-128 -->
<!--
<argLine>-ea -Xmx128m -javaagent:&quot;${settings.localRepository}/aspectj/aspectjweaver/1.6.1/aspectjweaver-1.6.1.jar&quot;</argLine>
-->
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<complianceLevel>1.5</complianceLevel>
<!--
<includes>
<include>**/*Aspect.java</include>
</includes>
-->
</configuration>
<executions>
<execution>
<goals>
<!-- use this goal to weave all your main classes -->
<goal>compile</goal>
<!-- use this goal to weave all your test classes -->
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View file

@ -1,93 +0,0 @@
/*
* 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) {
}
}

View file

@ -1,100 +0,0 @@
/*
* 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();
}

View file

@ -1,82 +0,0 @@
/*
* 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 MyTracingAspect extends TracingAspect {
public MyTracingAspect() {
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()");
}
}

View file

@ -1,41 +0,0 @@
/*
* 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.logging.Logger;
import org.junit.Test;
/**
* @version $Rev$ $Date$
*/
public class TracingTestCase {
@Test
public void testAOP() {
Logger log = Logger.getLogger(getClass().getName());
System.out.println("doSomething()");
log.info("Hello, Log");
}
public static void main(String[] args) {
new TracingTestCase().testAOP();
}
}

View file

@ -1,17 +0,0 @@
<aspectj>
<aspects>
<!-- declare two existing aspects to the weaver -->
<aspect name="org.apache.tuscany.sca.aspectj.MyTracingAspect" />
<!--
<aspect name="org.apache.tuscany.sca.aspectj.LoggingAspect" />
-->
</aspects>
<!--weaver options="-verbose -debug -showWeaveInfo"-->
<weaver options="">
<include within="org.apache.tuscany.sca..*" />
</weaver>
</aspectj>

View file

@ -1,5 +0,0 @@
@echo off
set ASPECTJ_HOME=c:\aspectj1.6
set TUSCANY_HOME=C:\Apache\tuscany-sca-1.3
set CP=%TUSCANY_HOME%\lib\tuscany-sca-manifest.jar;%TUSCANY_HOME%\samples\calculator\target\sample-calculator.jar
call %ASPECTJ_HOME%\bin\aj5.bat -cp %CP%;target\classes;target\test-classes calculator.CalculatorClient