Package javassist.util

# Class HotSwapAgent

java.lang.Object
javassist.util.HotSwapAgent

public class HotSwapAgent extends Object
A utility class for dynamically adding a new method or modifying an existing method body. This class provides `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.

Since:
  3.22
See Also:
  - `redefine(Class, CtClass)`
  - `redefine(Class[], CtClass[])`

## Constructor Summary

Constructors
Constructor
Description
`HotSwapAgent()`

## Method Summary

Modifier and Type
Method
Description
`static void`
`agentmain(String agentArgs, Instrumentation inst)`
The entry point invoked when this agent is started after the JVM starts.
`static File`
`createAgentJarFile(String fileName)`
Creates an agent file for using `HotSwapAgent`.
`Instrumentation`
`instrumentation()`
Obtains the `Instrumentation` object.
`static void`
`premain(String agentArgs, Instrumentation inst)`
The entry point invoked when this agent is started by `-javaagent`.
`static void`
`redefine(Class<?>[] oldClasses, CtClass[] newClasses)`
Redefines classes.
`static void`
`redefine(Class<?> oldClass, CtClass newClass)`
Redefines a class.

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### HotSwapAgent

public HotSwapAgent()

## Method Details

### instrumentation

public Instrumentation instrumentation()
Obtains the `Instrumentation` object.

Returns:
  null when it is not available.

### premain

public static void premain(String agentArgs, Instrumentation inst) throws Throwable
The entry point invoked when this agent is started by `-javaagent`.

Throws:
  `Throwable`

### agentmain

public static void agentmain(String agentArgs, Instrumentation inst) throws Throwable
The entry point invoked when this agent is started after the JVM starts.

Throws:
  `Throwable`

### redefine

public static void redefine(Class<?> oldClass, CtClass newClass) throws NotFoundException, IOException, CannotCompileException
Redefines a class.

Throws:
  `NotFoundException`
  `IOException`
  `CannotCompileException`

### redefine

public static void redefine(Class<?>[] oldClasses, CtClass[] newClasses) throws NotFoundException, IOException, CannotCompileException
Redefines classes.

Throws:
  `NotFoundException`
  `IOException`
  `CannotCompileException`

### createAgentJarFile

public static File createAgentJarFile(String fileName) throws IOException, CannotCompileException, NotFoundException
Creates an agent file for using `HotSwapAgent`.

Throws:
  `IOException`
  `CannotCompileException`
  `NotFoundException`