IBM Connections 6.0, TDI and MS SQL 2016

The other day I found myself in a nasty catch 22 when I was trying to fill the profiles database of the new Connections 6.0 CR3 environment I’m installing for a large client. The problem has to do with the MS SQL 2016 backend. As I haven’t heard of anyone else using MS SQL as backend db, I guess this won’t affect many, but if you’re one those rare cases, this might help you.

The issue: MS SQL 2016 no longer works with the sqljdbc4.jar driver that was used for the Connections 5.5 installation (with MS SQL 2012). Newer drivers however don’t support Java 6.

Explanation: If you try to use sqljdbc4.jar as your driver to connect to MS SQL 2016, you get the error:
“exception”: “java.lang.Exception: CTGDIJ109E Unable to connect to the database (The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: “java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 64″. ClientConnectionId:c4f6db93-df1c-42ad-9c7e-3d6c7bfa6cf1). Verify that all the database connection parameters are correctly specified.”

A search on the internet told me that this error is caused by a too old SQL driver. The solution therefore would be to upgrade the SQL driver. I tried a newer version: sqljdbc42.jar. This version however gave me the following error:
“message”: “java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=com/microsoft/sqlserver/jdbc/SQLServerDriver, offset=6”
“exception”: “java.lang.Exception: java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=com/microsoft/sqlserver/jdbc/SQLServerDriver, offset=6”

This error is caused by the fact that TDI 7.1.1 with Fixpack 6 (the required version for Connections 6.0) by default comes with Java 6. Java 6 is no longer supported by Microsofts jdbc drivers, starting with version 4.1. The solution therefore seems simple: Download the java 8 fix for TDI. You can find this fix (LA0031) here. I downloaded this fix and installed it, only to get a new error:
“message”: “java.lang.ExceptionInInitializerError”
“exception”: “java.lang.Exception: java.lang.ExceptionInInitializerError”

The problem here is the standard TDISOL directory that comes with IBM Connections CR1. This TDISOL directory contains files which are not compatible with Java 8. So there’s the catch 22. My MS SQL driver won’t support Java 6, but libraries in the TDISOL dirctory don’t support java 8. I was already writing my PMR for IBM when I realised I had one option left: Java 7.

Solution: Microsoft’s newest drivers don’t support Java 7 anymore either, but there was one newer version than sqljdbc4.jar that did and that did support MS SQL 2016 too: sqljdbc41.jar. The clou was therefore to use this driver and replace the jre in TDI with the Java 7 version. I used this version. The latest 64-bit version of java 7 for TDI 7.1.1. This combination works!