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