CHANGELOG
=========

v3.10.0
-------

* @RequestMapping annotation used to name web transactions

  Where available, Spring Web Transactions are now named using the URI path 
  pattern defined in the `@RequestMapping` annotation. This generally provides
  even more meaningful transaction names than controller methods. To
  disable this and revert back to naming using controllers, add this config to
  your newrelic.yml:

```
  instrumentation:
    spring_annotations:
      enabled: false
```

* WebSphere JMX metrics reported when global security is enabled

  Prior to this version, JMX metrics could not be pulled by the agent with 
  WebSphere when global security was enabled. This means custom JMX 
  metrics in a yaml file and default JMX metrics displayed on the JVM 
  Threads and Http Sessions tabs were not reported.

* Servlet UserPrincipal name can be reported as an attribute

  With this release, you can enable the capturing of the UserPrincipal name
  so that it is available in New Relic Insights and as a transaction trace
  attribute. To enable:

```
  class_transformer:
    com.newrelic.instrumentation.servlet-user:
      enabled: true
```

* Non-Web Transactions can now be made Key Transactions with a custom apdex T

  This feature will be available in the RPM UI very soon. It requires this or
  a later version of the agent.

* Fix: Web transactions not always reported.

  In some unusual cases the Agent stopped reporting web transactions. The
  agent would log an error that included the phrase "Inconsistent state"

* Fix: WebSphere 7 reports active thread count on the JVM tab

  The thread pool active count being displayed in the UI was actually
  the pool size.  

* Fix: Excess error reporting in Play apps

  In Scala/Play apps, the agent was incorrectly logging errors when promises
  were resolved with a Failure.

* Fix: Request headers are not read when cross application tracing is disabled

  Disabling cross application tracing using these config settings did not
  stop the Agent from reading request headers.

```
  cross_application_tracer:
    enabled: false
```

* Fix: NewRelic API methods mistakenly deprecated. 

  In 3.9.0, some API calls in com.newrelic.api.agent.NewRelic were mistakenly deprecated.
  These methods are no longer deprecated. Although we are working on improving our APIs,
  there are no plans to deprecate the NewRelic API in the future.


v3.9.0
------

* Support for new Cross Application Trace view

  This release enhances cross application tracing with a visualization of
  the cross application calls that a specific Transaction Trace is involved
  in. The new visualization helps you spot bottlenecks in external services
  within Transaction Traces and gives you an end-to-end understanding
  of how the transaction trace is used by other applications and services.
  This leads to faster problem diagnosis and better collaboration across
  teams. All agents involved in the cross application communication must
  be upgraded to see the complete graph. You can view cross application
  traces from in the Transaction Trace drill-down.

* Absolute maximum for max_samples_stored lifted

  In previous versions of the agent, max_samples_stored could not be set
  to more than 10000. This restriction has been lifted, which can help avoid
  sampling.

* Support for RabbitMQ

  You can now see messages sent to and received from RabbitMQ 2.7.0 or
  greater. The time spent processing a dequeued message is shown as a
  Message transaction.

* Support for SOAP over CXF

  In this release, we provide automated instrumentation of your SOAP calls
  when using CXF 2.7.

* Fix: Enable Cross Application Tracing for all valid uses of HttpURLConnection.

  Prior to this, certain uses of HttpURLConnection between two New Relic apps
  would fail to be recognized as Cross Application Traces and instead show up
  as external calls.

* Fix: Excessive logging for Play Framework applications

  Applications using the Play Framework could cause the Agent to generate
  excessive logging at level WARN. These messages are now logged at a
  lower level.

* Fix: Allow customers to set the system property logback.ContextSelector 

  Prior to this fix, the agent would throw a ClassNotFoundException when
  the system property logback.ContextSelector was set.

* Fix: Wrong Application name in App Map when Auto App Naming enabled

  When the enable_auto_app_naming config setting is set to true, the
  auto-named apps are incorrectly identified as the default app in the
  App Map.

v3.8.2
------

* Fixed: Instrumentation missing including browser monitoring

  There was a bug in the agent that caused several instrumentation modules
  to not be loaded. This bug occurred when no extensions directory existed
  or the extensions directory was empty. This fix will allow auto-RUM to report
  normally. This bug was introduced in 3.8.0.

* Fix: Missing metrics with Java 2 Security

  When Java 2 Security was enabled, the agent failed to report some metrics.
  This bug was introduced in 3.8.0.

* Fix: Agent could stop reporting transactions

  For Jetty applications, the agent could stop reporting transactions
  if an uncaught exception was thrown. This bug was introduced in 3.6.0.

* Fix: Agent not reporting external services in Play 2.3

  The Java Agent was not reporting calls to external services.

v3.8.1
------

* Fix: EJB application transaction metrics reporting correctly for WebLogic

  In version 3.8.0 of the agent, EJB application transaction metrics for
  WebLogic were reporting the data as the average value per a bean
  instead of the total value per an application. This has been fixed and
  the data can now be found under the JVM tab.

* Fix: App Map incomplete

  If a web request made an external call to another app, the app making the web
  request did not appear in the App Map.  Moreover, subsequent external calls to
  other apps did not appear in the App Map either.

* Fix: Agent not reporting external services in Play 2.3

  The Java Agent was not reporting calls to external services.

v3.8.0
------

* Experimental support for Java SE 8

  This version includes experimental support for Java 8. Code that is known
  to work with Java SE 8 and compiled for Java 6 or 7 (such as Tomcat 8, 
  Play Framework 2.3, etc) should work fine. We would like your feedback if 
  you run into any trouble running code compiled for Java SE 8.

  Please only try this in non-production environments. We are eager for your 
  feedback as we work to make Java 8 support production-ready.
  To enable Java SE 8 compatibility, set the following system property on your 
  system:

     -Dnewrelic.enable.java.8
     
* Dynamic reload of custom instrumentation

  Instrumentation in the extensions folder can now be dynamically added,
  updated, and removed, with no JVM restart required.

* Support for Hibernate 4.3

  The Java agent now reports details on calls to Hibernate 4.3 as well as
  previous versions.

* Fix: Cross-Application Tracing didn't trace when caller used WLS 11g and SOAP.

  In Oracle WebLogic Server 11g, cross-application tracing (CAT) failed for
  external calls originating in the default SOAP pipeline, producing an 
  exception in the log. This bug has been fixed.

* Fix: Old DocumentationBuilderFactory can cause agent to disable itself

  When using a DocumentBuilderFactory implementation compiled with Java 1.4 
  or below an abstract method error was being thrown, causing the agent 
  to disable itself.

* Fix: Agent not detecting async servlets in WebSphere 8.x

  The Java Agent was not detecting the call to AsyncContext.complete(), 
  so it was not reporting async servlet calls.

v3.7.2
------

* Support for Play 2.3

  The Java Agent now provides full support for Play 2.3. In particular, 
  transaction naming is based on the controller action.

v3.7.1
------

* Fix:  NewRelic.setRequestAndResponse API call was not backward-compatible

  Implementation classes of the com.newrelic.api.agent.Request and 
  com.newrelic.api.agent.Response interfaces compiled with a pre-3.5.0 
  version of newrelic-api.jar threw a java.lang.AbstractMethodError when
  used with a 3.5.0 or later version of the Agent.

* Fix: NewRelic.setRequestAndResponse can cause LinkageError

  For some app servers, calling NewRelic.setRequestAndResponse API caused a 
  java.lang.LinkageError: loader constraint violation

* Fix: ignoreTransaction attribute ignored

  The ignoreTransaction="true" attribute in custom xml had no effect. The
  transaction was not ignored even with "true" set.

* Fix: In rare cases, Auto-RUM failed to add the New Relic header script to
  JSP pages.

* Fix: Naming of CGLib classes 

  Improved the fix in 3.7.0 for excluding the random part from the name of 
  CGLib generated class.

* Fix: Agent works properly inside a folder with + in the path

  Improved the fix in 3.7.0 for a directory path with a + character.


v3.7.0
------

* Flexible capturing of attributes

  The Java agent offers the ability to fine tune the
  attributes being sent to New Relic. Please see our docs
  site for more information on configuring attributes: 
  https://docs.newrelic.com/docs/java/java-agent-attributes

* Agent-Side High Security Configuration 

  If your account is set to high security in the New Relic 
  UI, you must add the following to your local newrelic.yml 
  configuration file: 

        high_security: true 

  Without this property, the agent will stop collecting data
  when high security is enabled in the New Relic UI. See 
  https://docs.newrelic.com/docs/subscriptions/high-security

* Discovery of hostname reported to New Relic 

  If New Relic reports an IP address for your hostname, you 
  can now control whether the host name is an IP version 4 or 
  6 address by setting the following property in your 
  newrelic.yml configuration file: 

        process_host: 
          ipv_preference: {4 or 6}
          
* Improved JMX metric naming 

  You can now set the metric name when configuring JMX metrics 
  through a custom yaml file using the property "root_metric_name". 
  Note, all of the JMX metrics will still be prefixed with "JMX" 
  and end with the name of the attribute. See 
  https://docs.newrelic.com/docs/java/custom-jmx-yaml-examples 

 Fix: Naming of CGLib classes 

  CGLib auto generated classes with Spring resulted in poor metric 
  names. The agent now excludes the random part from the name.
  
* Fix: JMS transaction naming 

  JMS onMessage instrumentation now uses a lower priority for naming 
  transactions and honors the enable_auto_transaction_naming config.

* Improved Jetty coverage 

  Jetty versions 9.04 through 9.06 were not instrumented. 
  This has been fixed.

* Fix: Potential memory leak from database calls 

  In some cases when database work is performed outside of a New Relic 
  transaction, a memory leak could occur. This bug has been present in 
  the agent since 3.5.0.

* Fix: VerifyError can occur when using Nevado JMS. 


v3.6.0
------

* Enhanced XML for custom instrumentation

  The custom XML xsd has been enhanced to support the instrumentation 
  of interfaces, subclasses, and method annotations. These
  enhancements give you much more flexibility to identify
  transactions and add monitoring of components without changes to
  your source code.

* Fix: Agent could cause VerifyError

  In specific cases, the agent could cause verification errors. 

* Fix: Embedded Jetty instrumentation

  Starting with the 3.3.1 agent, transactions were not reported for
  some configurations of embedded Jetty.

* Fix: Exceptions incorrectly reported

  In some cases exceptions were reported even if configured to be 
  ignored.

* Fix: Embedded Tomcat not reporting JMX Builtin metrics

  In newer versions of embedded Tomcat the agent wasn't collecting JMX 
  metrics properly.

* Fix: Apache HttpClient 4.3 not consistently reported

  The Java agent now instruments Apache HttpClient 4.3 calls, 
  including the new call patterns introduced in 4.3.

* Fix: RESTEasy transactions

  In certain instances, transactions between applications were not 
  getting linked correctly when RESTEasy was used.

* Fix: JBoss 7 port not reported correctly

  The port was not reported correctly for some JBoss users.

* Fix: Auto-RUM bug

  Starting in version 3.5.0 of the Java agent, in rare cases Auto-RUM 
  could cause the New Relic footer script to be placed within a script 
  tag.

* Fix: Errors not reporting with some versions WebSphere 7.0

  In some Fix Packs of WebSphere 7.0, the agent did not report errors
  properly.

* Fix: Agent works properly inside a folder with + in the path

  The Java agent did not initialize properly when in a folder with a +
  character in the pathname.

* Fix: Agent HttpClient logging

  The Agent's HttpClient was writing to the app server's log when it
  discovered a log4j appender.

* Fix: Inconsistent State with Play 1.2.x

  In some cases the agent was logging an "Inconsistent state!" message
  and not reporting a transaction.

* Fix: Invalid errors for Stripes

  The Agent was erroneously reporting spurious 404 errors for web
  apps using Stripes.

* Fix: Hanging threads in the Agent with SQL Prepared Statements

  Under rare circumstances, threads could hang in the Agent when an 
  application with multiple threads made heavy use of SQL Prepared 
  Statements.

* Fix: Request queue time was incorrect for some versions of nginx 

  Nginx fractional second header values for queue and server start times are 
  now parsed correctly.

* Fix: XML entity expansion with non-SSL connection to New Relic 

  Fixed an XML entity expansion vulnerability that only occurs when the 
  agent is configured with ssl: false; the default is true. The agent already 
  has other protection against unauthorized entity expansion. This fix is an 
  additional layer of protection. 
  
* Fix: In rare case, agent can cause application thread to hang

  Under rare circumstances, an application thread could hang when an
  application with multiple threads made heavy use of SQL Prepared
  Statements.


  

v3.5.1
------

* Fix: Auto-RUM bug 

  Starting in version 3.5.0 of the Java agent, in rare cases Auto-RUM could 
  cause the New Relic header to be placed within a script tag.  This bug
  has been fixed.

