You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Raymond Feng <en...@gmail.com> on 2008/08/07 02:39:27 UTC

Aspectj-based tracing for Tuscany, was: Re: svn commit: r683368

Hi,

I added a module "tuscany-tracing-aspectj" in trunk to demonstrate a
non-invasive tracing method for tuscany code based on AspectJ. Basically,
there is a tracing aspect developed as a regular java class with AspectJ
annotations to describe the AOP pointcuts and advices. The aspect can be
weaved at compile time (maven apsectj plugin) or load time (using JSE 1.5's
javaagent mechanism).

The maven-surefire-plugin is configured to enable the load-time weaving. And
there is also a launcher.bat to show to how invoke the Calulator sample with
tracing enabled.

There are a few issues to be figured out, for example, how to exclude the
methods call to java.* classes. For those who are interested in AOP, please
jump in to help.

Thanks,
Raymond
--------------------------------------------------
From: <rf...@apache.org>
Sent: Wednesday, August 06, 2008 11:55 AM
To: <co...@tuscany.apache.org>
Subject: svn commit: r683368 - in /tuscany/java/sca/modules/tracing-aspectj:
./ src/main/java/org/apache/tuscany/sca/aspectj/ src/main/resources/
src/main/resources/META-INF/ src/test/java/org/apache/tuscany/sca/aspectj/
src/test/resources/META-INF/

