You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2014/03/22 15:46:37 UTC

svn commit: r1580218 - in /incubator/sirona/trunk/agent/javaagent: ./ src/main/java/org/apache/sirona/javaagent/ src/test/java/org/apache/test/sirona/javaagent/ src/test/resources/

Author: rmannibucau
Date: Sat Mar 22 14:46:37 2014
New Revision: 1580218

URL: http://svn.apache.org/r1580218
Log:
SIRONA-33 rewrite javaagent with real in place interception

Added:
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/DebugTest.java
      - copied, changed from r1579888, incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java
Removed:
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/Instrumented.java
Modified:
    incubator/sirona/trunk/agent/javaagent/pom.xml
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java
    incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java
    incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties

Modified: incubator/sirona/trunk/agent/javaagent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/pom.xml?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/pom.xml (original)
+++ incubator/sirona/trunk/agent/javaagent/pom.xml Sat Mar 22 14:46:37 2014
@@ -45,6 +45,7 @@
         </exclusion>
       </exclusions>
     </dependency>
+
     <dependency>
       <groupId>org.ow2.asm</groupId>
       <artifactId>asm</artifactId>
@@ -60,14 +61,12 @@
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
     </dependency>
-
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
       <version>3.2.1</version>
       <scope>test</scope>
     </dependency>
-
   </dependencies>
 
   <build>
@@ -117,7 +116,7 @@
               <relocations>
                 <relocation>
                   <pattern>org.objectweb.asm</pattern>
-                  <shadedPattern>org.apache.sirona.asm4</shadedPattern>
+                  <shadedPattern>org.apache.sirona.asm</shadedPattern>
                 </relocation>
                 <!--
                 <relocation>

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java Sat Mar 22 14:46:37 2014
@@ -59,7 +59,7 @@ public class AgentContext {
     }
 
     // called by agent