* Fix: In rare cases, agent stops reporting 

  In rare cases, the Java Agent hung on socketRead while performing an SSL 
  handshake and would not report data until JVM restart.  This bug has been
  fixed.

* Fix: Occasionally missed web transaction when using ResultSet 

  In version 3.5.0 of the agent some transactions that use a JDBC
  ResultSet were missing in the UI. The agent log would show an
  "Inconsistent State" error.  This bug has been fixed.

* Fix: X-Ray Sessions bugs. 

  X-Ray Sessions sometimes returned no transaction traces. A memory leak
  with X-Ray Sessions when many sessions were run was also fixed.


v3.5.0
------

* New Relic supports WildFly 8.0

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

* Fix: PostgreSQL explain plan bug

  Fixes PostgreSQL bug that allowed parameters to be sent in explain plans
  under some circumstances. Parameters are now masked prior to sending when
  explain plans are enabled (explain_enabled: true) and record_sql is set to
  'obfuscated'.
  
* Fix: SQL parameter obfuscation didn't work if the parameter value contained a newline 

  The record_sql: obfuscated config setting did not properly mask parameters
  when it included a newline character. This bug has been fixed.

* Agent no longer supports obfuscation of individual fields

  Previous versions of the agent allowed an obfuscated_sql_fields option to
  select specific field names to obfuscate when record_sql: raw. We have
  discovered rare cases in which this feature would not mask SQL parameters
  correctly, so we have disabled the configuration option. Now, if
  obfuscated_sql_fields is set, record_sql is automatically set to
  obfuscated so *all* fields are masked.

* Fix: In some cases, an agent could fail to reconnect to New Relic

  Fixed several issues that in rare cases could cause the agent to cease
  reporting data until JVM restart.

* Fix: Transaction name specified in XML configuration was being ignored

  In some cases transaction names set in XML files in the extensions folder
  were being ignored. This bug has been fixed in this release.

* Fix: Jetty 9.1 transactions were not showing up in 3.3.x and higher agents

  Starting with the 3.3.1 agent, customers were not seeing transactions from
  Jetty 9.1. This bug has been fixed.

* Fix: Websphere 7.0 was not being instrumented

  Starting in agent version 3.3.0, WebSphere 7.0 was not being instrumented.
  This bug has been fixed.

* Fix: Solr tabs in UI not always appearing

  If you are running a Solr application and not seeing any tabs, please
  update to this version.


v3.4.2
------

* Fix: Solr caches and Solr updates data not appearing

  Starting with version 3.4.1, Solr caches and updates were not appearing in 
  the UI. This bug has been fixed.
  
* Fix: JVM tab thread pool, session and transaction data not appearing

  Starting with version 3.4.1, some data was not appearing under the JVM tab.
  This bug has been fixed.

v3.4.1
------

* Fix: In some cases, Play 2.2 didn't report transactions

  When a chain of promises resolved, specifically using Future.flatMap(),
  lingering promises prevented the transaction from completing, in which
  case the transaction wouldn't be reported for the app. This is now
  tracked correctly.

* Fix: Improved performance when instrumented code is not running in a transaction

  Avoids unnecessary work when code instrumented by the Java agent is not
  running in the scope of a transaction.


v3.4.0
------

* Fix: Java agent should honor enable_auto_app_naming
 
  Starting with Java agent 3.3.1, the enable_auto_app_naming flag was being 
  ignored. This bug has been fixed.
 
* Fix: Setting configuration properties in newrelic.yml configuration file.
 
  Starting with version 3.0, some properties such as max_stack_trace_lines
  could not be set in the newrelic.yml configuration property. This bug has
  been fixed.

* Fix: Java agent should honor JAX-RS annotations with New Relic annotations
 
  New Relic's Java agent should handle methods that contain a New Relic
  annotation along with a JAX-RS annotation correctly. Previously the New
  Relic annotation was being ignored.
 
* Fix: Play transaction does not complete until timeout expires
 
  New Relic's Java agent now handles firstCompletedOf to Futures 
  correctly.
 
* Additional functionality to API call addCustomParameter

  New Relic's API call addCustomParameter will now add the custom
  parameters to the system codenamed Rubicon. For more information, see

    http://newrelic.com/software-analytics


v3.3.2
------

* Fix: Duplicate annotation exception

  In some rare cases involving generated a proxy class, the application may
  encounter an exception
  
    AnnotationFormatError: Duplicate annotation for class
    
  That bug has been fixed in this version.
  
* Fix: VerifyError

  In certain cases such as the Wildfly app server, the application may
  encounter a VerifyError. That bug has been fixed in this version.
  
v3.3.1
------

* JMS Messaging

  New Relic now gives you insight into the performance of your JMS message
  processing, both incoming and outgoing messages.

  New Relic now shows transactions initiated via JMS 1.1 message receipt.
  These transactions show up in the New Relic UI as background tasks of type
  "Message". In addition, JMS 1.1 message creation is shown in transaction
  traces.

* Grails 1.3.7 to 2.3.x

  New Relic now provides first-class visibility into your Grails
  applications. Grails web transactions are now named based on the Grails
  controller. The transactions track the details of your calls to JDBC,
  Hibernate, and other important frameworks, and provides full access to
  the New Relic Java agent API from Groovy.
  
* Updated instrumentation for supported app servers

  New Relic has updated the instrumentation of the application servers
  we support. In the process, we have updated the list of app
  servers that we instrument. For a current list of supported app server
  versions, see https://docs.newrelic.com/docs/java/new-relic-for-java

* Fix: New Relic did not instrument Apache HttpClient 4.3

  Previous versions of the agent did not instrument HttpClient 4.3.x.
  That version is now properly supported.
  
* Fix: Java Agent failed on Weblogic with a certicate exception

  In some cases running Weblogic, the Java Agent would fail certificate
  validation when connecting to New Relic. That bug has been fixed.
  
* Fix: Java Agent suppressed application logging

  In version 3.2.3, the Java agent sometimes suppressed application
  logging. That bug has been fixed in this version.
  
* Fix: Java Agent was logging error messages regarding "weaved classes"

  In version 3.2, the Java agent wrote innocuous error messages to its log
  similar to the following:
  
    ERROR: javax/servlet/ServletOutputStream is marked as a weaved class,
    but no methods are matched to be weaved.
    
  That bug has been fixed in this version.

* Fix: Text instructions in the sample newrelic.yml file were improved

  If you are upgrading from a previous version of the agent, consider
  applying your configuration to this new version of the yml file.

