Transitioning from jTDS to Microsoft's JDBC driver
This page describes how to change from using jTDS to using the Microsoft SQL Server JDBC driver to access Microsoft SQL Server.
What do I have to do?
Bamboo will try to automatically migrate the database configuration during upgrade. If that fails, the system will lock on startup. To resolve this, you need to manually update the driver class and URL.
How to proceed
In the Bamboo server home directory, bamboo.cfg.xml must be edited to change the JDBC driver and URL. The existing configuration should look similar to this:
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property> <property name="hibernate.connection.password">PASSWORD</property> <property name="hibernate.connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433/Bamboo</property> <property name="hibernate.connection.username">bamboo_user</property> <property name="hibernate.dialect">com.atlassian.bamboo.hibernate.SQLServerIntlDialect</property>
The JDBC URL above is in the format constructed by Bamboo when Connecting to SQL Server and will automatically be updated to a URL compatible with Microsoft's driver, with no change required on the administrator's part. If the URL contains additional properties, such as domain=, it will need to be manually updated.
To use Microsoft's SQL Server driver, the settings above would be updated to this:
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="hibernate.connection.password">your_password</property> <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=bamboo</property> <property name="hibernate.connection.username">username</property> <property name="hibernate.dialect">com.atlassian.bamboo.hibernate.SQLServerIntlDialect</property>
The exact values to use in the new URL are beyond the scope of this documentation; they must be chosen based on the jTDS settings they are replacing.
Additional Information for the curious
The new JDBC driver class is:
The JDBC URL format for the jTDS driver is documented on SourceForge at http://jtds.sourceforge.net/faq.html#urlFormat.
The JDBC URL format for Microsoft's SQL Server driver is documented on MSDN at http://msdn.microsoft.com/en-us/library/ms378428.aspx, with documentation for additional properties at http://msdn.microsoft.com/en-us/library/ms378988.aspx.
Why change drivers?
Recent releases of Hibernate, which Bamboo uses to simplify its persistence layer, have introduced a requirement that the JDBC drivers and connection pools used be JDBC4-compliant. JDBC4 was introduced with Java 6.
The jTDS driver used by releases prior to Bamboo Server 6.0 is a JDBC3 driver, compatible with Java 1.3, and therefore cannot be used with newer versions of Hibernate. While jTDS 1.3.0 and 1.3.1 claim to implement JDBC4, and JDBC4.1, they actually don't. The new methods have been "implemented", but their implementations are all
throw new AbstractMethodError(), which means they can't actually be used. (See an example here, on GitHub.)
Since jTDS 1.3.1 does not provide a functioning JDBC4 implementation, the decision was made to replace jTDS with Microsoft's own SQL Server driver. Microsoft's driver is actively maintained, where jTDS hasn't been updated since 2014 (and prior to the small round of updates done in 2014 it hadn't been updated for multiple years). Microsoft offers a full JDBC4.2 (Java 8) driver and supports all the features of SQL Server, including SQL Server 2016.
Bamboo attempts to automatically update jTDS JDBC URLs to values compatible with Microsoft's JDBC driver. However, for installations using custom JDBC URLs–for example, to use domain authentication–such automatic updating is not possible; the URL, which was manually entered, must be manually updated.