Supported technologiesedit

The Elastic APM Java agent automatically instruments various APIs, frameworks and application servers. This section lists all supported technologies.

If your favorite technology is not supported yet, you can vote for it by participating in our survey. We will use the results to add support for the most requested technologies.

Another option is to add a dependency to the agent’s public API in order to programmatically create custom transactions and spans.

If you want to extend the auto-instrumentation capabilities of the agent, the contributing guide should get you started.

Note

If, for example, the HTTP client library of your choice is not listed, it means that there won’t be spans for those outgoing HTTP requests. If the web framework you are using is not supported, the agent does not capture transactions.

Java versionsedit

VendorSupported versionsNotes

Oracle JDK

7, 8, 9, 10, 11

--module-path has not been tested yet

Open JDK

7, 8, 9, 10, 11

--module-path has not been tested yet

Web Frameworksedit

FrameworkSupported versionsDescriptionSince

Servlet API

3+

A transaction will be created for all incoming HTTP requests to your Servlet API-based application. See also Application Servers/Servlet Containersedit

1.0.0

Spring Web MVC

4.x, 5.x

If you are using Spring MVC (for example with Spring Boot), the transactions are named based on your controllers (ControllerClass#controllerMethod).

1.0.0

JavaServer Faces

2.2.x, 2.3.x

If you are using JSF, transactions are named based on the requested Facelets and spans are captured for visibility into execution and rendering

1.0.0

Spring Boot

1.5+, 2.x

Supports embedded Tomcat, Jetty and Undertow

1.0.0

JAX-RS

2.x

The transactions are named based on your resources (ResourceClass#resourceMethod). Note that only the packages configured in application_packagesedit are scanned for JAX-RS resources. If you don’t set this option, all classes are scanned. This comes at the cost of increased startup times, however.

Note: JAX-RS is only supported when running on a supported Application Server/Servlet Container.

1.0.0

JAX-WS

 

The transactions are named based on your @javax.jws.WebService annotated classes and @javax.jws.WebMethod annotated method names (WebServiceClass#webMethod). Note that only the packages configured in application_packagesedit are scanned for JAX-WS resources. If you don’t set this option, all classes are scanned. This comes at the cost of increased startup times, however.

Note: JAX-WS is only supported when running on a supported Application Server/Servlet Container and when using the HTTP binding.

1.4.0

Application Servers/Servlet Containersedit

The Elastic APM Java agent has generic support for the Servlet API 3+. However, some servers require special handling. The servers listed here are tested by an integration test suite to make sure Elastic APM is compatible with them. Other Servlet 3+ compliant servers will most likely work as well.

ServerSupported versions

Tomcat

7.x, 8.5.x, 9.x

WildFly

8-15

JBoss EAP

6.4, 7.0, 7.1, 7.2

Jetty (only the ServletContextHandler is supported)

9.2, 9.3, 9.4

WebSphere Liberty

8.5.5, 18.0.x

Undertow Servlet

1.4

Payara

4.x, 5.x

Data Storesedit

DatabaseSupported versionsDescription

JDBC

4.1+

The agent automatically creates DB spans for all your JDBC queries. This includes JDBC queries executed by O/R mappers like Hibernate.

Note: Make sure that your JDBC driver is at least compiled for Java 1.5. For example, commons dbcp versions before 1.4 are not supported. IBM DB2 db2jcc drivers are also not supported. Please update to db2jcc4.

Elasticsearch

5.0.2+

The agent automatically creates Elasticsearch spans for queries done through the official REST client. Currently, the *Async methods are not supported, only their synchronous counterparts.

Networking frameworksedit

Distributed tracing will only work if you are using one of the supported networking frameworks.

For the supported HTTP libraries, the agent automatically creates spans for outgoing HTTP requests and propagates tracing headers. The spans are named after the schema <method> <host>, for example GET elastic.co.

FrameworkSupported versionsNoteSince

Apache HttpClient

4.3+

 

0.7.0

Spring RestTemplate

4+

 

0.7.0

OkHttp

2, 3

Currently, only synchronous calls via Call#execute() are supported. Call#enquene(Callback) is not yet supported.

1.4.0

HttpUrlConnection

  

1.4.0

JAX-WS client

 

JAX-WS clients created via javax.xml.ws.Service inherently support context propagation as they are using HttpUrlConnection underneath.

1.4.0

Asynchronous frameworksedit

When a Span is created in a different Thread than its parent, the trace context has to be propagated onto this thread.

This section lists all supported asynchronous frameworks.

FrameworkSupported versionsDescriptionSince

ExecutorService

 

The agent propagates the context when using the java.util.concurrent.ExecutorService methods of any ExecutorService implementation.

1.4.0

Caveatsedit

  • Certain OSGi containers need the following configuration setting in case you see exceptions like java.lang.NoClassDefFoundError: co/elastic/apm/jdbc/StatementInstrumentation: org.osgi.framework.bootdelegation=co.elastic.apm.agent.*
  • Other JVM languages, like Scala, Kotlin and Groovy have not been tested yet.
  • The agent does currently not support running on JVMs with an enabled SecurityManager. You may see exceptions like this: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "getProtectionDomain"). Try to grant java.security.AllPermission to the agent.