v3.2.3
------

* Fix: JBoss 7 fails to start with Java 1.6

  Starting with version 3.2.0 of the Java agent, JBoss 7 application servers
  fail to start when running Java 1.6. An IllegalStateException is printed to 
  System.out. This bug has been fixed.

v3.2.2
------

* Fix: Play 2.2 instrumentation in action methods

  In version 3.2.0 and 3.2.1, the Java agent failed to instrument calls present
  in a controller's action method. This means database calls, external calls,
  and custom instrumented calls within the action method were not being reported
  to New Relic. This bug has been fixed.
  
* Fix: Invalid exclusive time Errors with Play 2.2

  In version 3.2.0 and 3.2.1, the Java agent sometimes reported error messages
  to the newrelic log indicating an "Invalid exclusive time". This error
  has been fixed.

* Fix: Inaccurate async wait time with Play 2.x 

  In version 3.2.0 and 3.2.1, the Java agent reported an async wait time for
  Play 2.x transactions that was too large. This bug has been fixed.

v3.2.1
------

* Fix: Exceptions thrown from conflicting JAXB versions

  The New Relic Java agent now supports customers using any JAXB or Xerces 
  version. This bug was introduced in version 3.1.0.

* Fix: Usage of the newrelic.bootstrap_classpath system property

  In version 3.2.0, the newrelic.bootstrap_classpath system property caused
  an IllegalAccessError. That bug has been fixed. Note also that this system
  property has been deprecated and should not be used.

* Fix: Data collection for customers using the IBM JVM without WebSphere

  New Relic now supports customers using an IBM JVM without running 
  WebSphere. In this scenario, you must set the sync_startup flag set to
  true in the common section of their newrelic.yml.
  
  sync_startup: true

v3.2.0
------

* Glassfish 4 metrics for JVM Memory, Thread Pool, and Transactions

  New Relic now displays JVM memory, thread pool, and transaction metrics for
  Glassfish 4. To expose these metrics, please set http-service, transaction-
  service, and web-container monitoring within Glassfish to high.  To see the
  metrics in New Relic, go to Monitoring > JVMs.
  
* Decreased agent overhead for Play 2

  This version of the agent reduces the overhead that it incurs on Play 2.
  Play 2 users should upgrade for improved performance.

  In addition to general overhead improvements, New Relic has introduced a
  new setting to reduce overhead even more for particularly low-latency
  applications. Note that this setting will make the call info in Trace
  Details more generic.

  transaction_tracer:
    stack_based_naming: false

* Manually disable auto RUM instrumentation for specific pages

  For supported JSP engines, New Relic automatically adds RUM (Real User
  Monitoring) elements to the response HTML.  If you like auto-RUM, but do
  not want to apply it to all pages, you can now disable it for select pages.
  The configuration property disabled_auto_pages in the browser_monitoring 
  section can now be used to disable auto RUM instrumentation for a comma 
  delimited list of pages. For example,

  browser_monitoring:
    disabled_auto_pages: page1.jsp, page2.jsp

* akka.actor.ActorKilledException is now ignored by default

  The ActorKilledException is commonly thrown in Play applications as a
  control mechanism in normally functioning applications.  In previous
  versions, this exception inflated the reported error rate.  These 
  exceptions are now ingored by default. You can override the default
  ignore_errors list to provide your own exceptions or to omit the
  ActorKilledException.

  error_collector:
    ignore_errors: some.other.MyException

* New Relic reports host capacity information

  New Relic now reports physical CPU cores, logical CPU cores (hyperthreads),
  and physical memory. On non-Linux platforms, the agent runs a subprocess
  to retrieve this information.  To see the info in New Relic, go to
  Settings > Environment > Environment Snapshot.

* Report JVM name and revision to New Relic as part of JVM description

  Recording the JVM name in addition to the vendor allows differentiation 
  between different JVMs from the same vendor.  To see these values in New
  Relic, go to Settings > Environment > Environment Snapshot and look for the 
  "Java VM" and "Java VM Version" settings.
  
* Fix: Support for Play 2.2

  Web transactions were not being correctly captured under some circumstances
  for Play 2.2 applications.  Web transactions are now correctly reported.
  Also note the change in command line syntax as of Play 2.2:

  https://docs.newrelic.com/docs/java/play-installation-for-java
  
* Fix: Background tasks created by an @Trace annotation with a 'metricName' element
  did not show up in the New Relic UI.


v3.1.0
------

* Percentiles and Histograms

  The Java Agent now captures data that provides percentile and histogram
  views in the New Relic UI.

* JAX-RS annotation instrumentation

  The Java Agent now instruments and names web transactions based on
  javax.ws.rs annotations.

* JAX-WS instrumentation

  The Java Agent now instruments methods on classes that are marked with the
  javax.jws.WebService annotation.

* Fix: In some cases, agent had excessive overhead on Spring AOP apps

  The agent should now perform well for any Spring AOP application.

* Fix: Play Framework instrumentation was ignoring the ignoreTransaction call

  The Play Framework 2.x instrumentation now honors the New Relic API
  ignoreTransaction call. 
  
* Fix: Potential memory leak when app continually creates ClassLoaders

  The Java Agent now handles applications where ClassLoaders are
  continuously created.

* Fix: Agent zip distribution did not include the API source jar

  The newrelic-api-sources.jar is now included in the zip file.


v3.0.1
------

* Fix: Issue at startup with JBoss and Glassfish

  An issue in the 3.0.0 version caused startup of some versions of JBoss
  and Glassfish to fail. This version fixes that issue.

* Fix: RUM not auto-instrumented for JSPs

  The Java Agent should auto-instrument RUM header and footer in JSPs
  when using the Jasper engine. This did not work in 3.0.0. This version
  fixes that issue.

v3.0.0
------

* Spring AOP instrumentation

  This version instruments any call that passes through an AOP pointcut that
  you have declared in your Spring application. This gives your additional
  insight into the call time of key Spring beans.

* Performance Improvements

  This version contains optimizations that reduce agent overhead. 

* Fixes: Hibernate improvements

  In this version, we provide more consistent detail into Hibernate calls
  across supported version of Hibernate (3.3 - 4.2).

* Fix: Removed need for WebSphere SSL work-around

  Previous versions sometimes required a work-around when using WebSphere.
  This version removes the need for a work-around.

* NOTE: Requires Java SE 6 or 7

  Java Agent 3.0 requires Java SE 6 or 7. At signup or in your Account Settings
  page, you have the option to download a version of the agent that works with
  Java SE 5.

v2.21.6
-------
* Fix: XML entity expansion with non-SSL connection to New Relic 

  Fixed an XML entity expansion vulnerability that only occurs when the 
  agent is configured with ssl: false; the default is true. The agent already 
  has other protection against unauthorized entity expansion. This fix is an 
  additional layer of protection.
  

v2.21.5
-------

* PostgreSQL explain plan bug

  There was a PostgreSQL bug that allowed parameters to be sent in explain
  plans under some circumstances. To avoid this issue, the New Relic agent
  now does not report explain plans for PostgreSQL.
  
* Fix: Private trust store location for use_private_ssl flag

  The 2.21.4 agent did not properly load a private trust store used with
  the use_private_ssl flag. This bug has been fixed.

v2.21.4
-------

* Fix: Metric Grouping Issue with Netty
 
  The request URL was referenced in some metric names, causing
  Metric Explosion. The URL is no longer included in the metric name.

* Fix: Make Cookie parsing more robust when running on Netty
 
  Cases where the Cookie header was malformed were causing exceptions to be thrown.
  Agent now makes a better effort to capture the individual valid parts.

* Fix: Agent could not connect to New Relic in non-DNS environments

  Fixed an issue which caused the agent to only be able to connect to New Relic in
  environments where DNS was used for hostname resolution.
  
* Fix: In 2.21.2 and 2.21.3 an @Trace annotation ignored the transaction for Apdex 

  An @Trace annotation on a method called in a web transaction had
  the side-effect of ignoring the transaction for calculating the Apdex score.

v2.21.3
-------

* Fix: Agent did not run with J2SE 5.0 (aka JDK 1.5)

  Release 2.21.0 - 2.21.2 did not run correctly on J2SE 5.0. On startup,
  the agent reports:

    Unable to start New Relic agent: java.lang.UnsupportedClassVersionError:
    Bad version number in .class file 

  If you are running J2SE 5.0, please update to agent version 2.21.3.


v2.21.2
-------

* Fix: Longer application startup time

  Release 2.21.0 introduced an issue that could cause application startup
  to be slower than in previously releases. This fix returns application
  startup time to normal.

* Fix: File location changes

  Release 2.21.0 introduced a change to file locations within the
  newrelic zip file. This fix reverts the locations to what they were
  previously.


v2.21.1
-------

* Fix: In 2.21.0, calls to NewRelic class can cause NoClassDefFoundError

  In 2.21.0, if your application calls the NewRelic class and does
  not include the newrelic-api.jar, the application would throw a
  NoClassDefFoundError. With this fix, the separate newrelic-api.jar is
  not required. However, it is recommended that your application include
  the newrelic-api.jar so that calls to the NewRelic API resolve with or
  without the agent installed.


v2.21.0
-------

* X-Ray sessions

  Adds support for X-Ray sessions.  An X-Ray session collects
  Transaction Traces and a thread profile for a Key Transaction.

* Fix: In 2.20.0 an @Trace annotation ignored the transaction for Apdex 

  An @Trace annotation on a method called in a web transaction had
  the side-effect of ignoring the transaction for calculating the Apdex score.

* Fix: HTTP status code for Errors 
    
  If the HTTP status code for a web transaction was less than 400, the HTTP
  status code reported in the error was 500.  The actual status code for the
  web request is now reported.
    
* Fix: Spring exception handling
    
  The Exception argument in the Spring DispatcherServlet processHandlerException method
  was reported as an Error with an HTTP status code of 500.  The actual status code
  in the HTTP response is now reported.
    
* Fix: Reading Post Parameters for Resin 3

  Prior to this fix, post parameters in Resin 3 were always read using the 
  default properties even if the application tried to read the post parameters 
  using non-default properties or by just grabbing the request input stream.

* Fix: JVM Tab Metrics Not Showing up for Tomcat Applications

  Prior to this fix, if the service name in service.xml was not Catalina, then
  metrics would not appear under the JVM tab. Additionally, if you are using an 
  embedded Tomcat 5/6, metrics should now appear under the JVM tab.

* Fix: Improved compatibility with Java 1.5

  In the custom xml validator, there were references to String.isEmpty() which
  was not available until Java 1.6.  Those have been removed.

* Fix: Reducing DNS problems by not automatically adding '.' to the domain name

  By default the '.' is included. But if changed, then the '.' won't be added.

* Fix: JVM tab metrics showing for all Applications In JVM

  Metrics under the Thread, Session, and Transaction tabs used to only appear
  under the main application. The data will now be shown for all applications
  running in the specific JVM.

* Fix: Using a Proxy now works with SSL Enabled 

  In prior releases proxy authentication would fail when SSL was enabled.
  We now do proxy authentication using the java.net.Authenticator.
  
* Fix: Akka error reporting

  If an actor throws an exception or the message times out, an error is reported.
  Previously, no error was reported.
  

v2.20.0
-------
* Glassfish 2.1 JVM Tab

  The JVM tab will now show thread, session, and transaction metrics for 
  Glassfish 2.1.
  
* Fix: Solr Cache Metrics 

  The solr cache metrics do not appear with versions 2.18 and 2.19
  of the agent. This has been fixed and all solr metrics should now appear.
  
* Fix: NullPointerException in New Relic Logs When NewRelic API called 

  In certain circumstances, a call to a method on the NewRelic class can
  generate a NullPointerException in the agent logs. It does not cause a
  NullPointerException in your application.
  
* Fix: Support Custom Extension XML File for WebSphere with JRE

  Prior to this fix, an attempt to use a custom extension XML file with a IBM JRE
  would lead to a ClassNotFoundException.

v2.19.1
-------

* Fix for 2.19.0 known issue:  Play now captures GET and POST
  parameters correctly if `capture_params` is enabled.

* Disabled overly ambitious instrumentation used to time template rendering for Play 2.
  Resulted in unintended classes being instrumented.

v2.19.0
-------

* Play 2 Instrumentation

  Provides insight into Play 2.x Java and Scala applications. Adds
  instrumentation to Netty server, Akka actor calls, Scala Promises and Futures,
  and the WS API calls.

  Known issue: Request parameters are not captured properly
  even if `capture_params` is enabled.

* Support added for Jetty 9 (tested on 9.0.0 through Jetty 9.0.3).

* Fix: Agent can cause java.lang.VerifyError on code compiled with Java 7

  In certain cases, if your application code or third party libraries are
  compiled with Java 7, you may get a java.lang.VerifyError. This fix allows
  the agent to work correctly in those cases.

