MySQL Lists are EOL. Please join:

List:MySQL and Java« Previous MessageNext Message »
From:Mark Matthews Date:March 6 2008 7:49pm
Subject:MySQL Connector/J 5.1.6 Has Been Released!
View as plain text  
Hash: SHA1


MySQL Connector/J 5.1.6, a maintenance release of the production 5.1
branch has been released. Connector/J is the Type-IV pure-Java JDBC
driver for MySQL.

Version 5.1.6 is suitable for use with any MySQL version including
MySQL-4.1, MySQL-5.0, MySQL-5.1 RC or the MySQL-6.0 development

It is now available in source and binary form from the Connector/J
download pages at

and mirror sites (note that not all mirror sites may be up to date at
this point of time - if you can't find this version on some mirror,
please try again later or choose another download site.)

As always, we recommend that you check the change log

and "Upgrading" sections

in the manual before upgrading as well as the "CHANGES" file in the
download archive to be aware of changes in behavior that might affect
your application.

We welcome and appreciate your feedback, bug reports, bug fixes, patches

MySQL Connector/J 5.1.6 includes the following changes:

    - JDBC-4.0-ized XAConnections and datasources.

    - Fixed BUG#31790 MysqlValidConnectionChecker doesn't properly
handle ReplicationConnection

    - Fixed Bug#20491 - DatabaseMetadata.getColumns() doesn't return
correct column names if connection character set isn't UTF-8. (There was
a server-side component of this that was fixed late in the 5.0
development cycle, it seems, this is the last piece that fixes some
loose ends in the JDBC driver). This fix touches *all* metadata
information coming from the MySQL server itself.

    - Fixed MysqlIO.nextRowFast() to only attempt to read server
warning counts and status if talking to a 4.1 or newer server (fixes a
hang when reading data from 4.0 servers).

    - Made profiler event handling extensible via the
"profilerEventHandler" connection property.

    - Fixed Bug#31823 - CallableStatement.setNull() on a stored function
would throw an ArrayIndexOutOfBounds when setting the last parameter to
null when calling setNull().

    - Added SSL-related configuration property
"verifyServerCertificate". If set to "false", the driver won't verify
  the server's certificate when "useSSL" is set to "true".

      When using this feature, the keystore parameters should be
secified by the "clientCertificateKeyStore*" properties, rather than
system properties, as the JSSE doesn't make it straightforward to have a
non-verifying trust store and the "default" key store.

    - Fixed ResultSetMetadata.getColumnName() for result sets returned
from Statement.getGeneratedKeys() - it was returning null instead of
"GENERATED_KEY" as in 5.0.x.

    - More applicable fix for the "random" load balance strategy in the
