======================================================================================= New Features in the Oracle JDBC and UCP Release 23.4.0.24.05 ======================================================================================= ** Mission Critical Features ** - AI Vector Search: Datatype support in JDBC Starting with Oracle Database Release 23ai, a new Vector datatype is supported. VECTOR can be declared as a table's column. The new OracleType.VECTOR, OracleType.VECTOR_INT8, OracleType.VECTORFLOAT32, and OracleType.VECTORFLOAT64 can be used to represent Vector datatypes. - New connection property sendBooleanAsNativeBoolean to restore the old behavior: JDBC 23.4 provides a compatibility property "oracle.jdbc.sendBooleanAsNativeBoolean", when set to false (the default is true), will restore the old behavior of sending integer values (0/1) for boolean data type. - JDBC support for ARRAY ENQUEUE DEQUEUE with JSON payload type: Two new utility methods getJsonSchema() and isDualityView() are added in JDBC Thin driver for supporting JSON Duality Views. JSON payload with enqueue/dequeue calls will work correctly. ** Java Performance and Scalability ** - Improve sub-optimal response time with executeBatch: Batch DML operation (executeBatch and executeLargeBatch) were making multiple database calls to execute resulting in a sub-optimal performance. With this change, these batch operations are executed with a single database call eliminating the need for multiple calls thus reducing the amount of time spent waiting for network I/O thus improving the performance. - UCP - Add connection borrow fairness while creating new connections: UCP will look if there are any connections released and use those connections instead of creating a brand new connetion thus improving the performance. ** Security ** - Add Thumbprint based cert selection in JDBC Thin driver: This feature adds a support for selecting certificate using thumbprint of the certificate when multiple certificates are present in the keystore or when wallet has multiple certificates. The selected certificate is used for authenticating the client while TLS handshake. - EZConnect support for LDAPS/LADP: EZConnectPlus supported TCP and TCPS before. Now, EZConnect supports LDAPS/LADP protocol and its parameters. This makes it easy to use LDAP/LDAPS. ======================================================================================= New Features in the Oracle JDBC and UCP Release 23.3.0.23.09 ======================================================================================= ** Mission Critical Features ** - Self-Driven Diagnosability: This feature diagnoses the first occurrence of a failure in your Java app. It records the critical execution state in memory and then dumps the recording on error. - Sharding Enhancements: UCP support for split partition set, UCP support for XA transactions, and directory-based Sharding. - Transparent Application Continuity (TAC) Enhancements: Server-side templates, Draining with batches, Session-State-Stable cursor support, and Auto-enabling on all Oracle JDBC data sources. ** Security ** - Radius Challenge-Response Authentication (2FA): The RADIUS challenge-response authentication is an interactive authentication, where the RADIUS server asks for a valid response to a displayed challenge. - Support for longer passwords: JDBC supports long passwords up to 1024 bytes, transparently without any API change. - Kerberos Authentication Enhancements: Kerberos authentication does not need instantiating the KerberosLoginModule or the availability of Ticket Granting Ticket (TGT) in the CredentialCache. ** Java Performance and Scalability ** - Support for Oracle True Cache Datasource: A True Cache instance is an in-memory, mostly diskless, fully functional, read-only replica of the primary Oracle Database. It resides in the middle-tier, co-located with the application and is enabled at the JDBC level by setting the new 'oracle.jdbc.useTrueCacheDriverConnection' property to true. - DRCP (Multi-Pool & Tagging support): The new multi-pool feature allows sub-partitioning of the DRCP between several applications by naming the sub-partitions using (POOL_NAME= <pool_name>) in the connect string. - Reactive Extensions for UCP: UCP asynchronous extension is a set of methods that extend the UCP standard to offer asynchronous database access. - JDBC Support for Database Pipeline (using Reactive Programming): Pipelining is a form of network communication in which an application can send multiple requests to a database server, without having to wait for a response. The database sends a response when the results of each query are ready. - Support for Data Load Mode in Reactive Streams Ingest (RSI): The RSI allows fast data ingest into the Oracle database, using the direct path load and Reactive Streams mechanisms. To enable the DataLoad mode, you must use the 'useDataLoadMode' method. ** Ease of Development ** - Built-in JDBC Config Providers (FileSystem, HTTPS): Oracle JDBC supports centralized App config and resource providers through a new extensibility or plugin mechanism based on the standard Service Provider Interface. You can load three types of providers: Centralized Configuration Providers, Resource Providers, and Trace Event Listener Providers. - JSON-Relational Duality Views: JSON-relational duality views combine the advantages of using JSON documents with the advantages of the relational model while avoiding the limitations of each. A JSON-relational duality view exposes data stored in relational tables as JSON documents. - Support for BEQ in JDBC-Thin: Bequeath protocol allows the database client (e.g., Java/JDBC application) and the database server process residing on the same Linux host, to communicate directly without the network layer and the network listener. - Native Boolean datatype: Oracle JDBC Thin driver supports the oracle.jdbc.OracleType.BOOLEAN data type in compliance with the ISO SQL standard. ======================================================================================= Important behavior changes in Oracle JDBC 23c ======================================================================================= - setBoolean(int parameterIndex, boolean x): Starting from Oracle Database 23c, the JDBC-thin driver supports the BOOLEAN SQL data type newly introduced in 23c Oracle database. When you call setBoolean() method, the driver will send the value as a native BOOLEAN value as opposed to a VARNUM(1/0) like in the previous releases. This might cause some incompatibility issues in your current code. You can handle this by changing your code to either a) change the parameter datatype of setBoolean() to a oracle.jdbc.OracleType.BOOLEAN or b) call setInt instead of setBoolean. - JDBC Logging: Starting from Oracle Database 23c, diagnose-on-first-failure is ON by default. This means that it records the critical execution state in memory, and then dumps the recording on error. When you have the JDBC logging enabled, you may notice an increased number of logs because of this feature. You can disable this feature via -Doracle.jdbc.diagnostic.enableDiagnoseFirstFailure=false or using the DiagnosticMBeans interface. - ojdbcx_g.jar, ojdcxdms_g.jar, and dms.jar files are no longer required: Starting with Oracle JDBC 23c, the diagnosability is simplified and eliminates the need to switch to debug jar files. The enhanced diagnosability works with ojdbc8.jar or ojdbc11.jar in the class path for all usecases (production, debug, metrics) and it does not require any of the additional debug jars ojdbc8_g.jar, ojdbc8dms.jar, ojdbc8dms_g.jar, ojdbc11_g.jar, ojdbc11dms.jar, ojdbc11dms_g.jar, and dms.jar. Therefore, we do not ship these debug jars from 23c. - osdt_cert.jar and osdt_core.jar are not required: Starting with Oracle Database 23c, oraclepki.jar has been redesigned and no longer requires the extra osdt_core.jar and osdt_cert.jar. ======================================================================================= Deprecation or De-support notices in Oracle JDBC 23c ======================================================================================= - Deprecation of Oracle JDBC-OCI driver or Type 2 Client Driver: Most of the Java applications (99%) use Oracle JDBC Thin driver. Since, JDBC-OCI driver aka thick JDBC driver is no longer used by customers, we will be de-supporting JDBC-OCI or Type 2 client driver starting from Oracle DB 24c release. - De-support of oracle.jdbc.rowset: Starting with Oracle JDBC 23c, the oracle.jdbc.rowset package will no longer be supported (the code has been removed). ======================================================================================= References and Resources ======================================================================================= JDBC and UCP Landing Page - www.oracle.com/jdbc Changes in this release for Oracle JDBC dev guide - https://docs.oracle.com/en/database/oracle/oracle-database/23/jjdbc/changes-this-release-oracle-database-jdbc-developers-guide.html#GUID-7800B599-D924-4284-ADEC-10E468842BD0 What’s in Oracle Database 23c for Java Developers? (technical brief)- https://www.oracle.com/a/tech/docs/database/whats-in-oracledb23c-for-java-developers.pdf JDBC and UCP Downloads Page - https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html JDBC, UCP, OJVM, and Open Source Projects Timeline -https://www.oracle.com/a/tech/docs/database/jdbc-ucp-ojvm-timeline.pdf Github location for Oracle Extensions - https://github.com/oracle-samples/ojdbc-extensions Oracle R2DBC - https://github.com/oracle/oracle-r2dbc ======================================================================================= Known Problems Fixed in the Patch Release 23.6.0.24.10 ======================================================================================= Bug 36719752 - CHANGE THE DEFAULT VALUE OF RETRY_DELAY AND TRANSPORT_CONNECTION_TIMEOUT Bug 36407520 - APPLICATION CONTEXT CAN ONLY BE SET THROUGH SETCLIENTINFO AFTER CONNECTION HAS BEEN CREATED Bug 36540636 - MUST USE CHAR TYPE WHEN QUERYING COLLATION,EBCDIC AS VARCHAR2 INCOMPATIBLE WITH DB2 VARCHAR Bug 36680191 - CLOUD CREDENTIALS STORED IN WALLET Bug 36113002 - TLS SSLCONTEXT CACHE FOR PERFORMANCE AND SESSION RESUMPTION Bug 36691142 - SUPPORT FOR BINARY VECTOR Bug 36098532 - JDBC SUPPORT FOR SESSIONLESS TRANSACTIONS Bug 35596025 - TRUE_CACHE SUPPORT AC AND LOAD BALANCING BUG-36695211 - MAKE JDBC (OJDBC17) AND UCP (UCP17) COMPATIBLE WITH JAKARTA Bug 37102712 - MODE OF THE OJDBC AND UCP JARS SHOULD BE 644 NOT 640 Bug 37098502 - [SHARDING DRIVER] SINGLE SHARD TRANSACTION SUPPORT DOES NOT WORK WITH HIKARI POOL Bug 37077452 - [SHARDING DRIVER] CONNECTION LEAK WHEN USING SHARDING DRIVER WITH HIKARI POOL Bug 37046473 - UNABLE TO CONNECT TO DATABASE USING DB TOKEN GENERATED BY SERVICE PRINCIPAL Bug 37003377 - INTERMITTENT JAVA.NET.SOCKETEXCEPTION: NETWORK IS UNREACHABLE WITH ENABLED TFO Bug 36967743 - JDBC DRIVER 23.5.0.24.07 - DOUBLE PRECISION ISSUE IN JDBC DRIVER Bug 36956128 - [SHARDING DRIVER]: MEMORY LEAKS OF T4CCONNECTION Bug 36939716 - JSON DV & PERF : MEMORY LEAK IN UPDATE OPERATION ON DUALITY VIEW WITH RETURNING CLAUSE Bug 36835939 - J2EE13_COMPLIANT SHOULD BE TRUE WHEN THE DMS JAR IS IN THE CLASSPATH Bug 36784906 - BROKEN BATCHED INSERT AFTER UPGRADE FROM JDBC 21.13 TO 23.4 Bug 36744346 - TRACEEVENTLISTENER.TRACECONTEXT JAVADOC FOR GETDATABASEOPERATION METHOD IS WRONG Bug 36476584 - CLIENT CONTEXT VALUES ARE RETURNED IN WRONG ORDER Bug 36476156 - [CMAN-TDM] DISABLE LOB PREFETCH FOR JSON IS THROWING ORA-03106: FATAL TWO-TASK COMMUNICATION PROTOCOL Bug 36591486 - UCP COMMITS AT CHECK-IN. NEED A KNOB TO CONTROL THIS BEHAVIOR: ROLLBACK/COMMIT Bug 36962333 - UCP ConnectionLabelingCallback contract broken for shared pool Note: The following bug exists but, is NOT fixed in 23.6 Bug 36934985 - USING CALLABLE STATEMENTS WITH CLIENT CACHE RETURNS WRONG RESULTS. ======================================================================================= Known Problems Fixed in the Patch Release 23.5.0.24.07 ======================================================================================= Bug 36449099 - TFO LIB INSTALLER Bug 36708258 - DISABLE ANO NEGOTIATION SKIP OPTIMIZATION Bug 36692537 - INSTALLTFOLIB CANNOT GET RESOURCE FROM JAR FILE Bug 36588265 - ORA-17089 OR NULLPOINTEREXCEPTION FROM EXECUTEASYNCORACLE AND CLOSEASYNCORACLE METHODS Bug 36574135 - ADD A SERVICE PROVIDER FOR OSON Bug 36569471 - [JUNIT] ORACLEJSONPARSER CREATEJSONBINARYPARSER INTERPRETS POSITIVE NUMBERS AS NEGATIVE Bug 36550135 - SETOBJECT AND SETORACLEOBJECT DOES NOT SUPPORT ORACLE.SQL.BOOLEAN DATUM Bug 36545854 - OPEN() AND CLOSE() METHODS OF ORACLEBLOB AND ORACLECLOB SHOULD BE DEPRECATED FOR REMOVAL Bug 36538499 - HOSTNAME SHOULD BE RESOLVED REMOTELY WHEN PROXY IS CONFIGURED Bug 36520733 - DEPRIORITIZE DESCRIPTIONS WHICH ALL ADDRESSES ARE MARKED DOWN Bug 36509180 - ORA-18706 FOR JSON LARGER THAN 32MB Bug 36477926 - EASY CONNECT URL AND LOAD BALANCING Bug 36277977 - RESULT SET CACHE CONFIGURE CACHE SIZE ON THE CLIENT Bug 36401045 - ASSERTIONERROR ON RESULT.GETSTRING() WHEN QUERYING VECTOR FROM RESULTSET CACHE Bug 36367926 - BOOLEAN ARRAY ARE NOT INSERTED CORRECTLY. Bug 36010937 - ORA-01017 FROM AZURE TOKEN WITHOUT A UPN CLAIM Bug 35483714 - Out Of Memory by too much T4CStatements Bug 35001121 - VBL JSON_SERIALIZE_LONGVARBINARY AND LONGVARCHAR FAILS WITH PROTOCOL VIOLATION Bug 36086468 - ORA-01461 DURING INSERT/UPDATE WITH BIND THAT INCLUDES SPECIAL CHARACTER Bug 35863011 - UCP: Get rid of "synchronized" on pool's startup - virtual threads are pinned to kernel thread. Bug 36612980 - UCP: For connections creation failure in the background executor - no error cause gets attached Bug 36596110 - In shared-pool-config.xml, fast-connection-failover-enabled=false is not working Bug 36582076 - 23AI REGRESSION: SHARDING DRIVER(DATASOURCE) CREATES MULTIPLE INTERNAL UCP CONNECTION POOLS Bug 36516062 - Provide per-PoolDataSource connection creation modes switch Bug 36252580 - Support minimumIdle knob in UCP ======================================================================================= Known Problems Fixed in the Patch Release 23.4.0.24.05 ======================================================================================= Bug 36279736 - CONNECTION TO A PROXY USER FAILS WITH INVALID USERNAME/PASSWORD WHEN WALLET IS PROVIDED Bug 36187019 - LOB PROCESSING FAIL WHEN DB SET WITH EL8ISO8859P7 CHARACTER SET Bug 36152805 - GET CONNECTION AGAINST NORMAL PDB WITH TFO=ON SHOULD FAIL WITH ORA-18739 ======================================================================================= Known Problems Fixed in the Patch Release 23.3.0.23.09 ======================================================================================= Bug 35641252 - TEST BUG: CREATING TABLE CONTAINS XMLTYPE/BFILE FAILED WITH ORA-43853 Bug 35627364 - [OPENLDAP] NPE WHEN OPENLDAP+TLS IS USED Bug 35588441 - TEQ: INTERMITTENTLY NOT ABLE TO RECEIVE NOTIFICATION FOR NULL XMLTYPE PAYLOAD Bug 35475639 - JAVADOC: INCORRECT PREFIX FOR DIAGNOSTIC PROPERTIES IN JAVADOC IN ORACLEDRIVER.JAVA Bug 35403229 - PREPAREDSTATEMENT.GETPARAMETERMETADATA() FAILED WITH ORA-18734 Bug 35365030 - JDK11: KPRB: PARSING XML TYPE FAILED WITH ORA-31011 Bug 35360651 - DRCP: OPEN CURSORS SHOULD BE CLEANED UP AFTER IMPLICIT RELEASE Bug 34605867 - PUBLISHER.SUBSCRIBE() REPORTS NOSUCHELEMENTEXCEPTION AND TIMEOUTEXCEPTION Bug 34396647 - ADDING SUBSCRIBER TO A PUBLISHED CONNECTION OBJECT FAILS WITH ORA-01017 Bug 34124974 - AYSNC TEST RUNS FOR MORE THAN AN HOUR UNTIL 'NO SPACE LEFT ON DEVICE' WHEN LOGGING ENABLED Bug 34120266 - COMPLETABLEFUTURE.THENACCEPT() HANDS WHEN CONNECTION TO SHARED MODE DATABASE Bug 33627888 - ORACLECALLABLESTATEMENT.EXECUTEASYNCORACLE FAILING IN MULTITHREADED ENVIRONIMENT Bug 33586838 - WHEN MULTIPLE THREADS EXECUTINGRSET.PUBLISHERORACLE, INTERNALLY FORK JOIN POOL THREADS TAKING TIME TO READ DATA FROM BLOB Bug 33570676 - DEADLOCK WHEN MULTIPLE THREADS READING BFILE Bug 35043233 - JDBC-STRESS: BOOLEAN DATATYPE SUPPORT FOR SETOBJECT API Bug 34242298 - CALLING PROCEDURE CONTAINS BOOLEAN TYPE FAILS WITH ORA-01460 Bug 34877464 - 23cBETA: Oracle Sharding DB: In WebLogic, UCP XA connection are reporting "UCP-45064: All connections in the Universal Connection Pool are in use"