Невозможно подключиться к базе данных Oracle с помощью ojdbc8 после обновления Java с версии 8u144 — любое обновление после версии 8u171 включительно

Я пытался обновить версию Java (в настоящее время 8u144), используемую в приложении, подключающемся к базе данных Oracle 12.2 с помощью ojdbc8. Моя последняя попытка обновиться до 8u201 завершается со следующей ошибкой:

Exception in thread "main" java.lang.NullPointerException
at oracle.net.jndi.JndiAttrs.getAttrs(JndiAttrs.java:215)
at oracle.net.resolver.AddrResolution.<init>(AddrResolution.java:237)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:233)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1438)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:384)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:273)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:198)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:176)
at Main.main(Main.java:22)

Я использую URL-адрес LDAP с поддерживаемым и задокументированным синтаксисом, подобным следующему:

"jdbc:oracle:thin:@ldaps://ldap.example.com:7777/sales,cn=OracleContext,dc=com"

Хотя мой вопрос похож на следующий вопрос, я не использую Hibernate, и этот вопрос, похоже, на самом деле не отвечает/не решает, что может быть основной проблемой.

Не удалось установить соединение с БД после обновления Java 8

Чтобы все упростить, я сократил свои тесты до простого проекта, используя только ojdbc8 и что-то вроде следующего:

    String url = "jdbc:oracle:thin:@ldaps://....";
    OracleDataSource ods = new OracleDataSource();
    ods.setUser("indiana");
    ods.setPassword("thedoctor");
    ods.setURL(url);

    Connection conn = ods.getConnection();
    PreparedStatement st = conn.prepareStatement("select * from world where temple = 'doom'");

    ResultSet rs = st.executeQuery();
    while(rs.next()) {
        System.out.println(rs.getString("last"));
    }

Если я переключу Java на 8u144, используя точно такой же код и конфигурацию, все вышеперечисленное будет работать нормально. Я в растерянности...

ОБНОВЛЕНИЕ Я немного сузил проблему и обнаружил, что сбой происходит на Java 8u171. Я просматриваю примечания к выпуску этой версии и все остальное, что могу найти сейчас.


person GarySharpe    schedule 01.02.2019    source источник
comment
Вы пытались просмотреть примечания к выпуску этих обновлений, чтобы узнать, были ли внесены какие-либо изменения?   -  person João Rebelo    schedule 01.02.2019
comment
Спасибо за предложение. После дополнительного тестирования я сузил проблему до разрыва на 8u171. Я смотрю на эти примечания к выпуску сейчас.   -  person GarySharpe    schedule 02.02.2019
comment
Это может быть ошибка JDK. Из любопытства вы пробовали JDK11?   -  person Jean de Lavarene    schedule 02.02.2019
comment
Я не. Я не уверен, что смогу переключиться на это приложение, но в любом случае.   -  person GarySharpe    schedule 02.02.2019
comment
Какую версию драйвера Oracle JDBC вы используете (ojdbc8 просто означает, что он предназначен для Java 8 и не указывает конкретную версию)?   -  person Mark Rotteveel    schedule 02.02.2019
comment
любые обновления? :) Я очень хочу знать, в чем может быть проблема :)   -  person João Rebelo    schedule 04.02.2019


Ответы (1)


Похоже, что рукопожатие SSL не работает при создании соединения LDAPS. Запуск тестовой программы с опцией отладки java net поможет проанализировать проблему. Добавьте эту опцию -Djavax.net.debug=all для запуска вашей тестовой программы, и выходные данные отладки будут содержать журналы отладки SSL, которые будут полезны для определения причины. JDK 8u171 имеет некоторые изменения, связанные с безопасностью.

(Отладка SSL:: https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html)

person Aram    schedule 05.02.2019