face of node non-responsive, it re-tries a *different* random node,
rather than waiting for the node to recover (for BUG#31053)

    - Fixed BUG#32577 - no way to store two timestamp/datetime values
that happens over the DST switchover, as the hours end up being the same
when sent as the literal that MySQL requires.

      Note that to get this scenario to work with MySQL (since it
doesn't support per-value timezones), you need to configure your server
(or session) to be in UTC, and tell the driver not to use the legacy
date/time code by setting "useLegacyDatetimeCode" to "false". This will
cause the driver to always convert to/from the server and client
timezone consistently.

      This bug fix also fixes BUG#15604, by adding entirely new
date/time handling code that can be switched on by
"useLegacyDatetimeCode" being set to "false" as a JDBC configuration
property. For Connector/J 5.1.x, the default is "true", in trunk and
beyond it will be "false" (i.e. the old date/time handling code, warts
and all will be deprecated).

    - Fixed BUG#32877 - Load balancing connection using best response
time would incorrectly "stick" to hosts that were down when the
connection was first created.

      We solve this problem with a black list that is used during the
picking of new hosts.

      If the black list ends up including all configured hosts, the
driver will retry for a configurable number of times (the
"retriesAllDown" configuration property, with a default of 120 times),
sleeping 250ms between attempts to pick a new connection.

      We've also went ahead and made the balancing strategy extensible.
To create a new strategy, implement the interface
com.mysql.jdbc.BalanceStrategy (which also includes our standard
"extension" interface), and tell the driver to use it by passing in the
class name via the "loadBalanceStrategy" configuration property.

    - Fixed BUG#30508 - ResultSet returned by
Statement.getGeneratedKeys() is not closed automatically when statement
that created it is closed.

    - Added two new connection properties,
"selfDestructOnPingSecondsLifetime" and
"selfDestructOnPingMaxOperations" designed to control overall connection
lifetime (useful to reclaim resources on the server side) for connection
pools that don't have such a facility.

      The driver will consult the values of these properties when a ping
is sent, either through calling, issuing the "ping
marker" query (any query that starts with "/* ping */"), or when using
JDBC-4.0, calling Connection.isValid().

      If the connection has issued too many operations, or is too old,
the driver will throw a SQLException with the SQLState of "08S01" at the
time of the ping, which will cause the connection to be invalidated with
most pools in use today.

    - Fixed issue where driver could send invalid server-side prepared
statement IDs to the server when the driver was setup to do
auto-reconnect as the connection could get set up enough to start
sending queries on one thread, while the thread that "noticed" the
connection was down hasn't completed re-preparing all of the server-side
prepared statements that were open when the connection died.

      Potentially fixes cause for bug 28934. Potentially fixes other
possible race conditions where one thread that has created a connection
"shares" it with other threads if the connection is reconnected due to
auto-reconnect functionality.

    - Fixed BUG#33823 - Public interface ResultSetInternalMethods with
reference to non-public class com.mysql.jdbc.CachedResultSetMetaData.

    - For any SQLException caused by another Throwable, besides dumping
the message or stack trace as a string into the message, set the
underlying Throwable as the cause for the SQLException, making it
accessible via getCause().

    - Fixed BUG#34093 - Statements with batched values do not return
correct values for getGeneratedKeys() when "rewriteBatchedStatements" is
set to "true", and the statement has an "ON DUPLICATE KEY UPDATE" clause.

    - Fixed BUG#31192 - Encoding Issue retrieving serverVersion in
MysqlIO in the method doHandshake when encoding doesn't contain ASCII
characters in the "standard" place (i.e. ebcdic).

    - Fixed issue where META-INF in the binary .jar file wasn't packed
correctly, leading to failure of the JDBC-4.0 SPI mechanism.

    - CallableStatements that aren't really stored procedure or stored
function calls can now be used, for tools such as Oracle JDeveloper ADF
that issue statements such as DDL through CallableStatements.

    - Fixed BUG#34518 - Statements using cursor fetch leaked internal
prepared statements until connection was closed. The internal prepared
statement is now held open while the result set is open, and closed by
the result set itself being closed.

    - Fixed BUG#34677 - Blob.truncate() wouldn't take "0" as an argument.

    - CommunicationExceptions now carry information about the last time
a packet was received from the MySQL server, as well as when the last
packet was sent to one, in an effort to make it easier to debug
communications errors caused by network timeouts.

    - Reverted a change to DatabaseMetadata.getColumns() from 5.0, where
     getColumns() would report NULL for COLUMN_SIZE for TIME, DATE,
DATETIME     and TIMESTAMP types. It now reports the column size, in the
      DatabaseMetadata implementations that use "SHOW" commands, and the

    - Fixed Bug#34762 - RowDataStatic does't always set the metadata in
      ResultSetRow, which can lead to failures when unpacking DATE,
TIME, DATETIME and TIMESTAMP types when using absolute, relative, and
previous result set navigation methods.

    - Fixed BUG#34703 - Connection.isValid() invalidates connection
after timeout, even if connection is actually valid.

    - Fixed BUG#34194 - ResultSetMetaData.getColumnTypeName() returns
   "UNKNOWN" for GEOMETRY type.

    - Fixed BUG#33162 - NullPointerException instead of SQLException
   thrown for ResultSet.getTimestamp() when not positioned on a row.

    - The ConnectionLifecycleInterceptor interface now has callback
methods for transaction initiation (transactionBegun()), and completion
(transactionCompleted()), as reported by the *server* (i.e. calling
Connection.setAutoCommit(false) will not trigger transactionBegun()
being called, however the first statement which causes a transaction to
start on the server will cause transactionBegun() to be called *after*
the statement has been processed on the server).

    - Fixed Bug#34913 - ResultSet.getTimestamp() returns incorrect
values for month/day of TIMESTAMPs when using server-side prepared
statements (not enabled by default).

    - Fixed BUG#34937 - MysqlConnectionPoolDataSource does not support
     ReplicationConnection. Notice that we implemented
com.mysql.jdbc.Connection for ReplicationConnection, however, only
accessors from ConnectionProperties are implemented (not the mutators),
and they return values from the currently active connection. All other
methods from com.mysql.jdbc.Connection are implemented, and operate on
the currently active connection, with the exception of
resetServerState() and changeUser(), which operate on all connections
held by the replication connection.

    - Connections created with jdbc:mysql:replication:// URLs now force
     roundRobinLoadBalance=true on the slaves, and round-robin load
balancing now uses a "random" choice to more evenly distribute load
across slave      servers, especially in connection pools. Connections
that are configured      with "roundRobinLoadBalance=true" no longer set
the failover state,      as it's assumed that we're not attempting to
fall-back to a master      server. This fixes BUG#34963.


- --
Mark Matthews, Architect (Enterprise Tools)
MySQL, Inc. Chicago, USA -
Version: GnuPG v1.4.6 (MingW32)
Comment: Using GnuPG with Mozilla -

MySQL Connector/J 5.1.6 Has Been Released!Mark Matthews6 Mar