Verbatime

Examples#

Ready-to-run applications in examples/ to try Verbatime on. Each one runs in Docker Compose and builds the agent from the repository.

You need Docker with Compose v2, and JDK Mission Control with the Verbatime plugin.

Try one#

  1. Start an example.
    cd examples/spring-boot-mvc
    docker compose up --build
    
  2. Within 60 seconds, connect JDK Mission Control to localhost:7091 and press Start recording. The roots are already set, and startup is recorded too.
  3. Send load for 30 seconds.
    docker compose --profile load run --rm load
    
  4. Press Stop recording, then shut the example down.
    docker compose down -v
    

Run one example at a time. They all use port 8080 for HTTP and port 7091 for JMX.

Pick an example#

Every example runs the same small order workload, so their recordings are easy to compare.

Web servers#

Example What it shows
plain-httpserver The JDK's built-in HTTP server, with no framework
spring-boot-mvc Spring Boot MVC on embedded Tomcat
thymeleaf Spring Boot MVC rendering HTML with Thymeleaf
scheduled-task Spring Boot running the work from @Scheduled
undertow Embedded Undertow with a blocking handler
helidon-se Helidon SE on virtual threads
micronaut Micronaut on Netty
quarkus Quarkus REST in JVM mode

WAR on an application server#

Example What it shows
tomcat-war A WAR of plain servlets on Tomcat
jetty-war The same WAR on Jetty
wildfly-war The same WAR on WildFly, which loads classes through JBoss Modules
open-liberty-war The same WAR on Open Liberty, an OSGi runtime on OpenJ9

Databases#

Each of these starts PostgreSQL in its own container.

Example What it shows
jdbc-hibernate Spring Data JPA with Hibernate and HikariCP
mybatis A MyBatis mapper
r2dbc Reactive database access with Spring Data R2DBC

Async and messaging#

Example What it shows
spring-boot-webflux Spring Boot WebFlux on Reactor Netty
virtual-threads spring-boot-mvc on virtual threads
ktor-coroutines A Kotlin suspend handler in Ktor that switches dispatchers
kafka-consumer Spring Boot sending to and consuming from Kafka
grpc A grpc-java unary service

Tests and batch jobs#

These record from startup to exit and write the recording to their recordings/ directory. See Agent alone.

Example What it shows
junit-maven JUnit tests run by Maven Surefire
junit-gradle JUnit tests run by Gradle
spring-batch A Spring Batch job that runs and exits

Options#

Set these when you run docker compose up.

Variable What it does
VERBATIME_EXTRA Adds agent arguments
JMX_HOST The host name JDK Mission Control connects to, instead of localhost
VERBATIME_JVM_EXTRA Adds JVM options. Only in open-liberty-war

Set the same values for the load command too. Otherwise Compose restarts the application, and the recording with it.