* Fix: The Java Agent detects status codes for Apache Felix correctly by default.
  The property take_last_status is now deprecated.

v2.18.0
-------
* New metrics are displayed under the JVM tab

  While the metrics displayed differ between application servers, common
  metrics include loaded class count, active thread count, active thread count
  per thread pool, active session count per application, and active
  transaction count. In order to see these metrics, JMX must be enabled on
  your app server.

* Fix: When naming transactions, the property `enable_auto_transaction_naming`
  should be honored

  There was an issue where transactions using the Spring Framework were
  ignoring the property.

* Fix: Strip query string from HTTP Referer

  Query strings can potentially contain sensitive information. To prevent that
  data from being sent to New Relic, only the host and path portion of the
  referer are captured.

v2.17.2
-------
* Fix: Fixed bug in which application code can throw NoSuchMethodError

  In some cases, application code was throwing an exception

   ```
   java.lang.NoSuchMethodError: java.lang.Boolean.valueOf(B)Ljava/lang/Byte; 
   ```

  This usually occurred when calling a ResultSet implementation.

v2.17.1
-------
* Fix: Reverted transaction naming change on ColdFusion, introduced in 2.17.0.

  That change caused issues with certain modes of ColdFusion.

v2.17.0
-------
* Agent reports JDBC ResultSet query time

  This change gives you deeper insight into your database time by displaying
  ResultSet processing time in aggregate metrics and transaction traces.
  
* Fix: Avoid retransform exception on IBM JREs

  In some IBM JRE versions, the agent logged an INFO level exception and did not
  instrument select classes. This fix allows these classes to be instrumented
  properly.

* Adds a stack trace in a transaction trace for all methods taking longer than
  stack trace threshold.  This differs from 2.16 which only provided stack
  traces for a limited number of methods.

* Better transaction naming on ColdFusion
  * The CPU burn reported for an asynchronous app is wrong.
  * Application code in AsyncProcessing should be attributed to wait time

* Fix: Agent now works with Jetty 9

v2.16.0
-------

* Adds a stack trace in a transaction trace for methods taking longer than
  the stack trace threshold setting (in seconds).
  
    transaction_tracer:
      stack_trace_threshold: 1.0

* Cross Application Tracing support for HttpURLConnection.

  Adds request and response headers to external calls using the
  HttpURLConnection library to provided better performance data
  when calling applications monitored by other New Relic Agents
  (Java, .NET, and Ruby, with others coming soon).

* Fix: Cross Application Tracing does not correlate consistently when using
  WebSphere, WebLogic, Resin, and Glassfish.
 
  Cross Appplication Tracing did not correlate calling and called applications
  when the HTTP response was large.

* Queuing time more broadly supported.

  The 'X-Queue-Start' and 'X-Request-Start' request headers for Heroku and other
  front-end web servers are interpreted and reported.  Previously, queuing time
  was not reported for Heroku.
  
* Adds a config setting to turn off class transforming after the given number
  of seconds. This is a work-around for an Oracle JVM bug that in rare cases 
  can cause native memory leaks.

    class_transformer:
      shutdown_delay: 3600
  
v2.15.1
-------
 
* Fix: Cross Application Tracing does not correlate consistently when using Tomcat 6+
 
  Cross Appplication Tracing did not correlate calling and called applications
  when the called application ran in Tomcat 6 or later and the HTTP response was
  greater than about 7k.
 
v2.15.0
-------

* Cross Application Tracing

  The Cross Application Tracing feature adds request and response headers to
  external calls using the Apache HttpClient libraries to provided better
  performance data when calling applications monitored by other New Relic
  Agents (Java, .NET, and Ruby, with others coming soon).
  
  The 2.14.0 release links aggregated data across applications. This release
  also links transaction traces.
  
  The configuration setting introduced in 2.14.0 to enable/disable Cross
  Application Tracing in newrelic.yml has changed. The old setting:
  'cross_application_tracing: true' is deprecated. The new setting is
  
  cross_application_tracer:
    enabled: true
    
  The default setting is true. Set to false to disable Cross Application
  Tracing.
  
* Instrumentation added for the AmazonS3Client version 1.x

  The New Relic Agent now offers support for version 1.0 to current of the
  com.amazonaws.services.s3.AmazonS3 interface. 

* New Relic Java Agent support a daily roll over log

  To roll over the agent log every day, set the property log_daily to true.
  Set the property log_file_count to the number of day logs you would like to
  keep.
  
* New Relic Java Agent now communicates with New Relic via HTTPS by default rather than HTTP

  If you have an existing installation and wish to use HTTPS to communicate
  with New Relic, edit your newrelic.yml file to include
  
  ssl: true
  
  in the common section. We recommend this for existing customers in order to
  improve the security of your communications with New Relic.
  
* Java Agent installer improvements

  The Java Agent installer now supports JBoss 7.x AS and JBoss 6.x EAP in
  standalone mode. Instructions for manually installing the Java Agent on
  JBoss 7.x AS and JBoss 6.x EAP can be found at
  https://newrelic.com/docs/java/installing-the-java-agent-on-jboss
  
* Fix: Default hostname reported

  This release reverts the change in 2.14.0 that effected the way that the
  hostname is reported. With this release, the agent reports the default
  hostname rather than short form in order to correlate with New Relic server
  monitoring.
  
* Fix: Web transactions naming in Spring MVC version 3.x

  This bug caused customers using Spring 3.0.1 and above to often have web
  transactions named by the servlet rather than controller method. This has
  been fixed such that a separate metric is created for each controller
  method.

  
v2.14.1
-------
 
* Fix: Application errors using java.net.HttpURLConnection.
  The bug, introduced in 2.14.0, could cause errors in code that uses java.net.HttpURLConnection.
  Possible errors could occur in XML parsing, incorrect http response status, or BeanCreationException in Spring. 
  As part of this fix the agent does not add a 'X-NewRelic-ID' header to outbound requests using java.net.HttpURLConnection.


v2.14.0
-------

* Fix: New Relic includes property take_last_status to only grab the final http status code.

    By default, New Relic reports any error status code. However, when this property is set to true, only
    the last http status code will be reported. This property should be set when using Apache Felix.

* Fix: New Relic now correctly patches Apache Felix ClassLoaders.

* Fix: Time will now display correctly for the first hour of the day when using log4j.

* Fix: RUM header was missing a semicolon at the end of the last statement.  Some browsers prefer semicolons everywhere.

