Driver.getConnection зависает с использованием драйвера SQLServer и Java 1.6.0_29

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

26
задан Kara 15 January 2014 в 02:55
поделиться

7 ответов

Я столкнулся с точно таким же поведением:

Я использую Oracle XE и MS SQL Server Express на моем 64-битном ПК с Windows 7 - я обновился до java 1.6.0_29 с 1.6.0_27 (версия x64) и был удивлен, увидев, что те же программы могут подключаться к Oracle XE, но не к MS SQL Server ...

Я проследил проблему до javax.sql.DataSource.getConnection(), где она висела навсегда - потому что это всего лишь интерфейс, драйверы jdbc вызвали у меня подозрения ...

Я использую драйвер JDBC для MS SQL Server 3.0.1301.202 и даже обновился до CTP-версии SQL Server («предварительный технический обзор сообщества») 4.0.1722.1, потому что я подозревал, что он должен что-то делать с драйвером jdbc но безуспешно: все еще висит!

Мой обходной путь должен был понизиться до 1.6.0_27 и - bang: все снова было хорошо!

С наилучшими пожеланиями, Эрих

15
ответ дан Erich Siffert 15 January 2014 в 02:55
поделиться

Смотрите решение здесь. https://forums.oracle.com/forums/thread.jspa?messageID=9954398&tstart=0 http://social.msdn.microsoft.com/Forums/. ru / sqldataaccess / thread / 97dce8fd-6487-4bca-80b0-492167db3e0d

«По-видимому, это связано с использованием SSL и может быть смягчено путем замены jsse.jar в jre / lib на тот, что был ранее версия, например, из версии 1.6.0_27. Меня смутило то, что 1.6.0_29 работает с MS JDBC и более старыми установками SQL Server '05, которые не выполняют безопасных соединений. Все более новые серверы (SQL Server '08 R2) потерпеть неудачу, поскольку им требуется SSL, а Java 1.6.0_29 в этом случае не работает с использованием jTDS или MS JDBC. "

4
ответ дан Paul 15 January 2014 в 02:55
поделиться

Как к вашему сведению, существует новая сборка шага № 30 в семействе 1.6, которая устраняет проблему: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7103725

3
ответ дан Matt Felzani 15 January 2014 в 02:55
поделиться
  • 1
    Я терял веру в 2:00, пока я не столкнулся с Вашим ответом, спасибо – Brian J 12 November 2015 в 01:47
  • 2
    Я терял веру в 2:00, пока я не столкнулся с Вашим ответом, спасибо – Brian J 12 November 2015 в 01:47
  • 3
    Я терял веру в 2:00, пока я не столкнулся с Вашим ответом, спасибо – Brian J 12 November 2015 в 01:47
  • 4
    Я терял веру в 2:00, пока я не столкнулся с Вашим ответом, спасибо – Brian J 12 November 2015 в 01:47
  • 5
    Я терял веру в 2:00, пока я не столкнулся с Вашим ответом, спасибо – Brian J 12 November 2015 в 01:47

У меня та же проблема с зависанием, и только с Java 1.6.0_29. Я заметил, что при обновлении до 7.1 проблема исчезнет

1
ответ дан Debi 15 January 2014 в 02:55
поделиться

Та же проблема здесь (SQLJDBC4, MsSQL 2008 R2, JDK1.6.0.29), но после обновления до 1.6.0.30 проблема была решена ...

Так что это должно быть критической ошибкой в ​​DriverManager версии 1.6.0.29

1
ответ дан Michel 15 January 2014 в 02:55
поделиться

Обновление до 1.6.0_30 также работало для меня. Microsoft выпустила заявление , объявляющее об исправлении в первом квартале 2012 года. Похоже, это уязвимость Java (BEAST).

1
ответ дан frapontillo 15 January 2014 в 02:55
поделиться

У меня была точно такая же проблема, когда jBoss зависал на driver.getConnection (). Однако я использовал jBoss EAP 5.1, java 1.6.0_37x64, Sql Server 2005 и jtds1.2.5 в качестве драйвера jdbc.

Обходной путь, который мне пришлось использовать, - это настройка jvm при запуске: -Djsse.enableCBCProtection = false, и это решило ее.

Я не считаю это исправлением, а скорее обходным решением на данный момент.

Я нашел ошибку: 7105007: Microsoft & amp; JTDS JDBC драйвер сломался после обновления до 1.6.0_29 , который был очень похож, но имел другую причину. Что было интересно, так это то, что он появился как на драйверах MS, так и на драйверах jtds.

0
ответ дан James Drinkard 15 January 2014 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: