Skip to content

Commit

Permalink
Allow instrumentation to be used with Attach API
Browse files Browse the repository at this point in the history
Update InstrumentationSavingAgent to allow it to be used with the
Attach API

Issue: SPR-11083
  • Loading branch information
cdupuis authored and Phillip Webb committed Nov 20, 2013
1 parent 41cdbd2 commit f6f0adf
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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.
Expand All @@ -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() {
Expand Down

0 comments on commit f6f0adf

Please sign in to comment.