* Adds a 'X-NewRelic-ID' header to outbound requests using the Apache HttpClient or HttpURLConnection libraries.
  This change helps improve the correlation of performance between services in a service-oriented architecture for a forthcoming feature.
  In the meantime, if you wish to disable the header, set 'cross_application_tracing: false' in newrelic.yml.
  
* Fix: Java agent now reports hostnames consistent with the output of "hostname -s" to match all other agents

* Add report of physical server memory (in addition to JVM memory) on Unix/Linux machines


v2.13.0
--------

* Agent can be configured to not send JVM arguments to the New Relic server

  The property send_jvm_props can be set to false, which will cause JVM arguments to no longer be sent to the server. Use this setting if you set sensitive system properties on the command line.
 
* Agent reports full URL in external service calls for transaction traces

  The agent now will provide the full URL if available in transaction traces for external calls.
  
* Fix: ResinServletTracerFactory no longer causing SkipServletTracerFactory errors

  When hitting the ResinServletTracerFactory inside a transaction, a SkipServletTracerFactory excetion will no longer be thrown.
  
* Agent logging improvements

  We have improved the clarity of logging messages, adjusted logging levels to be more appropriate, and increased logging performance.
  

v2.12.0
-------
* Agent reports jars used by applications to the Environments tab in the UI

  The Environments tab in the New Relic UI now shows the jars used by your application.

* Fix: In certain cases, auto-RUM of JSP broke HTML

  An angle-bracket in quotes in a META tag causes the agent to produced invalid HTML for JSP. The agent now produces valid HTML for this case.

* Fix: Key Transaction ApdexT value was not used

  In v2.10 - v2.11, the application-level ApdexT value was used for Key Transactions rather than the ApdexT for the Key Transaction itself. In this release, the ApdexT for the Key Transaction is used as designed.

* Fix: With OC4J using PolicyClassLoader, no metrics were displayed

  In the case where OC4J uses the PolicyClassLoader, the agent generated a java.lang.StackOverflowError in the log and did not provide metrics. In this release, the error does not occur.

* Fix: External metrics for HttpClient included port if host was an IP address

  In the case where an external service call used HttpClient with an IP address rather than a hostname, the port number was also included. In this release, the port number is not displayed.


v2.11.0
  * Support Jetty Continuations
  * Support Servlet 3.0 async API for WebSphere
  * bug fix: java.lang.ClassCircularityError in JBoss
  * bug fix: Agent does not detect Solr 4.0
  * bug fix: NewRelicIgnoreApdex annotation ignored


v2.10.1
  * Remove stall detection


v2.10.0
  * XML-based custom instrumentation
  * Support Servlet 3.0 async API (except WebSphere)
  * Request attribute for setting app name should allow multiple app names
  * bug fix: auto RUM inserts header and footer into script tags
  * bug fix: Deadlock transforming classes in java.lang.reflect.Method.getAnnotation


v2.9.0
  * Support for Key Transactions. Key Transactions let you closely monitor these important key business transactions and receive alerts when they are performing poorly. For more information see https://newrelic.com/docs/site/key-transactions
  * More metrics available in Custom Dashboards


v2.8.0
  * Supports basic proxy authentication for the case where there is a proxy server between the agent and the Internet. 
    The configuration uses proxy_user and proxy_password settings.
  * To avoid reporting the same transaction trace repeatedly, the agent reports a number of the slowest transactions.
  * bug fix: Transaction trace reported to wrong app if enable_auto_app_naming and browser requested a transaction trace


v2.7.0
  * Add skipTransactionTrace element to @Trace annotation to tell Agent to drop method from transaction trace
  * Add -Dnewrelic.bootstrap_classpath=true system property to append newrelic.jar to bootstrap classpath
  * Support RUM reporting to multiple applications (RUM3)
  * bug fix: Asynchronous processing time not reported correctly in Play 1.2.4
  * bug fix: CXF transaction names not set to URI path if protocol is https


v2.6.0
  * Java 7: Native support for instrumenting classes compiled to Java 7 bytecode
  * Audit Mode: mode which logs all data sent to New Relic in the newrelic_agent.log
  * bug fix: Prevent agent instrumentation from changing the Serial Version UID (introduced in 2.2.0)
  * bug fix: Prevent memory leak when client applications start and subsequently stop a thread before completing a transaction (introduced in 2.2.0)
  * bug fix: Prevent stack overflow exception when executing queries using the Postgres 9.0.x JDBC driver
  * bug fix: Fix dispatch handler instrumentation for Jetty 7.5.* (introduced in 2.5.0)
  * bug fix: Set the application port correctly under Jetty 4.*
  * bug fix: Make the transaction_tracer configuration settings respect command line and environment overrides


v2.5.0
  * Browser traces
  * bug fix: OC4J does not start (introduced in 2.2.0)
  * bug fix: AbstractMethodError calling getRemoteUser in Tomcat and GlassFish
  * bug fix: Deployment does not use SSL port if SSL is configured (introduced in 2.2.0)
  * bug fix: NullPointerException getting request URI in Jetty 4.x and 5.x
  * bug fix: JSP compiler error with auto RUM in Tomcat 5
  * bug fix: Transaction parameters removed if error is reported but response status < 400
  * bug fix: No request parameters in Resin 3.x
  * bug fix: AbstractMethodError calling getContextPath() with Tomcat 5.x (introduced in 2.2.0)
  * bug fix: Ignore transaction before transaction started stops transaction reporting 


v2.4.2
  * bug fix: ClassLoader.loadClass deadlock (introduced in 2.4.0)


v2.4.1
  * bug fix: AssertionError in WebLogic (introduced in 2.2.0)


v2.4.0
  * bug fix: ClassNotFoundException with JBoss AS 7 (introduced in 2.2.0)
  * bug fix: NoClassDefFoundError with GlassFish 3.1.2 (introduced in 2.2.0)
  * bug fix: ClassCastException with GlassFish 3.1.1 (introduced in 2.2.0)
  * bug fix: Agent stops reporting web transactions (introduced in 2.2.0)
  * bug fix: possible unknown host for external call with HttpClient 3.0.1 (introduced in 2.3.0)
  * bug fix: stall error reporting broken
  * bug fix: agent_enabled setting not working
  * add stall_threshold setting for reporting stall errors


v2.3.1
  * bug fix: Agent logging breaks web app log4j configuration (introduced in 2.3.0)


