Java release notes

Wednesday, March 20, 2019 - 07:33 Download

Improvements

  • Kafka-clients

    The Java agent now supports the kafka-clients library. The agent will automatically report up Kafka metrics to New Relic.

    Optional support is provided for reporting Kafka metrics as Insights events and for enabling distributed tracing. More information can be found in the New Relic documentation.

  • Java 12, Coretto and Zulu

    The New Relic Java agent is now fully compatible with Java 12. This release also adds support for the Amazon Coretto and Azul Zulu JDKs.

New APIs

  • Added ignoreErrors() to the Transaction API, allowing all errors reported within a specific transaction to be ignored.

  • Added addCustomParameters(Map<String, Object>) API, allowing multiple custom parameters to be added to a transaction at once.

  • Updated the noticeError() API documentation to clarify that when the api is invoked multiple times while in a transaction, only the first error will be reported.

Deprecated APIs

  • The custom transport channel API is now deprecated in favor of the Distributed Tracing API.

  • The skipTransactionTrace attribute on the @Trace annotation is now deprecated. The excludeFromTransactionTrace attribute should be used in its place.

Deprecated Instrumentation

  • JetS3t

    Removed built-in instrumentation for JetS3t. The agent will continue to report external calls made with the JetS3t client.

Fixes

  • Fixed an issue with Jax-RS subresource transaction naming where the root path is duplicated when a nested resource structure is used. This could lead to transactions being named incorrectly for incoming requests to a Jax-RS framework.

  • Fixed a bug in the agent's Jetty metric sampling that could prevent Jetty specific metrics from being reported when the number of threads returned by JMX is zero.

  • Fixed a NullPointerException that can occur when cross application tracing configuration is explicitly disabled.

  • Fixed an issue where transactions would be named incorrectly when using custom Akka Http stream directives or a pathEnd directive followed by a Segment directive.

  • Fixed an issue where certain usages of Akka and Scala would prevent transactions from being reported to New Relic. This would also manifest as a NullPointerException in the agent log at finest level.

  • The Java agent no longer includes Jaxb or Logback dependencies. A new dependency on Log4j2 has been added

Tuesday, February 12, 2019 - 10:29 Download

Improvements:

  • Vert.x 3.6

    The Java agent now provides visibility into your applications built using the Vert.x 3.6. The agent instruments Vert.x Web, Vert.x Core, and Vert.x HTTP client. With this instrumentation, the agent will identify and name your transactions based on Vert.x web routing paths. The agent will also time web handlers, track async handlers, and external calls made with Vert.x HTTP client.

  • Wildfly 12-15

    The agent now supports Wildfly versions 12 through 15.

Fixes:

  • Fixed an issue where applications using neo4j bolt JDBC driver could fail to start.
  • The log_daily configuration did not respect documented precedence.
  • Fixed a bug that caused the Spring Webflux instrumentation to fail to apply for spring-webflux versions greater than 5.0.*.
  • Fixed an issue where transactions would not be fully reported if distributed_tracing.enabled = true and cross_application_tracer.enabled = false.
  • Fixed an issue where Akka Http application would not start with the agent attached when using sbt.
  • Fixed an issue where the agent could fail to determine the hostname .

Known Issues

Fixes in 4.12.0

  • Fixed an issue with Jax-RS subresource transaction naming where the root path is duplicated when a nested resource structure is used. This could lead to transactions being named incorrectly for incoming requests to a Jax-RS framework.
  • Fixed a bug in the agent's Jetty metric sampling that could prevent Jetty specific metrics from being reported when the number of threads returned by JMX is zero.
  • Fixed a NullPointerException that can occur when cross application tracing configuration is explicitly disabled.
  • Fixed an issue where transactions would be named incorrectly when using custom Akka Http stream directives or a pathEnd directive followed by a Segment directive.
  • Fixed an issue where certain usages of Akka and Scala would prevent transactions from being reported to New Relic. This would also manifest as a NullPointerException in the agent log at finest level.
  • The Java agent no longer includes Jaxb or Logback dependencies. A new dependency on Log4j2 has been added.

