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