У нас есть проект, работающий с базой данных Oracle 19.3, и приложение Java, использующее драйвер JDBC Oracle 19.3 (который доступен в Maven Central). В Windows с JRE 1.8 все хорошо, но когда я запускаю либо на нашем сервере сборки, либо в WSL Ubuntu с OpenJDK 11.0.3, он отказывается подключаться к базе данных. В частности:
ERROR: Unexpected error
java.sql.SQLRecoverableException:
Unable to obtain connection from database (jdbc:oracle:thin:@//<host>:<port>/<db>) for user '<user>': IO Error: Invalid argument, Authentication lapse 0 ms.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL State : 08006
Error Code : 17002
Message : IO Error: Invalid argument, Authentication lapse 0 ms.
at JuliasApplication.openConnection(JdbcUtils.java:60)
...
Caused by: java.sql.SQLRecoverableException: IO Error: Invalid argument, Authentication lapse 0 ms.
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:874)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562)
...
Caused by: java.io.IOException: Invalid argument, Authentication lapse 0 ms.
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:870)
... 12 more
Caused by: java.io.IOException: Invalid argument
at java.base/sun.nio.ch.SocketChannelImpl.sendOutOfBandData(Native Method)
at java.base/sun.nio.ch.SocketChannelImpl.sendOutOfBandData(SocketChannelImpl.java:521)
at java.base/sun.nio.ch.SocketAdaptor.sendUrgentData(SocketAdaptor.java:323)
at oracle.net.nt.TcpNTAdapter.sendUrgentByte(TcpNTAdapter.java:433)
at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:159)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:340)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1596)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588)
... 12 more
Если я включу драйвер JDBC 18.3, то все нормально в обеих средах;если я переключаюсь на базу данных 18.3, то все хорошо в обеих средах. Это действительно дает нам обходной путь, но нам очень неудобно, что мы не понимаем, что происходит. И я не могу найти что-нибудь в Интернете о «истечении срока аутентификации». Кто-нибудь может увидеть какие-либо подсказки, которые могли бы объяснить неудачу?