Fixes in 4.12.1

  • Fixed an issue where an exception would be thrown during agent initialization which caused the application to shut down when the log file is not writable. In previous agent versions there was an undocumented behavior where the agent would log to STDOUT instead.
  • Fixed a regression where a NullPointerException would be logged and instrumentation would not be applied when using an XML extension with comments preceding the instrumentation section.
  • Fixed issue where setting the log_limit_in_kbytes greater than 0 and log_file_count equal to 1 would result in the agent not logging to the agent log file.

Fixes in 5.0.0

  • The agent no longer requires a newrelic.yml even when the 'app_name' and 'license_key' configuration options are set via environment variables and/or system properties. For more details, see [Java agent configuration(]https://docs.newrelic.com/docs/agents/java-agent/configuration/java-agen...).
  • HttpSessions JMX metrics were not reporting for Websphere Liberty Profile applications.
  • The transaction_events.max_samples_stored configuration value in the newrelic.yml would incorrectly override the system properties or environment variable values
  • Applications running on Wildfly 12 - 15 would fail start with NoClassDefFound errors for Java agent classes.
  • Play applications where external calls inside of future callbacks using async-http-client would not be recorded.
  • Setting log_limit_in_kbytes would result in the agent not logging to the agent log file if log_file_count was also set to less than 2.
  • Webflux status codes which were not recognized by Spring Webflux caused a 500 status code to be returned and an exception in application logs.

Fixes in 5.1.0

  • Fixed an issue in the Scala instrumentation that would cause an Java.lang.IllegalArgumentException: to be thrown when the Lightbend Cinnamon agent is in use.
  • Fixed issue where cross application tracing headers were incorrectly parsed when distributed tracing is enabled. Applications that use both distributed tracing and cross application tracing will no longer report external transaction breakdown metrics.
  • Fixed an issue where the agent’s Kafka instrumentation would report WakeupExceptions as errors in New Relic. These exceptions will no longer be reported.
  • Fixed a Log4J ClassCastException for applications running on the IBM J9 JVM that set a custom logging manager via the -Djava.util.logging.manager system parameter.
  • The agent now supports using the thread profiler when the send_environment_info configuration is disabled.

Fixes in 5.2.0

  • Fixed an issue where very long-running transactions with a large number of segments would cause an excessive amount of memory usage. The agent will no longer trace segments once the segment_limit has been reached.

Fixes in 5.3.0

  • Akka-http instrumentation would name transactions incorrectly when using an asynchronous onComplete callback to match routes.
  • The agent’s JaxRS instrumentation did not apply to cases where a concrete class implements the same method from two different interfaces.
  • The agent would not report JMX metrics when one or more composite attributes were null.
  • Akka-http path matching instrumentation could produce NullPointerExceptions when using a "repeat" path segment with no values. Transactions that pass some values will report as-is, but transactions that pass no values will be reported with a different segment in the metric name: "().repeat()".
  • The ignore_status_codes system property was not getting applied correctly.

Fixes in 5.4.0

  • Transaction traces would occasionally miss segments when using the spring @Async annotation with servlets.
  • Jax-RS instrumentation was not starting transactions.
  • A potential race condition during agent startup that would manifest as a NoClassDefFoundError for internal New Relic classes.
  • Akka-http instrumentation would attempt multiple retransforms of the same class.
  • The noticeError API would drop custom attributes that weren't of type String, Number, or Boolean, such as Enums or other custom types.

Fixes in 5.6.0

  • Spring Webflux WebClient would not track external calls when constructed with baseUrl(String baseUrl).
  • The NewRelic.getAgent().getConfig().getValue() api would not check configuration values set via environment variables.
  • The agent’s completable-future instrumentation could hold a reference to Tokens after they were expired, which could cause excessive memory usage.
  • Error traces could report to the wrong application when auto_app_naming is enabled and there were errors from two different application names getting reported during the same harvest.
  • The agent’s MongoDB instrumentation would instrument the same builder used by the async and reactive-streams drivers, resulting in excessive memory usage and incorrect transaction times. Note: The agent will no longer instrument the sync MongoDB driver if the async and/or reactive-streams drivers are on the application’s classpath.

Fixes in 5.7.0

  • Calls to NewRelic.getAgent().getTracedMethod().addOutboundRequestHeaders() will no longer throw an exception if a traced method has started but a transaction has not. This could happen by calling this in a method annotated with @Trace(async=true) before a token is linked.
  • Updates Guava to the newest release.
  • NoClassDefFoundError would occur in agent logs when a spring controller is used without a root level RequestMapping annotation.
  • The gc_time metric, which was enabled by default in version 5.2.0, has now been disabled by default since its results are often misleading.

Fixes in 5.8.0

  • The Solr 7 instrumentation would not report Update JMX metrics.
  • HttpURLConnection instrumentation produced External metrics only when network methods (getInputStream, getResponseCode) are called.
  • MongoDB instrumentation would report duplicate metrics when applications invoked MongoClientOptions.build() more than once.

Fixes in 5.9.0

  • The ca_bundle_path configuration setting would fail to correctly import certificates when running on IBM J9
  • Clarified the startup log message about the state of browser monitoring for the current application.
  • The agent logger would sometimes throw a NullPointerException
  • The agent would stop reporting Kafka metrics when one or more clients where closed
  • HttpURLConnection instrumentation could cause a NullPointerException in the agent logs and fail to report External metrics

Fixes in 5.10.0

  • In an effort to modernize our language and improve clarity, we have renamed several configuration values. The old names will still work for now, but they will all be removed in the next major version.

    transaction_tracer.slow_query_whitelist is now transaction_tracer.collect_slow_queries_from

    strip_exception_messages.whitelist is now strip_exception_messages.allowed_classes

    command_parser.blacklist is now command_parser.disallow

  • The strip_exception_messages config now excludes nested exception messages

  • The agent will now use a lightweight tracer for SQL tracers beyond the segment_limit, improving performance in cases with a high number of segments.
  • The agent would fail to report the Docker containerId for some combinations of systemd and Kubernetes
  • The agent logger would fail to log with: “ERROR RollingFileAppender 'File': No TriggeringPolicy provided” when newrelic.config.log_file_count>1 and newrelic.config.isDaily=false and newrelic.config.log_limit_bytes=0
Wednesday, January 23, 2019 - 10:00 Download

Improvements

  • This release adds Transaction event attributes that provide context between your Kubernetes cluster and services. For details on the benefits (public beta coming soon) see this blog post.
  • The Java agent now supports setting all configuration options via Environment variables. Environment variables will take precedence over newrelic.yml but cannot be updated dynamically since they are read statically on application startup.
  • Adds instrumentation for the Akka HTTP client, versions 10.0 to 10.1.x. This client is used via the Http().singleRequest() method and the agent will now automatically capture these requests as External metrics.
  • Support for MySQL connector 8.0.x
  • Adds official support for Akka Http 10.1.6
  • Span event attributes can now be filtered using include / exclude rules.
  span_events:
    enabled: true
    attributes:
      include:
      exclude:
  • Rename transaction trace segment parameter key from uri to http.url and rename trace key from database_name to db.instance.

Fixes

  • Fixes an issue where Akka HTTP instrumentation can cause higher than normal memory usage when an async Directive is used in the route for an Akka HTTP based app. This can also result in mis-named transactions for any paths underneath the custom Directive.
Tuesday, December 18, 2018 - 13:46 Download

Improvements

  • The 'request.uri' attribute is now included in Transaction events and corresponding Transaction Error events. As a result this attribute can now be queried in Insights. It may be excluded via the exclude list in the attributes stanza of the yaml config file. It is also excluded when High Security Mode is enabled.
  • Distributed Tracing can now be enabled at the same time as auto app naming. Each application created by this setting will share an event reservoir for Distributed Tracing.
  • Updates Akka HTTP instrumentation to support the newest version of Akka HTTP, 10.1.5 and above.

Fixes

  • Fixes a possible NullPointerException that could occur in Hystrix instrumentation and propagate into application code.
  • Fixes a bug where usage of the HttpsURLConnection getInputStream() method could cause some scoped external metrics to be double-counted.
  • Fixes an issue that prevents the agent from connecting to an HTTP proxy that does not requires a username or password.

    When configured to use an HTTP proxy by using proxy_host and proxy_port, the agent would look for proxy_username and proxy_password. If those weren't provided, the agent would use an empty string for proxy_username and proxy_password.

  • Prevents unnecessary dependencies from showing up in the newrelic-agent pom
  • Fixes deadlocks occurring in agent 4.7.0 that were caused by instrumentation of classes in the sun/nio/cs/.* package
  • Fixes an issue where custom jmx metrics with '.'s in the attribute name would not get recorded.
Tuesday, November 13, 2018 - 09:22 Download

Fixes

  • Fixed an issue where the agent would break webpage rendering by inserting New Relic Browser monitoring javascript into the <header> tag of pages which were missing <head> tags.

  • Certain frameworks, like Spring Cloud Gateway, triggered a bug in the Spring webflux instrumentation, causing transactions to stay open until they timed out. This bug resulted in more memory pressure and looked like a memory leak. This has been fixed in this release.

  • Fixed an issue where the agent would stop reporting to New Relic following a ForceDisconnectException and accumulate transaction data resulting in OutOfMemory Exceptions.

  • The agent now validates that app_names only contains three application names. If the agent is configured to report more than three application names, the agent will log a warning message and stop reporting to New Relic.

  • When a custom WSRequestFilter is used that modifies an outbound play-ws request, the agent would report overly long segments due to Segment timeouts and will also result in a loss of External/ metrics. This has been fixed.

Wednesday, October 3, 2018 - 08:52 Download

Improvements

  • Java 11

The New Relic Java agent is now fully compatible with Java 11. For more on JDK releases and the Java agent, see this topic on the Explorer's Hub.

  • Solr 7.0 JMX Metrics

The Java agent now collects JMX metrics for Solr 7.0

Monday, September 24, 2018 - 11:16 Download

Improvements

  • Spring 5

    The Java Agent now provides instrumentation for Spring 5 and Webflux. The agent will name transactions based on router functions as well as Spring controller and spring web annotations. The agent also provides support for Spring WebClient to capture external requests and timing.

    Spring 5 instrumentation works with Spring Boot, Tomcat, and Jetty.  

    Note if you have previously disabled Spring instrumentation: There is a new spring-4.3.0 instrumentation module that gets used in place of the previous spring-4.2.0 module for any customers running Spring 4.3.0 and above. If you had previously disabled support for spring-4.2.0 and you are running spring-4.3.0 you will want to change your class_transformer stanza in your newrelic.yml from:

    class_transformer:
      com.newrelic.instrumentation.spring-4.2.0:
        enabled: false
    

    to:

    class_transformer:
      com.newrelic.instrumentation.spring-4.3.0:
        enabled: false
    

Fixes

  • Fixes an issue where the agent could cause an application deadlock when two tokens are created and linked from the other’s thread. This affects users of the New Relic token API and also users of the Hystrix framework.
  • Fixes an issue where the agent would not capture JMX Datasource information from Tomcat when JDNI GlobalNamingResources is used.

Known Issues

Transaction reporting to New Relic may be delayed by up to 10 minutes when Spring WebClient is used to create http requests that never execute.

Tuesday, September 4, 2018 - 09:41 Download

Improvements

  • Apache HttpAsyncClient

    The Java agent now provides instrumentation for Apache HttpAsyncClient 4.1+. You will see your HttpAsyncClient calls as externals in New Relic.

  • AsyncHttpClient

    The Java agent now provides instrumentation for AsyncHttpClient. You will now see the time spent in external service calls made using AsyncHttpClient in New Relic. If the external service is also running New Relic, you will see cross application tracing (CAT) details as well.

  • Vert.x 3.5

    The Java agent now provides visibility into your applications built using the Vert.x 3.5. The agent instruments Vert.x Web, Vert.x Core, and Vert.x HTTP client. With this instrumentation, the agent will identify and name your transactions based on Vert.x web routing paths. The agent will also time web handlers, track async handlers, and external calls made with Vert.x HTTP client.

  • JBoss EAP 7

    The Java Agent now provides instrumentation for JBoss EAP 7. You will now see the same visibility into your web transactions, app server stats, and frameworks that you have with previous versions of JBoss EAP.

  • Play 2.7

    The Java Agent now provides instrumentation for Play 2.7. The previous Java agent release supports versions of Play up to 2.6.

  • WebSphere Liberty

    Added ThreadPool metrics for WebSphere Liberty Profile. You will now see the active threads in the Threads tab of the JVM metrics page

Fixes

  • Fixes an issue where OKHttp 3 was not tracking external total time correctly.
  • Fixes an issue where for some JDBC drivers, the agent would execute additional getMetaData queries..
  • Fixes an issue with the agent’s Scala instrumentation that could result in incorrect throughput, invalid or negative data in transaction segments, or inability to ignore status codes.
  • Fixes an issue with the play-ws instrumentation that caused ClassNotFound exceptions to occur in the agent logs when withHeaders is used. This could result incomplete transactions and attributes in RPM.
Wednesday, August 8, 2018 - 12:08 Download

Improvements

  • Java 10

The New Relic Java agent is now fully compatible with Java 10. For more on JDK release and the Java agent, see this topic on the Explorer's Hub.

  • Not compatible with Java 6

In order to continue to innovate and efficiently provide new capabilities to our customers who run on the JVM, this and future agent versions are not compatible with Java 6. If you are running Java 6, you may continue to use Java agent 4.3.0 or lower. For details, see this topic on the Explorer's Hub.

  • Akka 2.5 and Akka HTTP 10.1

The Java agent now supports Akka 2.5.x and Akka HTTP 10.1.x. You will see your Akka HTTP calls as New Relic transactions, see the hand-offs between Akka actors, and understand the calls to other databases and services.

  • Solr 7

The Java agent now supports Solr 7.x. New Relic’s Solr support reports database calls to Solr servers as well as monitors the Solr server itself.

Known Issue: JMX stats collection for Solr 7 isn't supported as of this release.

  • WebLogic datasource

The Java agent now displays health data about WebLogic’s datasource in the Datasource tab under the JVM page.

Fixes

  • Fixed an issue where the Java agent 4.3.0 would not report data depending on the locale setting of the JVM. Java Agent 4.3.0 failed to send event data if the JVM locale is set to use a comma as the decimal. You would see NumberFormatException in the agent log.
  • Fixed a rare issue where the agent will incorrectly attempt to continually retransform classes when an extension with a modification date in the future is used, causing a significant increase in CPU load.
  • Fixed a ConcurrentModificationException caused by ning instrumentation that manifests in Mule instrumentation that causes the request it affects to be retried and the Java agent to not report header data.
  • Fixed an issue where if enable_auto_app_naming was set to true and distributed_tracing.enabled was set to true it would sample every distributed trace event. Now if the agent has both configs enabled, it will not turn on distributed tracing.
Tuesday, July 31, 2018 - 10:00 Download

Improvements

  • Distributed tracing

Distributed tracing lets you see the path that a request takes as it travels through your distributed system. By showing the distributed activity through a unified view, you can troubleshoot and understand a complex system better than ever before.

Distributed tracing is available with an APM Pro or equivalent subscription. To see a complete distributed trace, you need to enable the feature on a set of neighboring services. Enabling distributed tracing changes the behavior of some New Relic features, so carefully consult the transition guide before you enable this feature.

To enable distributed tracing, set enabled to true in the distributed_tracing stanza in the newrelic.yml config file.


  distributed_tracing:
    enabled: true
  • Added configuration option proxy_scheme to allow the agent to connect via https only proxies.

Fixes

  • Fixed an issue where transaction throughput counts could be artificially inflated when using async servlets in Jersey.
  • Fixed an issue where JBoss and Wildfly datasources could cause a LinkageError.

Pages