Oracle 19c container times out with versions 19.3.0.0 and onwards of the OJDBC

The Oracle 19c Docker image does not work with Version 19.3.0.0 and above of the Oracle JDBC driver, giving a strange “Got minus one from read call” for any ojdbc driver versioned at 19.3 or above.

I experienced the following error while developing a Quarkus application that creates the jdbc datasource for obtaining connection to an Oracle Database.

2022-01-11 10:33:39,980 DEBUG [io.agr.pool] (agroal-11) Cause: : java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:858)
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)
at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:204)
at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:509)
at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:490)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.NSProtocolNIO.doSocketRead(NSProtocolNIO.java:557)
at oracle.net.ns.NIOPacket.readHeader(NIOPacket.java:258)
at oracle.net.ns.NIOPacket.readPacketFromSocketChannel(NIOPacket.java:190)
at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:132)
at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:105)
at oracle.net.ns.NIONSDataChannel.readDataFromSocketChannel(NIONSDataChannel.java:91)
at oracle.net.ano.AnoCommNIO.p(Unknown Source)
at oracle.net.ano.AnoCommNIO.e(Unknown Source)
at oracle.net.ano.AnoComm.readUB4(Unknown Source)
at oracle.net.ano.Ano.c(Unknown Source)
at oracle.net.ano.Ano.negotiation(Unknown Source)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:368)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1600)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:591)
... 12 more

The Oracle instance was a docker container with Oracle 19.3.0-ee. The Oracle Image creation has been covered in the previous posted here : How to create an Oracle Database Docker Image. The Quarkus extension named ‘jdbc-oracle’ brings transitively the jdbc driver ojdbc10:19.3.0.0.

In order to solve this issue, you must provide the connection property oracle.net.disableOob=true. This property disables the “Out of band break” for the thin client.

Below you can find a sample application.properties for a Quarkus application uses an Oracle Datasource.

quarkus.datasource.ds.db-kind=oracle
quarkus.datasource.ds.jdbc.driver=oracle.jdbc.driver.OracleDriver
quarkus.datasource.ds.username=xxxx
quarkus.datasource.ds.password=xxxx
quarkus.datasource.ds.jdbc.url=jdbc:oracle:thin:@host:1521/service?oracle.net.disableOob=true