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[])
| Modifier and Type | Field and Description |
|---|---|
| private static Instrumentation |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| public static void | agentmain(String agentArgs, Instrumentation inst)
The entry point invoked when this agent is started after the JVM starts. |
| public static File | |
| private static File | |
| private static File | |
| public Instrumentation | |
| public static void | premain(String agentArgs, Instrumentation inst)
The entry point invoked when this agent is started by |
| public static void | |
| public static void | |
| private static void |
| instrumentation | back to summary |
|---|---|
| private static Instrumentation instrumentation | |
| HotSwapAgent | back to summary |
|---|---|
| public HotSwapAgent() | |
| agentmain | back to summary |
|---|---|
| public static void agentmain(String agentArgs, Instrumentation inst) throws Throwable The entry point invoked when this agent is started after the JVM starts. | |
| createAgentJarFile | back to summary |
|---|---|
| public static File createAgentJarFile(String fileName) throws IOException, CannotCompileException, NotFoundException Creates an agent file for using | |
| createJarFile | back to summary |
|---|---|
| private static File createJarFile() throws IOException, CannotCompileException, NotFoundException | |
| createJarFile | back to summary |
|---|---|
| private static File createJarFile(File jar) throws IOException, CannotCompileException, NotFoundException | |
| instrumentation | back to summary |
|---|---|
| public Instrumentation instrumentation() Obtains the
| |
| premain | back to summary |
|---|---|
| public static void premain(String agentArgs, Instrumentation inst) throws Throwable The entry point invoked when this agent is started by | |
| redefine | back to summary |
|---|---|
| public static void redefine(Class<?> oldClass, CtClass newClass) throws NotFoundException, IOException, CannotCompileException Redefines a class. | |
| redefine | back to summary |
|---|---|
| public static void redefine(Class<?>[] oldClasses, CtClass[] newClasses) throws NotFoundException, IOException, CannotCompileException Redefines classes. | |
| startAgent | back to summary |
|---|---|
| private static void startAgent() throws NotFoundException Ensures that the agent is ready. It attempts to dynamically start the agent if necessary. | |