External Agent
External Agent
Lucee provides a Java agent (lucee-external-agent.jar) that registers a java.lang.instrument.Instrumentation instance for use within Lucee. This enables class redefinition and retransformation at runtime.
Download
Download the agent JAR from GitHub:
Configuration
Add the agent to your JVM startup arguments using the -javaagent flag:
-javaagent:/path/to/lucee-external-agent.jar
Servlet Container Examples
Tomcat — Add to CATALINA_OPTS in setenv.sh (Linux/macOS) or setenv.bat (Windows):
export CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/lucee/lib/lucee-external-agent.jar"
CommandBox — Add to your server.json:
{
"jvm": {
"args": "-javaagent=/opt/lucee/lib/lucee-external-agent.jar"
}
}
Docker
ENV CATALINA_OPTS="-javaagent:/opt/lucee/lib/lucee-external-agent.jar"
How It Works
The agent's main class (lucee.runtime.instrumentation.ExternalAgent) implements both premain and agentmain entry points, meaning it can be loaded at JVM startup or attached at runtime. Once loaded, it makes the Instrumentation instance available to Lucee, enabling capabilities such as class redefinition and retransformation.
Agent Capabilities
| Capability | Supported |
|---|---|
| Redefine Classes | ✅ |
| Retransform Classes | ✅ |