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: <[EMAIL PROTECTED]>
Sent: Wednesday, August 06, 2008 11:55 AM
To: <[EMAIL PROTECTED]>
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" />
         -->


Reply via email to