Проблема подключения JTDS 1.3 с java8 x64

Я получаю следующую ошибку при попытке использовать jtds 1.3 + jdk1.8(64) в Windows 7.

Exception in thread "main" java.lang.RuntimeException: Error initializing DESEngine
    at net.sourceforge.jtds.util.DESEngine.init(DESEngine.java:76)
    at net.sourceforge.jtds.util.DESEngine.<init>(DESEngine.java:51)
    at net.sourceforge.jtds.jdbc.NtlmAuth.answerLmChallenge(NtlmAuth.java:52)
    at net.sourceforge.jtds.jdbc.TdsCore.sendNtlmChallengeResponse(TdsCore.java:2179)
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:613)
    at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:369)
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at test4.Test4.main(Test4.java:15)
Caused by: java.security.NoSuchAlgorithmException: DES SecretKeyFactory not available
    at javax.crypto.SecretKeyFactory.<init>(SecretKeyFactory.java:122)
    at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160)
    at net.sourceforge.jtds.util.DESEngine.init(DESEngine.java:69)
    ... 9 more

Пример кода здесь:

public static void main(String[] args) throws Exception {
    String url = "jdbc:jtds:sqlserver://server:1433/db1;domain=dm1";
    String user = "user";
    String pwd = "password";

    Class.forName("net.sourceforge.jtds.jdbc.Driver");
    Connection cn = DriverManager.getConnection(url, user, pwd);
    System.out.println("connected!");
}

Java-версия:

C:\Program Files\Java\jdk1.8.0_40\bin>java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

И вот тесты, которые я сделал:

jtds-1.3(1.3.1)
Windows7 + jdk1.7.79 (32) works
Windows7 + jdk1.7.79 (64) works
Windows7 + jdk1.8.40 (32) works
Windows7 + jdk1.8.40 (64) NOT working
RedHat6.6 + jdk1.7.79 (64) works
RedHat6.6 + jdk1.8.40 (64) works

jtds-1.2.8:
works on any combination of system above.

Какие-нибудь известные проблемы, связанные с jtds1.3 + java8(64) в Windows?


person fivelements    schedule 19.06.2015    source источник
comment
jtds 1.3.1 + jdk 1.8.0_45 x64 в Windows 8.1 отлично работает для меня (не должно быть никакой разницы между Window 7 x64 и Windows 8 x64, потому что jdk одинаков для обоих). И в соответствии с javadoc DES должен быть поставляется. Возможно, стоит попробовать jdk 1.8.0u45, чтобы посмотреть, решит ли это вашу проблему.   -  person assylias    schedule 19.06.2015
comment
спасибо, работает с 1.80_45 x64.   -  person fivelements    schedule 20.06.2015


Ответы (1)


В jtds 1.3.1 есть известная ошибка при попытке использовать SSL при подключении к базе данных, если она запущена с java 8. Это задокументировано здесь: http://sourceforge.net/p/jtds/bugs/725/ Хотя он помечен как исправленный, новая версия кода еще не упакована. Мы используем флаг URL ssl=request при подключении с помощью драйвера jtds, поэтому, если сервер поддерживает ssl, мы установим ssl-соединение. Когда мы использовали java 8, у нас возникали сбои подключения к базе данных, и в конечном итоге причиной стала эта ошибка. Вы можете проверить код и собрать драйвер самостоятельно (каким бы уродливым он ни был), но, поскольку прошло уже более 1,5 лет, а новая версия еще не выпущена, это будет самое быстрое жизнеспособное исправление.

person Jeffery K    schedule 09.11.2015