v2.3.0
  * Play! framework support
  * create web transactions using custom instrumentation
  * use log4j instead of Java API logging
  * bug fix: RUM auto instrumentation fixes
  * bug fix: multiple app names in app_name setting out of order (introduced in 2.2.0)
  * bug fix: possible java.lang.IllegalArgumentException with parameterized SQL (introduced in 2.2.0)
  * bug fix: WebSphere instrumentation broken (introduced in 2.2.0)


v2.2.1
  * bug fix: ClassFormatError and NoClassDefFoundError instrumenting proxy classes
  * bug fix: transaction trace threshold not working (introduced in 2.2.0)
  * bug fix: infinite loop instrumenting parameterized SQL statements


v2.2.0
  * performance improvements
  * support server-side configuration
  * bug fix: byte-code instrumentation causes class loading deadlock and OS memory explosion


v2.1.2
  * performance improvements
  * bug fix: parse inner select SQL statements
  * bug fix: execute SQL statement not recognized


v2.1.0
  * report slow SQL statements
  * performance improvements
  * continue to record metrics after transaction trace limit is reached
  * bug fix: never drop data
  * bug fix: Agent destructively reads request parameters in Resin
  * bug fix: default transaction trace threshold should be apdex_f
  * bug fix: Don't obfuscate digits in SQL statements that are part of table name


v2.0.4
  * bug fix: RUM: handle duplicate injection of our JS header and footer
  * bug fix: fix the license key hint that is inserted into the auto-generated configuration file
  * Allow logging to standard out
  * Allow configuration of the agent via environment variables


v2.0.3
  * bug fix: RUM: Tag files not compiling in Jasper
  * bug fix: RUM: header not always inserted after meta tags
  * bug fix: NullPointerException if filter config is null
  * bug fix: Fix IE measurement problem in RUM footer
  * bug fix: API calls should not throw exceptions


v2.0.2
  * bug fix: Auto RUM compiler error instrumenting some JSPs
  * bug fix: Auto RUM should inject header after meta tags
  * bug fix: Installer does not modify start script if another javaagent switch is present
  * bug fix: Agent breaks request URI parsing in Tomcat: JSESSIONID not removed (introduced in 1.4.0)
  * bug fix: Some compilers unable to compile JSP with auto RUM
  * Installer support for GlassFish


v2.0.1
  * bug fix: JBoss fails to start with JMX errors (introduced in 1.4.0)


v2.0.0
  * auto Real User Monitoring
  * support for X-Request-Start, X-Queue-Start, and X-Queue-Time request headers
  * bug fix: newrelic-api.jar does not work with Java 1.5
  * bug fix: NullPointerException instrumenting HttpClient
  * bug fix: setting request attribute "com.newrelic.agent.TRANSACTION_NAME" not working (broken in 1.4.0)
  * bug fix: uncaught exceptions not logged during startup
  * bug fix: thread profiling fails if CPU time not supported
  * bug fix: error is ignored only if it is the root cause


v1.4.0
  * Real User Monitoring
  * bug fix: setting 'ignore_status_codes' to a single value is ignored 
v1.3.0
  * component-based transaction naming
  * agent API
  * multiple applications enhancements
  * send data to RPM in UTF-8 format
  * bug fix: ClassCastException setting record_sql: off
v1.2.9.2
  * bug fix: don't depend on system property for trace logging
v1.2.9.1
  * bug fix: transaction not always cleared
  * bug fix: change to log_level setting not dynamic (introduced in 1.2.9)
v1.2.9
  * obfuscate selected fields in SQL statements
  * measure method invocation time in nanoseconds
  * bug fix: report data to multiple app names broken in 1.2.008
  * bug fix: NullPointerException instrumenting JRun 4.
  * bug fix: Prevent Agent from starting more than once
  * bug fix: Sample memory at least once per harvest
  * bug fix: memory leak in Tomcat with Java logging and System.err  
v1.2.008
  * multiple applications
  * get apdex_t from RPM
  * remove built-in URL normalization rules
  * record nested exceptions in error report
  * support for HttpClient version 4
  * bug fix: Solr JSON deserialization error in RPM
  * bug fix: purge dead thread ids and catch uncaught exceptions in runnables
v1.2.007
  * added support for Oracle JDBC drivers
  * added support for parameterized SQL
  * added log_sql config property in transaction_tracer section to write SQL to log instead of sending to the RPM service
  * enable_custom_tracing is true by default
  * bug fix: root cause of exception not reported for custom exception handler
  * bug fix: NullPointerException caused by java.lang.Throwable.getStackTrace() returning null
  * bug fix: app server port not formatted correctly in log
  * bug fix: java.lang.IncompatibleClassChangeError with Hibernate 3.5
v1.2.006
  * added install command to back up/edit start script on Tomcat, Jetty and JBoss 
v1.2.005.3
  * added support for prepared statements with Microsoft SQL Server JDBC driver and jTDS SQL Server and Sybase JDBC driver
  * removed a synchronized call to get a handle to the agent from tracers
v1.2.005.2
  * fixed a problem related to Solr request names - urls were including parameters
v1.2.005.1
  * fixed a few problems related to WebSphere instrumentation
v1.2.005
  * added Solr support
  * use a new method to connect to the RPM service
v1.2.004.4
  * allow Spring transactions to be named using the controller/method name
  * do not ding apdex score for ignored errors (404s, for example)
v1.2.004.2.
  * fix explain plans
  * report errors that have been routed to jsp error pages
v1.2.004.
  * web transactions break out Hibernate calls by entity operation
  * added instrumentation for Solr autocommit background tasks
  * added a tracer to Jersey resources so they show up in transaction breakdowns
  * bug fix for MySql explain plans
  * bug fix to prevent non-numeric numbers from funking up StatsImpl
v1.2.001.
  * enhanced PostgreSQL JDBC support
  * added JSF instrumentation.  Lifecycle execute(..) and render(..) are broken out.  So is com.sun.faces.lifecycle.Phase.doPhase(..)
  * upgraded to ASM 3.2  
v1.2.000.
  * show sql for callableStatements created with Connection.prepareCall
  * bug fixes for Resin servlet container
  * bug fixes related to http commons instrumentation
  * fix custom instrumentation to support @Trace annotations on methods with array arguments
  * instrument Connection.prepareCall() methods so that sql is captured for these invocations
  * fix a bug that breaks tracer exclusive times when transaction tracing is turned off 
v1.1.005.
  * switched from org.JSON to JSON.simple for JSON serialization
  * use a less verbose JSON format (more arrays, less hashes)
  * make the log_level setting hot so the log level can be changed without restarting the agent
  * improved Resin support.  Exception stacks are reported with traced errors