-    public static AgentContext startOn(final String key, final Object that) {
+    public static AgentContext startOn(final Object that, final String key) {
 		if (key == null) { // possible in static inits, the best would be to ignore it in instrumentation
 			return FAKE_CONTEXT;
 		}

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java Sat Mar 22 14:46:37 2014
@@ -19,7 +19,6 @@ package org.apache.sirona.javaagent;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
-import java.lang.annotation.Annotation;
 import java.lang.instrument.Instrumentation;
 import java.lang.reflect.Method;
 import java.net.URL;
@@ -112,13 +111,11 @@ public class SironaAgent {
             final boolean reloadable = instrumentation.isRetransformClassesSupported() && FORCE_RELOAD;
             instrumentation.addTransformer(transformer, reloadable);
 
-            final Class<? extends Annotation> instrumentedMarker = (Class<? extends Annotation>) loader.loadClass("org.apache.sirona.javaagent.Instrumented");
             final Class<?> listener = loader.loadClass("org.apache.sirona.javaagent.spi.InvocationListener");
             if (reloadable) {
                 for (final Class<?> clazz : instrumentation.getAllLoadedClasses()) {
                     if (!clazz.isArray()
                             && !listener.isAssignableFrom(clazz)
-                            && clazz.getAnnotation(instrumentedMarker) == null
                             && instrumentation.isModifiableClass(clazz)) {
                         try {
 
@@ -232,7 +229,7 @@ public class SironaAgent {
     /**
      *
      * @param agentArgs foo=bar|beer=palepale|etc...
-     * @return
+     * @return parameters
      */
     protected static Map<String, String> extractParameters(String agentArgs){
         if(agentArgs==null||agentArgs.length()<1){

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaClassVisitor.java Sat Mar 22 14:46:37 2014
@@ -16,64 +16,52 @@
  */
 package org.apache.sirona.javaagent;
 
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Handle;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.GeneratorAdapter;
+import org.objectweb.asm.commons.AdviceAdapter;
 import org.objectweb.asm.commons.Method;
 
 import java.lang.reflect.Modifier;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
 
-public class SironaClassVisitor extends ClassVisitor implements Opcodes {
-    private static final int CONSTANT_ACCESS = ACC_PRIVATE | ACC_STATIC | ACC_FINAL;
+import static java.lang.Integer.MIN_VALUE;
 
+public class SironaClassVisitor extends ClassVisitor implements Opcodes {
     private static final String STATIC_INIT = "<clinit>";
     private static final String CONSTRUCTOR = "<init>";
-    private static final String NO_PARAM_RETURN_VOID = "()V";
-
-    private static final String METHOD_SUFFIX = "_$_$irona_$_internal_$_original_$_";
-    private static final String FIELD_SUFFIX = "_$_$IRONA_$_INTERNAL_$_KEY";
-    private static final String STATIC_CLINT_MERGE_PREFIX = "_$_$irona_static_merge";
 
-    private static final Type KEY_TYPE = Type.getType(String.class);
     private static final Type AGENT_CONTEXT = Type.getType(AgentContext.class);
 
+    private static final Type STRING_TYPE = Type.getType(String.class);
+    private static final Type OBJECT_TYPE = Type.getType(Object.class);
+    private static final Type THROWABLE_TYPE = Type.getType(Throwable.class);
+    private static final Type[] STOP_WITH_OBJECT_ARGS_TYPES = new Type[]{OBJECT_TYPE};
+    private static final Type[] STOP_WITH_THROWABLE_ARGS_TYPES = new Type[]{THROWABLE_TYPE};
+    private static final Type[] START_ARGS_TYPES = new Type[]{OBJECT_TYPE, STRING_TYPE};
+
+    // methods
+    public static final Method START_METHOD = new Method("startOn", AGENT_CONTEXT, START_ARGS_TYPES);
+    private static final Method STOP_METHOD = new Method("stop", Type.VOID_TYPE, STOP_WITH_OBJECT_ARGS_TYPES);
+    private static final Method STOP_WITH_EXCEPTION_METHOD = new Method("stopWithException", Type.VOID_TYPE, STOP_WITH_THROWABLE_ARGS_TYPES);
+
     private final String javaName;
-    private Type classType;
+    private int count = 0;
 
-    public SironaClassVisitor(final ClassWriter writer, final String javaName, final Map<String, String> keys) {
-        super(ASM5, new SironaStaticInitMerger(writer, keys));
+    public SironaClassVisitor(final ClassWriter writer, final String javaName) {
+        super(ASM5, writer);
         this.javaName = javaName;
     }
 
     @Override
-    public void visit(final int version, final int access, final String name, final String signature, final String superName,
-                      final String[] interfaces) {
-        cv.visit(version, access, name, signature, superName, interfaces);
-        classType = Type.getType("L" + name.replace('.', '/') + ";");
-        SironaStaticInitMerger.class.cast(cv).initSironaFields(classType);
-    }
-
-
-
-    @Override
     public void visitSource(final String source, final String debug) {
         super.visitSource(source, debug);
-        visitAnnotation("L" + Instrumented.class.getName().replace('.', '/') + ";", true).visitEnd();
     }
 
     @Override
-    public MethodVisitor visitMethod(int access, final String name, final String desc, final String signature, final String[] exceptions) {
+    public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) {
         final MethodVisitor visitor = super.visitMethod(access, name, desc, signature, exceptions);
         if (!isSironable(access, name)) {
             return visitor;
@@ -81,520 +69,102 @@ public class SironaClassVisitor extends 
 
         final String label = javaName.replace("/", ".") + "." + name;
         if (AgentContext.listeners(label) != null) {
-            // generate internal method - the proxy (previous one) delegates to this one
-            return new MoveAnnotationOnProxy(
-                    new ProxyMethodsVisitor(visitor, access, new Method(name, desc), classType),
-                    super.visitMethod(forcePrivate(access), name + METHOD_SUFFIX, desc, signature, exceptions));
-        }
-        return visitor;
-    }
-
-    @Override
-    public void visitEnd() {
-        // TODO
-        // for all implemented interface with default method
-        // and when default methods are not overriden
-        // just declare calling Interface.super.method() + generating proxy
-        /*
-mv = cw.visitMethod(ACC_PUBLIC, methodName", signature, null, null);
-mv.visitCode();
-mv.visitVarInsn(ALOAD, 0);
-mv.visitMethodInsn(INVOKESPECIAL, interfaceType, methodName, signature, true);
-mv.visitInsn(ARETURN);
-mv.visitMaxs(1, 1);
-mv.visitEnd();
-
-         */
-
-        super.visitEnd();
-    }
-
-    private static int forcePrivate(final int access) {
-        return (access & ~(Modifier.PRIVATE | Modifier.PUBLIC | Modifier.PROTECTED)) | Modifier.PRIVATE;
-    }
-
-    private static boolean isSironable(final int access, final String name) {
-        return !name.equals(STATIC_INIT) && !name.equals(CONSTRUCTOR) && !Modifier.isAbstract(access) && !Modifier.isNative(access);
-    }
-
-    private static class ProxyMethodsVisitor extends GeneratorAdapter {
-        private static final Type THROWABLE_TYPE = Type.getType(Throwable.class);
-        private static final Type[] STOP_WITH_THROWABLE_ARGS_TYPES = new Type[] {THROWABLE_TYPE};
-        private static final Type OBJECT_TYPE = Type.getType(Object.class);
-        private static final Type[] STOP_WITH_OBJECT_ARGS_TYPES = new Type[] {OBJECT_TYPE};
-        private static final Type[] START_ARGS_TYPES = new Type[] {KEY_TYPE, OBJECT_TYPE};
-
-        // methods
-        private static final String START_METHOD = "startOn";
-        private static final String STOP_WITH_EXCEPTION_METHOD = "stopWithException";
-        private static final String STOP_METHOD = "stop";
-        private static final String VALUE_OF = "valueOf";
-
-        private static final Map<Type, Primitive> PRIMITIVES = new HashMap<Type, Primitive>();
-        static {
-            final Type shortType = Type.getType(short.class);
-            PRIMITIVES.put(shortType, new Primitive(Type.getType(Short.class), shortType));
-            final Type intType = Type.getType(int.class);
-            PRIMITIVES.put(intType, new Primitive(Type.getType(Integer.class), intType));
-            final Type longType = Type.getType(long.class);
-            PRIMITIVES.put(longType, new Primitive(Type.getType(Long.class), longType));
-            final Type charType = Type.getType(char.class);
-            PRIMITIVES.put(charType, new Primitive(Type.getType(Character.class), charType));
-            final Type floatType = Type.getType(float.class);
-            PRIMITIVES.put(floatType, new Primitive(Type.getType(Float.class), floatType));
-            final Type doubleType = Type.getType(double.class);
-            PRIMITIVES.put(doubleType, new Primitive(Type.getType(Double.class), doubleType));
-            final Type boolType = Type.getType(boolean.class);
-            PRIMITIVES.put(boolType, new Primitive(Type.getType(Boolean.class), boolType));
-            final Type byteType = Type.getType(byte.class);
-            PRIMITIVES.put(boolType, new Primitive(Type.getType(Byte.class), byteType));
-        }
-
-        private final boolean isStatic;
-        private final Type clazz;
-        private final boolean isVoid;
-        private final Primitive primitiveWrapper;
-        private final Method method;
-
-        public ProxyMethodsVisitor(final MethodVisitor methodVisitor, final int access, final Method method, final Type clazz) {
-            super(ASM5, methodVisitor, access, method.getName(), method.getDescriptor());
-            this.clazz = clazz;
-            this.method = method;
-            this.isStatic = Modifier.isStatic(access);
-
-            final Type returnType = method.getReturnType();
-            this.isVoid = Type.VOID_TYPE.equals(returnType);
-            this.primitiveWrapper = PRIMITIVES.get(returnType);
-        }
-
-        @Override
-        public void visitCode() {
-            final int agentIdx = newLocal(AGENT_CONTEXT);
-            getStatic(clazz, method.getName() + FIELD_SUFFIX, KEY_TYPE);
-            if (!isStatic) {
-                loadThis();
-            } else {
-                visitInsn(ACONST_NULL); // this == null for static methods
-            }
-            invokeStatic(AGENT_CONTEXT, new Method(START_METHOD, AGENT_CONTEXT, START_ARGS_TYPES));
-            storeLocal(agentIdx);
-
-            final Label tryStart = mark();
-
-            invoke();
-
-            // store result to return it later if it doesn't return void
-            final int result = storeResult();
-
-            // take metrics before returning
-            loadLocal(agentIdx);
-
-            if (result != -1) {
-                loadLocal(result);
-                if (primitiveWrapper != null) { // we call agentContext.stop(Object) so we need to wrap primitives
-                    invokeStatic(primitiveWrapper.wrapper, primitiveWrapper.method);
-                }
-            } else {
-                visitInsn(ACONST_NULL); // result == null for static methods
-            }
-            invokeVirtual(AGENT_CONTEXT, new Method(STOP_METHOD, Type.VOID_TYPE, STOP_WITH_OBJECT_ARGS_TYPES));
-
-            // return result
-            returnResult(result);
-
-            final Label tryEnd = mark();
-            catchException(tryStart, tryEnd, THROWABLE_TYPE);
-
-            // context.stopWithException(throwable);
-            final int throwableId = newLocal(THROWABLE_TYPE);
-            storeLocal(throwableId);
-            loadLocal(agentIdx);
-            loadLocal(throwableId);
-            invokeVirtual(AGENT_CONTEXT, new Method(STOP_WITH_EXCEPTION_METHOD, Type.VOID_TYPE, STOP_WITH_THROWABLE_ARGS_TYPES));
-
-            // rethrow throwable
-            loadLocal(throwableId);
-            throwException();
-
-            endMethod();
-        }
-
-        private void invoke() {
-            final Method mtd = new Method(method.getName() + METHOD_SUFFIX, method.getDescriptor());
-            if (isStatic) {
-                loadArgs();
-                invokeStatic(clazz, mtd);
-            } else {
-                loadThis();
-                loadArgs();
-                invokeVirtual(clazz, mtd);
-            }
-        }
-
-        private int storeResult() {
-            final int result;
-            if (!isVoid) {
-                result = newLocal(method.getReturnType());
-                storeLocal(result);
-            } else {
-                result = -1;
-            }
-            return result;
-        }
-
-        private void returnResult(int result) {
-            // return
-            if (!isVoid) {
-                loadLocal(result);
-            }
-            returnValue();
-        }
+            count++;
 
-        private static class Primitive {
-            private Type wrapper;
-            private Method method;
-
-            private Primitive(final Type wrapper, final Type params) {
-                this.wrapper = wrapper;
-                this.method = new Method(VALUE_OF, wrapper, new Type[] {params});
-            }
-        }
-    }
-
-    // remove annotation from original methods and put it on proxy ones
-    private static class MoveAnnotationOnProxy extends MethodVisitor {
-        private final MethodVisitor delegate;
-        private final ProxyMethodsVisitor decorator;
-        private final Collection<Runnable> rewriteTasks = new LinkedList<Runnable>();
-
-        public MoveAnnotationOnProxy(final ProxyMethodsVisitor decorator, final MethodVisitor methodVisitor) {
-            super(ASM5);
-            this.decorator = decorator;
-            this.delegate = methodVisitor;
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
-            final AnnotationRewriter rewriter = new AnnotationRewriter(rewriteTasks);
-            rewriteTasks.add(new Runnable() {
-                @Override
-                public void run() {
-                    rewriter.setDelegate(decorator.visitAnnotation(desc, visible));
-                }
-            });
-            return rewriter;
-        }
-
-        @Override
-        public AnnotationVisitor visitParameterAnnotation(final int parameter, final String desc, final boolean visible) {
-            final AnnotationRewriter rewriter = new AnnotationRewriter(rewriteTasks);
-            rewriteTasks.add(new Runnable() {
-                @Override
-                public void run() {
-                    rewriter.setDelegate(decorator.visitParameterAnnotation(parameter, desc, visible));
-                }
-            });
-            return rewriter;
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotationDefault() {
-            final AnnotationRewriter rewriter = new AnnotationRewriter(rewriteTasks);
-            rewriteTasks.add(new Runnable() {
-                @Override
-                public void run() {
-                    rewriter.setDelegate(decorator.visitAnnotationDefault());
+            return new AdviceAdapter(ASM5, visitor, access, name, desc) {
+                private int ctxLocal;
+                private final Label tryStart = new Label();
+                private final Label endLabel = new Label();
+                private final Label handlerLabel = new Label();
+
+                @Override
+                public void onMethodEnter() {
+                    final boolean isStatic = Modifier.isStatic(access);
+                    if (isStatic) {
+                        visitInsn(ACONST_NULL);
+                    } else {
+                        loadThis();
+                    }
+                    push(label);
+
+                    ctxLocal = newLocal(AGENT_CONTEXT);
+                    invokeStatic(AGENT_CONTEXT, START_METHOD);
+                    storeLocal(ctxLocal);
+
+                    visitLabel(tryStart);
+                }
+
+                @Override
+                public void onMethodExit(final int opCode) {
+                    if (opCode == ATHROW) {
+                        return;
+                    }
+
+                    int stateLocal = -1;
+                    if (opCode != MIN_VALUE) {
+                        final Type returnType = Type.getReturnType(desc);
+                        final boolean isVoid = Type.VOID_TYPE.equals(returnType);
+                        if (!isVoid) {
+                            stateLocal = newLocal(returnType);
+                            storeLocal(stateLocal);
+                        }
+                    } else {
+                        stateLocal = newLocal(THROWABLE_TYPE);
+                        storeLocal(stateLocal);
+                    }
+
+                    loadLocal(ctxLocal);
+                    if (stateLocal != -1) {
+                        loadLocal(stateLocal);
+                        if (opCode != MIN_VALUE) {
+                            valueOf(Type.getReturnType(desc));
+                        }
+                    } else {
+                        visitInsn(ACONST_NULL);
+                    }
+                    if (opCode != MIN_VALUE) {
+                        invokeVirtual(AGENT_CONTEXT, STOP_METHOD);
+                    } else {
+                        invokeVirtual(AGENT_CONTEXT, STOP_WITH_EXCEPTION_METHOD);
+                    }
+
+                    if (stateLocal != -1) {
+                        loadLocal(stateLocal);
+                    }
+
+                    if (opCode != MIN_VALUE) {
+                        visitLabel(endLabel);
+                    }
+                }
+
+                private void ensureLabelWasVisited(final Label label) {
+                    try {
+                        label.getOffset();
+                    } catch (final IllegalStateException ise) {
+                        visitLabel(label);
+                    }
+                }
+
+                @Override
+                public void visitMaxs(final int maxStack, final int maxLocals) {
+                    ensureLabelWasVisited(endLabel);
+                    visitLabel(handlerLabel);
+                    visitTryCatchBlock(tryStart, endLabel, handlerLabel, THROWABLE_TYPE.getInternalName());
+                    onMethodExit(MIN_VALUE);
+                    throwException();
+                    super.visitMaxs(0, 0);
                 }
-            });
-            return rewriter;
-        }
-
-        @Override
-        public void visitAttribute(Attribute attr) {
-            delegate.visitAttribute(attr);
-        }
-
-        @Override
-        public void visitCode() {
-            delegate.visitCode();
-        }
-
-        @Override
-        public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) {
-            delegate.visitFrame(type, nLocal, local, nStack, stack);
-        }
-
-        @Override
-        public void visitInsn(int opcode) {
-            delegate.visitInsn(opcode);
-        }
-
-        @Override
-        public void visitIntInsn(int opcode, int operand) {
-            delegate.visitIntInsn(opcode, operand);
-        }
-
-        @Override
-        public void visitVarInsn(int opcode, int var) {
-            delegate.visitVarInsn(opcode, var);
-        }
-
-        @Override
-        public void visitTypeInsn(int opcode, String type) {
-            delegate.visitTypeInsn(opcode, type);
-        }
-
-        @Override
-        public void visitFieldInsn(int opcode, String owner, String name, String desc) {
-            delegate.visitFieldInsn(opcode, owner, name, desc);
-        }
-
-        @Override
-        public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
-            delegate.visitMethodInsn(opcode, owner, name, desc, itf);
-        }
-
-        @Override
-        public void visitMethodInsn(int opcode, String owner, String name, String desc) {
-            delegate.visitMethodInsn(opcode, owner, name, desc);
-        }
-
-        @Override
-        public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) {
-            delegate.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-        }
-
-        @Override
-        public void visitJumpInsn(int opcode, Label label) {
-            delegate.visitJumpInsn(opcode, label);
-        }
-
-        @Override
-        public void visitLabel(Label label) {
-            delegate.visitLabel(label);
-        }
-
-        @Override
-        public void visitLdcInsn(Object cst) {
-            delegate.visitLdcInsn(cst);
-        }
-
-        @Override
-        public void visitIincInsn(int var, int increment) {
-            delegate.visitIincInsn(var, increment);
-        }
-
-        @Override
-        public void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels) {
-            delegate.visitTableSwitchInsn(min, max, dflt, labels);
-        }
-
-        @Override
-        public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
-            delegate.visitLookupSwitchInsn(dflt, keys, labels);
-        }
-
-        @Override
-        public void visitMultiANewArrayInsn(String desc, int dims) {
-            delegate.visitMultiANewArrayInsn(desc, dims);
-        }
-
-        @Override
-        public void visitTryCatchBlock(Label start, Label end, Label handler, String type) {
-            delegate.visitTryCatchBlock(start, end, handler, type);
-        }
-
-        @Override
-        public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) {
-            delegate.visitLocalVariable(name, desc, signature, start, end, index);
-        }
-
-        @Override
-        public void visitLineNumber(int line, Label start) {
-            delegate.visitLineNumber(line, start);
-        }
-
-        @Override
-        public void visitMaxs(int maxStack, int maxLocals) {
-            delegate.visitMaxs(maxStack, maxLocals);
-        }
-
-        @Override
-        public void visitEnd() {
-            delegate.visitEnd();
-
-            // generate proxy
-            for (final Runnable visitor : rewriteTasks) {
-                visitor.run();
-            }
-            decorator.visitCode();
-            decorator.visitEnd();
-        }
-    }
-
-    private static class AnnotationRewriter extends AnnotationVisitor {
-        private final Collection<Runnable> runnables;
-        private AnnotationVisitor delegate;
-
-        public AnnotationRewriter(final Collection<Runnable> tasks) {
-            super(ASM5);
-            this.runnables = tasks;
-        }
-
-        @Override
-        public void visit(final String name, final Object value) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    delegate.visit(name, value);
-                }
-            });
-        }
-
-        @Override
-        public void visitEnum(final String name, final String desc, final String value) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    delegate.visitEnum(name, desc, value);
-                }
-            });
-        }
-
-        @Override
-        public AnnotationVisitor visitAnnotation(final String name, final String desc) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    delegate.visitAnnotation(name, desc);
-                }
-            });
-            return this;
-        }
-
-        @Override
-        public AnnotationVisitor visitArray(final String name) {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    delegate.visitArray(name);
-                }
-            });
-            return this;
-        }
-
-        @Override
-        public void visitEnd() {
-            runnables.add(new Runnable() {
-                @Override
-                public void run() {
-                    delegate.visitEnd();
-                }
-            });
-        }
-
-        public void setDelegate(final AnnotationVisitor delegate) {
-            this.delegate = delegate;
+            };
         }
