public class AgentWrapper
extends java.lang.Object
implements java.lang.reflect.InvocationHandler
AgentBridge.getAgent(), but this won't work since the bootstrap classloader has no visibility to our
classes. Also, because the bootstrap classloader has no visibility to our classes it cannot directly invoke any
methods on our interfaces and classes even if it has an object reference.
This wrapper is also necessary because some classloader implementations impose rules that strict classloading
visibility. OSGi classloaders are a good example.
We work around this problem by sticking a reference to our agent in Proxy. We use this class as a wrapper so
that the object implement InvocationHandler, which is visible to the bootstrap classloader. The
instrumentation code then makes calls to get a tracer and to finish the tracer through this reflection interface.| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
CLASSLOADER_KEY |
static java.lang.String |
SUCCESSFUL_METHOD_INVOCATION |
static java.lang.String |
UNSUCCESSFUL_METHOD_INVOCATION |
| Modifier and Type | Method and Description |
|---|---|
static AgentWrapper |
getAgentWrapper(PointCutClassTransformer classTransformer) |
java.lang.Object |
invoke(java.lang.Object proxy,
java.lang.reflect.Method method,
java.lang.Object[] args) |
static com.newrelic.agent.bridge.ExitTracer |
invoke(PointCutInvocationHandler invocationHandler,
java.lang.String className,
java.lang.String methodName,
java.lang.String methodDesc,
java.lang.Object invocationTarget,
java.lang.Object[] args) |
public static final java.lang.String CLASSLOADER_KEY
public static final java.lang.String SUCCESSFUL_METHOD_INVOCATION
public static final java.lang.String UNSUCCESSFUL_METHOD_INVOCATION
public static AgentWrapper getAgentWrapper(PointCutClassTransformer classTransformer)
public java.lang.Object invoke(java.lang.Object proxy,
java.lang.reflect.Method method,
java.lang.Object[] args)
invoke in interface java.lang.reflect.InvocationHandlerInvocationHandlerTracingMethodAdapter,
ReflectionStyleClassMethodAdapterpublic static com.newrelic.agent.bridge.ExitTracer invoke(PointCutInvocationHandler invocationHandler, java.lang.String className, java.lang.String methodName, java.lang.String methodDesc, java.lang.Object invocationTarget, java.lang.Object[] args)
ReflectionStyleClassMethodAdapter