> Author: rfeng
> Date: Wed Aug  6 11:55:38 2008
> New Revision: 683368
>
> URL: http://svn.apache.org/viewvc?rev=683368&view=rev
> Log:
> Add an aspectj-based tracing capability to trace tuscany code
>
> Added:
>    tuscany/java/sca/modules/tracing-aspectj/   (props changed)
>      - copied from r670759, tuscany/sandbox/rfeng/aop-logging/
>    tuscany/java/sca/modules/tracing-aspectj/launcher.bat   (contents,
> props changed)
>      - copied, changed from r670759,
> tuscany/sandbox/rfeng/aop-logging/test.bat
>    tuscany/java/sca/modules/tracing-aspectj/pom.xml
>      - copied, changed from r683127,
> tuscany/sandbox/rfeng/aop-logging/pom.xml
>
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java
> (contents, props changed)
>      - copied, changed from r670759,
> tuscany/sandbox/rfeng/aop-logging/src/test/java/org/apache/tuscany/sca/aspectj/MyTracingAspect.java
>
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/TracingAspect.java
>      - copied unchanged from r683317,
> tuscany/sandbox/rfeng/aop-logging/src/main/java/org/apache/tuscany/sca/aspectj/TracingAspect.java
>    tuscany/java/sca/modules/tracing-aspectj/src/main/resources/
>    tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/
> (props changed)
>      - copied from r670759,
> tuscany/sandbox/rfeng/aop-logging/src/test/resources/META-INF/
>
> tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/aop.xml
>      - copied, changed from r683143,
> tuscany/sandbox/rfeng/aop-logging/src/test/resources/META-INF/aop.xml
>
> tuscany/java/sca/modules/tracing-aspectj/src/test/java/org/apache/tuscany/sca/aspectj/TracingTestCase.java
>      - copied unchanged from r683131,
> tuscany/sandbox/rfeng/aop-logging/src/test/java/org/apache/tuscany/sca/aspectj/TracingTestCase.java
> Removed:
>    tuscany/java/sca/modules/tracing-aspectj/.checkstyle
>    tuscany/java/sca/modules/tracing-aspectj/.pmd
>    tuscany/java/sca/modules/tracing-aspectj/.ruleset
>    tuscany/java/sca/modules/tracing-aspectj/LICENSE.txt
>    tuscany/java/sca/modules/tracing-aspectj/NOTICE.txt
>
> tuscany/java/sca/modules/tracing-aspectj/src/test/java/org/apache/tuscany/sca/aspectj/MyTracingAspect.java
>    tuscany/java/sca/modules/tracing-aspectj/src/test/resources/META-INF/
>    tuscany/java/sca/modules/tracing-aspectj/test.bat
>
> Propchange: tuscany/java/sca/modules/tracing-aspectj/
> ------------------------------------------------------------------------------
> --- svn:ignore (added)
> +++ svn:ignore Wed Aug  6 11:55:38 2008
> @@ -0,0 +1,11 @@
> +target
> +*.iws
> +*.ipr
> +*.iml
> +*.log*
> +.project
> +.classpath
> +junit*.properties
> +.settings
> +.deployables
> +.wtpmodules
>
> Propchange: tuscany/java/sca/modules/tracing-aspectj/
> ------------------------------------------------------------------------------
>    svn:mergeinfo =
>
> Copied: tuscany/java/sca/modules/tracing-aspectj/launcher.bat (from
> r670759, tuscany/sandbox/rfeng/aop-logging/test.bat)
> URL:
> http://svn.apache.org/viewvc/tuscany/java/sca/modules/tracing-aspectj/launcher.bat?p2=tuscany/java/sca/modules/tracing-aspectj/launcher.bat&p1=tuscany/sandbox/rfeng/aop-logging/test.bat&r1=670759&r2=683368&rev=683368&view=diff
> ==============================================================================
> --- tuscany/sandbox/rfeng/aop-logging/test.bat (original)
> +++ tuscany/java/sca/modules/tracing-aspectj/launcher.bat Wed Aug  6
> 11:55:38 2008
> @@ -1,3 +1,5 @@
> @echo off
> -set ASPECTJ_HOME=c:\aspectj1.5
> -call %ASPECTJ_HOME%\bin\aj5.bat -cp target\classes;target\test-classes
> org.apache.tuscany.sca.aspectj.TracingTestCase
> \ No newline at end of file
> +set TUSCANY_HOME=C:\Apache\tuscany-sca-1.3
> +set
> ASPECTJ_WEAVER=%HOMEPATH%\.m2\repository\org\aspectj\aspectjweaver\1.6.1\aspectjweaver-1.6.1.jar
> +set
> CP=%ASPECTJ_WEAVER%;%TUSCANY_HOME%\lib\tuscany-sca-manifest.jar;%TUSCANY_HOME%\samples\calculator\target\sample-calculator.jar
> +java -javaagent:"%ASPECTJ_WEAVER%" -cp "%CP%;target\classes"
> calculator.CalculatorClient
> \ No newline at end of file
>
> Propchange: tuscany/java/sca/modules/tracing-aspectj/launcher.bat
> ------------------------------------------------------------------------------
>    svn:mergeinfo =
>
> Copied: tuscany/java/sca/modules/tracing-aspectj/pom.xml (from r683127,
> tuscany/sandbox/rfeng/aop-logging/pom.xml)
> URL:
> http://svn.apache.org/viewvc/tuscany/java/sca/modules/tracing-aspectj/pom.xml?p2=tuscany/java/sca/modules/tracing-aspectj/pom.xml&p1=tuscany/sandbox/rfeng/aop-logging/pom.xml&r1=683127&r2=683368&rev=683368&view=diff
> ==============================================================================
> --- tuscany/sandbox/rfeng/aop-logging/pom.xml (original)
> +++ tuscany/java/sca/modules/tracing-aspectj/pom.xml Wed Aug  6 11:55:38
> 2008
> @@ -23,13 +23,10 @@
>         <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>
> +    <artifactId>tuscany-tracing-aspectj</artifactId>
>     <name>Apache Tuscany AOP-based Logging and Tracing</name>
> -
>     <dependencies>
>         <dependency>
>             <groupId>org.aspectj</groupId>
> @@ -37,8 +34,8 @@
>             <version>1.6.1</version>
>         </dependency>
>         <dependency>
> -            <groupId>org.aspectj</groupId>
> -            <artifactId>aspectjlib</artifactId>
> +            <groupId>org.aspectj</groupId>
> +            <artifactId>aspectjlib</artifactId>
>             <version>1.6.1</version>
>         </dependency>
>         <dependency>
> @@ -48,51 +45,24 @@
>             <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>
> +            <!-- surefire plugin configuration -->
>             <plugin>
> -                <groupId>org.codehaus.mojo</groupId>
> -                <artifactId>aspectj-maven-plugin</artifactId>
> -                <version>1.0</version>
> +                <groupId>org.apache.maven.plugins</groupId>
> +                <artifactId>maven-surefire-plugin</artifactId>
> +                <version>LATEST</version>
>                 <configuration>
> -                    <complianceLevel>1.5</complianceLevel>
> -                    <!-- 
>                     <includes>
> -                        <include>**/*Aspect.java</include>
> +                        <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}/org/aspectj/aspectjweaver/1.6.1/aspectjweaver-1.6.1.jar&quot;</argLine>
>                 </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>
>
> Copied:
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java
> (from r670759,
> tuscany/sandbox/rfeng/aop-logging/src/test/java/org/apache/tuscany/sca/aspectj/MyTracingAspect.java)
> URL:
> http://svn.apache.org/viewvc/tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java?p2=tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java&p1=tuscany/sandbox/rfeng/aop-logging/src/test/java/org/apache/tuscany/sca/aspectj/MyTracingAspect.java&r1=670759&r2=683368&rev=683368&view=diff
> ==============================================================================
> ---
> tuscany/sandbox/rfeng/aop-logging/src/test/java/org/apache/tuscany/sca/aspectj/MyTracingAspect.java
> (original)
> +++
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java
> Wed Aug  6 11:55:38 2008
> @@ -19,7 +19,9 @@
>
> package org.apache.tuscany.sca.aspectj;
>
> -import org.aspectj.lang.JoinPoint.StaticPart;
> +import java.util.Arrays;
> +
> +import org.aspectj.lang.JoinPoint;
> import org.aspectj.lang.annotation.Aspect;
> import org.aspectj.lang.annotation.Pointcut;
>
> @@ -27,9 +29,9 @@
>  * @version $Rev$ $Date$
>  */
> @Aspect
> -public class MyTracingAspect extends TracingAspect {
> +public class SimpleTracingAspect extends TracingAspect {
>
> -    public MyTracingAspect() {
> +    public SimpleTracingAspect() {
>         super();
>     }
>
> @@ -38,18 +40,38 @@
>         System.out.println("completeLog()");
>     }
>
> -    @Pointcut("execution(*
> org.apache.tuscany.sca.aspectj.TracingTestCase.testAOP(..))")
> +    @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(StaticPart jp) {
> +    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(StaticPart jp) {
> +    protected void logExit(JoinPoint jp, Object result) {
>         System.out.println("< " + jp.getSignature());
> +        if (!jp.getSignature().toString().startsWith("void ")) {
> +            System.out.println("Output: " + result);
> +        }
>     }
>
>     @Override
>
> Propchange:
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java
> ------------------------------------------------------------------------------
>    svn:keywords = Rev Date
>
> Propchange:
> tuscany/java/sca/modules/tracing-aspectj/src/main/java/org/apache/tuscany/sca/aspectj/SimpleTracingAspect.java
> ------------------------------------------------------------------------------
>    svn:mergeinfo =
>
> Propchange:
> tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/
> ------------------------------------------------------------------------------
>    svn:mergeinfo =
>
> Copied:
> tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/aop.xml
> (from r683143,
> tuscany/sandbox/rfeng/aop-logging/src/test/resources/META-INF/aop.xml)
> URL:
> http://svn.apache.org/viewvc/tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/aop.xml?p2=tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/aop.xml&p1=tuscany/sandbox/rfeng/aop-logging/src/test/resources/META-INF/aop.xml&r1=683143&r2=683368&rev=683368&view=diff
> ==============================================================================
> --- tuscany/sandbox/rfeng/aop-logging/src/test/resources/META-INF/aop.xml
> (original)
> +++
> tuscany/java/sca/modules/tracing-aspectj/src/main/resources/META-INF/aop.xml
> Wed Aug  6 11:55:38 2008
> @@ -2,7 +2,7 @@
>
>     <aspects>
>         <!-- declare two existing aspects to the weaver -->
> -        <aspect name="org.apache.tuscany.sca.aspectj.MyTracingAspect" />
> +        <aspect name="org.apache.tuscany.sca.aspectj.SimpleTracingAspect"
> />
>         <!-- 
>         <aspect name="org.apache.tuscany.sca.aspectj.LoggingAspect" />
>          -->
>
>