+        return visitor;
     }
 
-    // fast visitor used first to get static fields to generate
-    public static class SironaKeyVisitor extends ClassVisitor implements Opcodes {
-        private final String javaName;
-        private final Map<String, String> keys = new HashMap<String, String>();
-        private boolean isInterface;
-
-        public SironaKeyVisitor(final String javaName) {
-            super(ASM4, null);
-            this.javaName = javaName;
-        }
-
-        @Override
-        public void visit(final int version, final int access, final String name,
-                          final String signature, final String supername, final String[] interfaces) {
-            this.isInterface = ((access & Opcodes.ACC_INTERFACE) != 0);
-        }
-
-        @Override
-        public MethodVisitor visitMethod(int access, final String name, final String desc, final String signature, final String[] exceptions) {
-            if (!isSironable(access, name)) {
-                return null;
-            }
-
-            final String label = javaName.replace("/", ".") + "." + name;
-            if (AgentContext.listeners(label) != null) {
-                // generate "proxy" method and store the associated field for counter key (generated at the end)
-                final String fieldName = name + FIELD_SUFFIX;
-                if (!keys.containsKey(fieldName)) {
-                    keys.put(fieldName, label);
-                }
-            }
-            return null;
-        }
-
-        public boolean hasAdviced() {
-            return !isInterface && !keys.isEmpty();
-        }
-
-        public Map<String, String> getKeys() {
-            return keys;
-        }
+    private static boolean isSironable(final int access, final String name) {
+        return !name.equals(STATIC_INIT) && !name.equals(CONSTRUCTOR)
+                && !Modifier.isAbstract(access) && !Modifier.isNative(access);
     }
 
-    // fork from org.objectweb.asm.commons.StaticInitMerger to force our contants to be first
-    private static class SironaStaticInitMerger extends ClassVisitor {
-        private final Map<String, String> keys;
-
-        private String name;
-        private MethodVisitor clinit;
-        private int counter;
-
-        protected SironaStaticInitMerger(final ClassVisitor cv, final Map<String, String> keys) {
-            super(ASM4, cv);
-            this.keys = keys;
-        }
-
-        @Override
-        public void visit(final int version, final int access, final String name,
-                          final String signature, final String superName,
-                          final String[] interfaces) {
-            cv.visit(version, access, name, signature, superName, interfaces);
-            this.name = name;
-        }
-
-        @Override
-        public MethodVisitor visitMethod(final int access, final String name,
-                                         final String desc, final String signature, final String[] exceptions) {
-            if (STATIC_INIT.equals(name)) {
-                final String n = STATIC_CLINT_MERGE_PREFIX + counter++;
-                final MethodVisitor mv = cv.visitMethod(ACC_PRIVATE + ACC_STATIC, n, desc, signature, exceptions);
-                clinit.visitMethodInsn(INVOKESTATIC, this.name, n, desc, false);
-                return mv;
-            }
-            return cv.visitMethod(access, name, desc, signature, exceptions);
-        }
-
-        @Override
-        public void visitEnd() {
-            clinit.visitInsn(Opcodes.RETURN);
-            clinit.visitMaxs(0, 0);
-            clinit.visitEnd();
-
-            cv.visitEnd();
-        }
-
-        public void initSironaFields(final Type classType) {
-            // generate keys first
-            for (final String key : keys.keySet()) {
-                visitField(CONSTANT_ACCESS, key, KEY_TYPE.getDescriptor(), null, null).visitEnd();
-            }
-
-            // init them in static block
-            clinit = cv.visitMethod(ACC_PRIVATE + ACC_STATIC, STATIC_INIT, NO_PARAM_RETURN_VOID, null, null);
-            for (final Map.Entry<String, String> key : keys.entrySet()) {
-                clinit.visitLdcInsn(key.getValue());
-                clinit.visitFieldInsn(PUTSTATIC, classType.getInternalName(), key.getKey(), KEY_TYPE.getDescriptor());
-            }
-        }
+    public boolean wasAdviced() {
+        return count > 0;
     }
 }

Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java Sat Mar 22 14:46:37 2014
@@ -46,29 +46,27 @@ public class SironaTransformer implement
 
     protected byte[] doTransform(final String className, final byte[] classfileBuffer) {
         try {
-            final SironaClassVisitor.SironaKeyVisitor keyVisitor = new SironaClassVisitor.SironaKeyVisitor(className);
-            new ClassReader(classfileBuffer).accept(keyVisitor, ClassReader.SKIP_DEBUG);
-            if (keyVisitor.hasAdviced()) {
-                final ClassReader reader = new ClassReader(classfileBuffer);
-                final ClassWriter writer = new SironaClassWriter(reader, ClassWriter.COMPUTE_FRAMES);
-                final SironaClassVisitor advisor = new SironaClassVisitor(writer, className, keyVisitor.getKeys());
-                reader.accept(advisor, 0);
-
-                final byte[] bytes = writer.toByteArray();
-                if (debug) {
-                    final File dump = new File(System.getProperty("java.io.tmpdir"), "sirona-dump/" + className + ".class");
-                    dump.getParentFile().mkdirs();
-                    FileOutputStream w = null;
-                    try {
-                        w = new FileOutputStream(dump);
-                        w.write(bytes);
-                    } finally {
-                        if (w != null) {
-                            w.close();
-                        }
+            final ClassReader reader = new ClassReader(classfileBuffer);
+            final ClassWriter writer = new SironaClassWriter(reader, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
+            final SironaClassVisitor advisor = new SironaClassVisitor(writer, className);
+            reader.accept(advisor, ClassReader.SKIP_FRAMES);
+
+            final byte[] bytes = writer.toByteArray();
+            if (debug) {
+                final File dump = new File(System.getProperty("java.io.tmpdir"), "sirona-dump/" + className + ".class");
+                dump.getParentFile().mkdirs();
+                FileOutputStream w = null;
+                try {
+                    w = new FileOutputStream(dump);
+                    w.write(bytes);
+                } finally {
+                    if (w != null) {
+                        w.close();
                     }
                 }
+            }
 
+            if (advisor.wasAdviced()) {
                 return bytes;
             }
             return classfileBuffer;

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/AgentPerfInterceptorAgentContractTest.java Sat Mar 22 14:46:37 2014
@@ -35,7 +35,7 @@ public class AgentPerfInterceptorAgentCo
     @Test
     public void start() {
         final String key = "start";
-        final AgentContext context = AgentContext.startOn(key, null);
+        final AgentContext context = AgentContext.startOn(null, key);
         context.stop(null);
         assertEquals("org.apache.sirona.javaagent.AgentContext", context.getClass().getName());
         assertEquals(1, Repository.INSTANCE.getCounter(AgentContext.key(key)).getHits());
@@ -45,7 +45,7 @@ public class AgentPerfInterceptorAgentCo
     public void attributes() {
         final String key = "ref";
         final Object instance = new Object();
-        final AgentContext context = AgentContext.startOn(key, instance);
+        final AgentContext context = AgentContext.startOn(instance, key);
         context.stop(null);
         assertEquals(instance, context.getReference());
         assertEquals(key, context.getKey());

Copied: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/DebugTest.java (from r1579888, incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java)
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/DebugTest.java?p2=incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/DebugTest.java&p1=incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java&r1=1579888&r2=1580218&rev=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/DebugTest.java Sat Mar 22 14:46:37 2014
@@ -16,194 +16,40 @@
  */
 package org.apache.test.sirona.javaagent;
 
-import org.apache.sirona.Role;
-import org.apache.sirona.counters.Counter;
-import org.apache.sirona.javaagent.AgentArgs;
+import org.apache.sirona.javaagent.AgentContext;
 import org.apache.sirona.javaagent.JavaAgentRunner;
-import org.apache.sirona.javaagent.listener.CounterListener;
-import org.apache.sirona.repositories.Repository;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 @RunWith(JavaAgentRunner.class)
-public class SimpleTest {
-    @Test
-    public void ensureStaticBlocksAreKept() throws Exception {
-        assertTrue(ServiceTransform.staticInit);
-    }
-
-    @Test
-    public void staticMonitoring() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$StaticTransform.monitorMe", 0);
-        assertEquals(1, StaticTransform.init);
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$StaticTransform.monitorMe", 1);
-    }
-
-    @Test
-    public void staticMethod() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.staticMethod", 0);
-        ServiceTransform.staticMethod();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.staticMethod", 1);
-    }
-
-    @Test
-    public void noReturnWithoutStatic() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceNoStaticTransform.noReturn", 0);
-        new ServiceNoStaticTransform().noReturn();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceNoStaticTransform.noReturn", 1);
-    }
-
-    @Test
-    public void noReturn() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.noReturn", 0);
-        new ServiceTransform().noReturn();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.noReturn", 1);
-    }
-
-    @Test
-    public void withReturn() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.withReturn", 0);
-        new ServiceTransform().withReturn();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.withReturn", 1);
-    }
-
+public class DebugTest {
     @Test
-    public void nested() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.nest", 0);
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$Service2Transform.nested", 0);
-        new ServiceTransform().nest();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.nest", 1);
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$Service2Transform.nested", 1);
+    public void debug() throws Throwable {
+        new ServiceNoStaticTransform().f();
     }
 
-    @Test
-    public void exception() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.exception", 0);
-        try {
-            new ServiceTransform().exception();
-            fail();
-        } catch (final IllegalArgumentException iae) {
-            // OK
-        }
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.exception", 1);
-        assertException(1, IllegalArgumentException.class);
-    }
-
-    @Test
-    public void alreadyTryCatch() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.alreadyTryCatch", 0);
-        new ServiceTransform().alreadyTryCatch();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.alreadyTryCatch", 1);
-        assertException(0, NullPointerException.class);
-    }
-
-    @Test
-    public void primitive() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 0);
-        ServiceTransform.soPrimitive();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 1);
-    }
-
-    @Test
-    public void annotations() throws NoSuchMethodException {
-        assertTrue(ServiceWithAnnotationTransform.class.getMethod("mtd").getAnnotation(AgentArgs.class) != null);
-        assertTrue(ServiceWithAnnotationTransform.class.getDeclaredMethod("mtd_$_$irona_$_internal_$_original_$_").getAnnotation(AgentArgs.class) == null);
-    }
-
-    @Test
-    @AgentArgs(value = CounterListener.DISABLE_PARAMETER_KEY)
-    public void primitiveDisable() {
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 0);
-        ServiceTransform.soPrimitive();
-        assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 0);
-    }
-
-    private static void assertException(final int count, final Class<?> exception) {
-        int iae = 0;
-        for (final Counter c : Repository.INSTANCE.counters()) {
-            if (c.getKey().getName().contains(exception.getName())) {
-                iae++;
-            }
-        }
-        assertEquals(count, iae);
-    }
-
-    private static void assertHits(final String name, final int expected) {
-        assertEquals(expected, Repository.INSTANCE.getCounter(new Counter.Key(Role.PERFORMANCES, name)).getHits());
-    }
-
-    public static class ServiceTransform {
-        public static boolean staticInit = false;
-
-        static {
-            staticInit = true;
-        }
-
-        public void noReturn() {
-            // no-op
-        }
-
-        public static int soPrimitive() {
-            return 1;
-        }
-
-        public static String staticMethod() {
-            return "ok";
-        }
-
-        public String withReturn() {
-            return "ok";
-        }
-
-        public String nest() {
-            return new Service2Transform().nested();
-        }
-
-        public void exception() {
-            throw new IllegalArgumentException();
-        }
-
-        public void alreadyTryCatch() {
+    public static class ServiceNoStaticTransform {
+        public void f() {
             try {
                 throw new NullPointerException();
             } catch (final NullPointerException iae) {
                 // no-op
             }
         }
-    }
-
-    public static class ServiceNoStaticTransform {
-        public void noReturn() {
-            // no-op
-        }
-    }
-
-    public static class Service2Transform {
-        public String nested() {
-            return null;
-        }
-    }
-
-    public static class ServiceWithAnnotationTransform {
-        @AgentArgs("")
-        public void mtd() {
-            // no-op
-        }
-    }
-
-    public static class StaticTransform {
-        private static int init = 0;
 
-        static {
-            init = monitorMe();
-        }
-
-        public static int monitorMe() {
-            return 1;
+        public void f2() {
+            AgentContext localAgentContext = AgentContext.startOn(this, "org.apache.test.sirona.javaagent.DebugTest$ServiceNoStaticTransform.f");
+            try {
+                try {
+                    throw new NullPointerException();
+                } catch (NullPointerException iae) {
+                    localAgentContext.stop(null);
+                    return;
+                }
+            } catch (Throwable localThrowable) {
+                localAgentContext.stopWithException(localThrowable);
+                throw new RuntimeException(localThrowable);
+            }
         }
     }
 }

Added: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java?rev=1580218&view=auto
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java (added)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/EnsureInstrumationDoesntFailTest.java Sat Mar 22 14:46:37 2014
@@ -0,0 +1,61 @@
+/*
+ * 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.test.sirona.javaagent;
+
+import org.apache.sirona.javaagent.SironaTransformer;
+import org.junit.Test;
+
+import java.lang.instrument.IllegalClassFormatException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+public class EnsureInstrumationDoesntFailTest {
+    @Test // just check it doesn't throw an exception, mainly a debug test
+    public void run() throws IllegalClassFormatException {
+        new SironaTransformer(true)
+                .transform(
+                        new URLClassLoader(new URL[0]), App.class.getName().replace('.', '/'),
+                        App.class, App.class.getProtectionDomain(), new byte[]{
+                                -54, -2, -70, -66, 0, 0, 0, 50, 0, 60, 10, 0, 17, 0, 37, 5,
+                                0, 0, 0, 0, 0, 0, 1, -12, 10, 0, 38, 0, 39, 10, 0, 16, 0,
+                                40, 10, 0, 16, 0, 41, 5, 0, 0, 0, 0, 0, 0, 0, 100, 10, 0,
+                                16, 0, 42, 5, 0, 0, 0, 0, 0, 0, 1, 44, 7, 0, 43, 9, 0, 44,
+                                0, 45, 10, 0, 12, 0, 46, 10, 0, 44, 0, 47, 7, 0, 48, 7, 0,
+                                49, 1, 0, 10, 76, 111, 103, 72, 97, 110, 100, 108, 101,
+                                114, 1, 0, 12, 73, 110, 110, 101, 114, 67, 108, 97, 115,
+                                115, 101, 115, 1, 0, 6, 60, 105, 110, 105, 116, 62, 1, 0,
+                                3, 40, 41, 86, 1, 0, 4, 67, 111, 100, 101, 1, 0, 15, 76, 105, 110,
+                                101, 78, 117, 109, 98, 101, 114, 84, 97, 98, 108, 101, 1, 0, 18,
+                                76, 111, 99, 97, 108, 86, 97, 114, 105, 97, 98, 108, 101, 84, 97,
+                                98, 108, 101, 1, 0, 4, 116, 104, 105, 115, 1, 0, 38, 76, 111, 114,
+                                103, 47, 97, 112, 97, 99, 104, 101, 47, 116, 101, 115, 116, 47, 115,
+                                105, 114, 111, 110, 97, 47, 106, 97, 118, 97, 97, 103, 101, 110, 116,
+                                47, 65, 112, 112, 59, 1, 0, 3, 102, 111, 111, 1, 0, 10, 69, 120, 99,
+                                101, 112, 116, 105, 111, 110, 115, 7, 0, 50, 1, 0, 4, 98, 101, 101,
+                                114, 1, 0, 3, 112, 117, 98, 1, 0, 3, 98, 97, 114, 1, 0, 17, 114, 101,
+                                100, 105, 114, 101, 99, 116, 83, 116, 114, 101, 97, 109, 111, 117, 116, 1,
+                                0, 40, 40, 41, 76, 111, 114, 103, 47, 97, 112, 97, 99, 104, 101, 47, 116, 101,
+                                115, 116, 47, 115, 105, 114, 111, 110, 97, 47, 106, 97, 118, 97, 97,
+                                103, 101, 110, 116, 47, 65, 112, 112, 59, 1, 0, 10, 83, 111, 117, 114,
+                                99, 101, 70, 105, 108, 101, 1, 0, 8, 65, 112, 112, 46, 106, 97, 118,
+                                97, 12, 0, 20, 0, 21, 7, 0, 51, 12, 0, 52, 0, 53, 12, 0, 27, 0, 21, 12,
+                                0, 31, 0, 21, 12, 0, 32, 0, 21, 1, 0, 47, 111, 114, 103, 47, 97, 112, 97,
+                                99, 104, 101, 47, 116, 101, 115, 116, 47, 115, 105, 114, 111, 110, 97, 47, 106, 97, 118, 97, 97, 103, 101, 110, 116, 47, 65, 112, 112, 36, 76, 111, 103, 72, 97, 110, 100, 108, 101, 114, 7, 0, 54, 12, 0, 55, 0, 56, 12, 0, 20, 0, 57, 12, 0, 58, 0, 59, 1, 0, 36, 111, 114, 103, 47, 97, 112, 97, 99, 104, 101, 47, 116, 101, 115, 116, 47, 115, 105, 114, 111, 110, 97, 47, 106, 97, 118, 97, 97, 103, 101, 110, 116, 47, 65, 112, 112, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 79, 98, 106, 101, 99, 116, 1, 0, 19, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 69, 120, 99, 101, 112, 116, 105, 111, 110, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 84, 104, 114, 101, 97, 100, 1, 0, 5, 115, 108, 101, 101, 112, 1, 0, 4, 40, 74, 41, 86, 1, 0, 16, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 121, 115, 116, 101, 109, 1, 0, 3, 111, 117, 116, 1, 0, 21, 76, 106, 97, 118, 97, 47, 105, 111, 47, 80, 114, 105, 110, 116, 83, 116, 114, 101, 97, 109, 59, 1,
  0, 25, 40, 76, 106, 97, 118, 97, 47, 105, 111, 47, 79, 117, 116, 112, 117, 116, 83, 116, 114, 101, 97, 109, 59, 41, 86, 1, 0, 6, 115, 101, 116, 79, 117, 116, 1, 0, 24, 40, 76, 106, 97, 118, 97, 47, 105, 111, 47, 80, 114, 105, 110, 116, 83, 116, 114, 101, 97, 109, 59, 41, 86, 0, 33, 0, 16, 0, 17, 0, 0, 0, 0, 0, 6, 0, 1, 0, 20, 0, 21, 0, 1, 0, 22, 0, 0, 0, 51, 0, 1, 0, 1, 0, 0, 0, 5, 42, -73, 0, 1, -79, 0, 0, 0, 2, 0, 23, 0, 0, 0, 10, 0, 2, 0, 0, 0, 25, 0, 4, 0, 61, 0, 24, 0, 0, 0, 12, 0, 1, 0, 0, 0, 5, 0, 25, 0, 26, 0, 0, 0, 1, 0, 27, 0, 21, 0, 2, 0, 22, 0, 0, 0, 53, 0, 2, 0, 1, 0, 0, 0, 7, 20, 0, 2, -72, 0, 4, -79, 0, 0, 0, 2, 0, 23, 0, 0, 0, 10, 0, 2, 0, 0, 0, 31, 0, 6, 0, 32, 0, 24, 0, 0, 0, 12, 0, 1, 0, 0, 0, 7, 0, 25, 0, 26, 0, 0, 0, 28, 0, 0, 0, 4, 0, 1, 0, 29, 0, 1, 0, 30, 0, 21, 0, 2, 0, 22, 0, 0, 0, 59, 0, 1, 0, 1, 0, 0, 0, 9, 42, -74, 0, 5, 42, -74, 0, 6, -79, 0, 0, 0, 2, 0, 23, 0, 0, 0, 14, 0, 3, 0, 0, 0, 37, 0, 4, 0, 38, 0, 8, 0, 39, 0, 24, 0, 0, 0, 12, 0, 1, 0, 0, 0, 9,
  0, 25, 0, 26, 0, 0, 0, 28, 0, 0, 0, 4, 0, 1, 0, 29, 0, 1, 0, 31, 0, 21, 0, 2, 0, 22, 0, 0, 0, 61, 0, 2, 0, 1, 0, 0, 0, 11, 20, 0, 7, -72, 0, 4, 42, -74, 0, 9, -79, 0, 0, 0, 2, 0, 23, 0, 0, 0, 14, 0, 3, 0, 0, 0, 44, 0, 6, 0, 45, 0, 10, 0, 46, 0, 24, 0, 0, 0, 12, 0, 1, 0, 0, 0, 11, 0, 25, 0, 26, 0, 0, 0, 28, 0, 0, 0, 4, 0, 1, 0, 29, 0, 1, 0, 32, 0, 21, 0, 2, 0, 22, 0, 0, 0, 53, 0, 2, 0, 1, 0, 0, 0, 7, 20, 0, 10, -72, 0, 4, -79, 0, 0, 0, 2, 0, 23, 0, 0, 0, 10, 0, 2, 0, 0, 0, 51, 0, 6, 0, 52, 0, 24, 0, 0, 0, 12, 0, 1, 0, 0, 0, 7, 0, 25, 0, 26, 0, 0, 0, 28, 0, 0, 0, 4, 0, 1, 0, 29, 0, 1, 0, 33, 0, 34, 0, 1, 0, 22, 0, 0, 0, 61, 0, 3, 0, 1, 0, 0, 0, 15, -69, 0, 12, 89, -78, 0, 13, -73, 0, 14, -72, 0, 15, 42, -80, 0, 0, 0, 2, 0, 23, 0, 0, 0, 10, 0, 2, 0, 0, 0, 57, 0, 13, 0, 58, 0, 24, 0, 0, 0, 12, 0, 1, 0, 0, 0, 15, 0, 25, 0, 26, 0, 0, 0, 2, 0, 35, 0, 0, 0, 2, 0, 36, 0, 19, 0, 0, 0, 10, 0, 1, 0, 12, 0, 16, 0, 18, 0, 10
+                        }
+                );
+    }
+}

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java Sat Mar 22 14:46:37 2014
@@ -111,7 +111,6 @@ public class SimpleTest {
     @Test
     public void annotations() throws NoSuchMethodException {
         assertTrue(ServiceWithAnnotationTransform.class.getMethod("mtd").getAnnotation(AgentArgs.class) != null);
-        assertTrue(ServiceWithAnnotationTransform.class.getDeclaredMethod("mtd_$_$irona_$_internal_$_original_$_").getAnnotation(AgentArgs.class) == null);
     }
 
     @Test

Modified: incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties?rev=1580218&r1=1580217&r2=1580218&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/resources/sirona.properties Sat Mar 22 14:46:37 2014
@@ -22,7 +22,8 @@ org.apache.sirona.javaagent.listener.Pat
   prefix:org.junit,\
   prefix:junit, \
   prefix:org.junit, \
-  prefix:com.apple
+  prefix:com.apple,\
+  container:jvm
 
 org.apache.sirona.javaagent.listener.CounterListener.excludes = \
   prefix:java,\
@@ -32,7 +33,8 @@ org.apache.sirona.javaagent.listener.Cou
   prefix:org.junit,\
   prefix:junit, \
   prefix:org.junit, \
-  prefix:com.apple
+  prefix:com.apple\
+  container:jvm
 
 
 org.apache.sirona.javaagent.path.tracking.activate=false