CLM databases can't connect because dll not found
We're running CLM 6.0.5 on Windows Server 2012 R2 with SQL Server. In performing the installation the JTS database is able to connect without an issue. However, on running the setup steps where the applications are configured we're seeing a database connection errors.
The server was unable to connect to the database because the database connection settings are invalid or because database is unreachable (SQLSTATE: 08S01, SQLCODE: 0). Verify the connection settings in your teamserver.properties file. See the Jazz Team Server log for more information.ID CRJAZ2654E
Looking the logs there are errors like:
com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication. ClientConnectionId:22af460a-6073-4054-98c5-f718833ee7e6
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1669)
at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:61)
... and further down....
at java.lang.Thread.run(Thread.java:785)
Caused by: java.lang.UnsatisfiedLinkError: sqljdbc_auth (Not found in java.library.path)
at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1348)
Why would the JTS database connection work fine, while the other applications cannot connect? Thanks in advance.
Comments
Donald Nong
Mar 22 '18, 11:43 p.m.Unless you modify the JTS teamserver.properties file before running /jts/setup, JTS connects to the bundled Derby database first. Please double check whether JTS actually connects to SQL Server. Also, is this an all-in-one deployment or distributed? If all-in-one and you still see this error, it is hard to explain. Some claimed that copying the sqljdbc_auth.dll file to the JRE's "bin" folder resolved the issue but I don't think it's the right approach.
Daryl Walters
Mar 27 '18, 4:07 p.m.I've configured JTS to not use the sqljdbc_auth.dll and it can now connect to the database. I've attempted to have other applications use it, but if there is more than one attempting to load the dll, the other applications will report an error like:
Donald Nong
Mar 27 '18, 8:56 p.m.Are you using WAS? To avoid loading libraries used by WAS but of different versions, we usually set the class loader policy to "parent last" and that's probably the reason you see the class loader error mentioned above. Setting it to "parent first" may get rid of the error but it may introduce other unwanted behaviors. I think you should contact IBM Support to get it properly investigated.
Daryl Walters
Mar 28 '18, 8:28 a.m.Currently we're trying to use WAS Liberty for this CLM installation, as we've used that for other deployments with success. I've contacted IBM support already, but so far no information on how to configure this to allow the dll to be used by more than just one of the CLM applications on this server.
Donald Nong
Mar 29 '18, 4:30 a.m.If you use JDBC connections, I think you cannot avoid this because each CLM application maintains its own JDBC connections. If you have to use WAS, try to switch to J2EE container so that only WAS itself will load the JDBC driver.
https://jazz.net/wiki/bin/view/Main/JDBCWASPoolType2
I cannot find any up-to-date version of this document, but you should get the idea.
Daryl Walters
Apr 03 '18, 8:12 a.m.Is it possible to use a J2EE container with Liberty? How do you go about setting up this container?
Donald Nong
Apr 04 '18, 3:45 a.m.I'm not aware of such feature in Liberty, unfortunately.