public class HotSwapAgent
extends java.lang.Object
redefine(Class, CtClass)
and redefine(Class[], CtClass[])
, which replace the
existing class definition with a new one.
These methods perform the replacement by
java.lang.instrument.Instrumentation
. For details
of acceptable modification,
see the Instrumentation
interface.
Before calling the redefine
methods, the hotswap agent
has to be deployed.
To create a hotswap agent, run createAgentJarFile(String)
.
For example, the following command creates an agent file named hotswap.jar
.
$ jshell --class-path javassist.jar jshell> javassist.util.HotSwapAgent.createAgentJarFile("hotswap.jar")
Then, run the JVM with the VM argument -javaagent:hotswap.jar
to deploy the hotswap agent.
If the -javaagent
option is not given to the JVM, HotSwapAgent
attempts to automatically create and start the hotswap agent on demand.
This automated deployment may fail. If it fails, manually create the hotswap agent
and deploy it by -javaagent
.
The HotSwapAgent
requires tools.jar
as well as javassist.jar
.
The idea of this class was given by Adam Lugowski.
Shigeru Chiba wrote this class by referring
to his RedefineClassAgent
.
For details, see this discussion.
redefine(Class, CtClass)
,
redefine(Class[], CtClass[])
Constructor | Description |
---|---|
HotSwapAgent() |
Modifier and Type | Method | Description |
---|---|---|
static void |
agentmain(java.lang.String agentArgs,
java.lang.instrument.Instrumentation inst) |
The entry point invoked when this agent is started after the JVM starts.
|
static java.io.File |
createAgentJarFile(java.lang.String fileName) |
Creates an agent file for using
HotSwapAgent . |
java.lang.instrument.Instrumentation |
instrumentation() |
Obtains the
Instrumentation object. |
static void |
premain(java.lang.String agentArgs,
java.lang.instrument.Instrumentation inst) |
The entry point invoked when this agent is started by
-javaagent . |
static void |
redefine(java.lang.Class[] oldClasses,
CtClass[] newClasses) |
Redefines classes.
|
static void |
redefine(java.lang.Class oldClass,
CtClass newClass) |
Redefines a class.
|
public java.lang.instrument.Instrumentation instrumentation()
Instrumentation
object.public static void premain(java.lang.String agentArgs, java.lang.instrument.Instrumentation inst) throws java.lang.Throwable
-javaagent
.java.lang.Throwable
public static void agentmain(java.lang.String agentArgs, java.lang.instrument.Instrumentation inst) throws java.lang.Throwable
java.lang.Throwable
public static void redefine(java.lang.Class oldClass, CtClass newClass) throws NotFoundException, java.io.IOException, CannotCompileException
NotFoundException
java.io.IOException
CannotCompileException
public static void redefine(java.lang.Class[] oldClasses, CtClass[] newClasses) throws NotFoundException, java.io.IOException, CannotCompileException
NotFoundException
java.io.IOException
CannotCompileException
public static java.io.File createAgentJarFile(java.lang.String fileName) throws java.io.IOException, CannotCompileException, NotFoundException
HotSwapAgent
.java.io.IOException
CannotCompileException
NotFoundException
Copyright © 2018 Shigeru Chiba, www.javassist.org. All Rights Reserved.