Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Allow instrumentation to be used with Attach API

Update InstrumentationSavingAgent to allow it to be used with the
Attach API

Issue: SPR-11083
  • Loading branch information...
commit f6f0adf63bc9c4e738482dc05053dbb239b686d6 1 parent 41cdbd2
@cdupuis cdupuis authored philwebb committed
View
2  build.gradle
@@ -327,6 +327,8 @@ project("spring-instrument") {
jar {
manifest.attributes["Premain-Class"] =
"org.springframework.instrument.InstrumentationSavingAgent"
+ manifest.attributes["Agent-Class"] =
+ "org.springframework.instrument.InstrumentationSavingAgent"
manifest.attributes["Can-Redefine-Classes"] = "true"
manifest.attributes["Can-Retransform-Classes"] = "true"
manifest.attributes["Can-Set-Native-Method-Prefix"] = "false"
View
14 ...g-instrument/src/main/java/org/springframework/instrument/InstrumentationSavingAgent.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2012 the original author or authors.
+ * Copyright 2002-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -39,6 +39,13 @@ public static void premain(String agentArgs, Instrumentation inst) {
instrumentation = inst;
}
+ /**
+ * Save the {@link Instrumentation} interface exposed by the JVM.
+ * This method is required to dynamically load this Agent with the Attach API.
+ */
+ public static void agentmain(String agentArgs, Instrumentation inst) {
+ instrumentation = inst;
+ }
/**
* Return the {@link Instrumentation} interface exposed by the JVM.
@@ -48,8 +55,9 @@ public static void premain(String agentArgs, Instrumentation inst) {
* {@link org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver#getInstrumentation()}
* instead - which will work without the agent class in the classpath as well.
* @return the {@code Instrumentation} instance previously saved when
- * the {@link #premain} method was called by the JVM; will be {@code null}
- * if this class was not used as Java agent when this JVM was started.
+ * the {@link #premain} or {@link #agentmain} methods was called by the JVM;
+ * will be {@code null} if this class was not used as Java agent when this
+ * JVM was started or it wasn't installed as agent using the Attach API.
* @see org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver#getInstrumentation()
*/
public static Instrumentation getInstrumentation() {
Please sign in to comment.
Something went wrong with that request. Please try again.