2
2
3
3
The Oracle R2DBC Driver is a Java library that supports reactive programming with Oracle Database.
4
4
5
- Oracle R2DBC implements the R2DBC Service Provider Interface (SPI) as specified by the Reactive Relational Database Connectivity (R2DBC) project. The R2DBC SPI exposes Reactive Streams as an abstraction for remote database operations. Reactive Streams is a well defined standard for asynchronous, non-blocking, and back-pressured communication. This standard allows an R2DBC driver to interoperate with other reactive libraries and frameworks, such as Spring, Project Reactor, RxJava, and Akka Streams.
5
+ Oracle R2DBC implements the R2DBC Service Provider Interface (SPI) as specified
6
+ by the Reactive Relational Database Connectivity (R2DBC) project. The R2DBC SPI
7
+ exposes Reactive Streams as an abstraction for remote database operations.
8
+ Reactive Streams is a well defined standard for asynchronous, non-blocking, and
9
+ back-pressured communication. This standard allows an R2DBC driver to
10
+ interoperate with other reactive libraries and frameworks, such as Spring,
11
+ Project Reactor, RxJava, and Akka Streams.
6
12
7
13
### Learn More About R2DBC:
8
14
[ R2DBC Project Home Page] ( https://r2dbc.io )
@@ -19,43 +25,27 @@ Oracle R2DBC implements the R2DBC Service Provider Interface (SPI) as specified
19
25
[ Reactive Streams Specification v1.0.3] ( https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.3/README.md )
20
26
21
27
# About This Version
22
- The 1.1 .0 release Oracle R2DBC implements version 1.0.0.RELEASE of the R2DBC SPI.
28
+ The 1.2 .0 release Oracle R2DBC implements version 1.0.0.RELEASE of the R2DBC SPI.
23
29
24
30
Fixes in this release:
25
- - [ Resolved a memory leak of java.sql.ResultSet objects] ( https://github.com/oracle/oracle-r2dbc/pull/88 )
26
- - [ Warnings are no longer emitted as onError signals] ( https://github.com/oracle/oracle-r2dbc/pull/98 )
27
- - [ The option to disable DN Matching is no longer ignored] ( https://github.com/oracle/oracle-r2dbc/pull/103 )
31
+ - [ Fixed "Operator has been terminated" message] ( https://github.com/oracle/oracle-r2dbc/pull/134 )
32
+ - [ Checking for Zero Threads in the common ForkJoinPool] ( https://github.com/oracle/oracle-r2dbc/pull/131 )
28
33
29
34
New features in this release:
30
- - [ Added an option to configure oracle.jdbc.timezoneAsRegion] ( https://github.com/oracle/oracle-r2dbc/pull/81 )
31
- - [ Added support for LDAP URLs] ( https://github.com/oracle/oracle-r2dbc/pull/99 )
32
- - [ Added support for REF CURSOR values] ( https://github.com/oracle/oracle-r2dbc/pull/94 )
33
- - [ Added support for user defined ARRAY and OBJECT types] ( https://github.com/oracle/oracle-r2dbc/pull/104 )
35
+ - [ Supporting Option Values from Supplier and Publisher] ( https://github.com/oracle/oracle-r2dbc/pull/137 )
36
+ - [ Added Options for Kerberos] ( https://github.com/oracle/oracle-r2dbc/pull/127 )
34
37
35
- ### Integration with Spring and Other Libraries
36
- Oracle R2DBC only interoperates with libraries that support the 1.0.0.RELEASE
37
- version of the R2DBC SPI. When using libraries like Spring and r2dbc-pool, be
38
- sure to use a version which supports the 1.0.0.RELEASE of the SPI.
39
-
40
- Oracle R2DBC depends on the JDK 11 build of Oracle JDBC 21.7.0.0. Other
41
- libraries may depend on a different version of Oracle JDBC which is
42
- incompatible. To resolve this incompatibility, it may be necessary to explicitly
43
- declare the dependency in your project, ie:
44
- ``` xml
45
- <dependency >
46
- <groupId >com.oracle.database.jdbc</groupId >
47
- <artifactId >ojdbc11</artifactId >
48
- <version >21.7.0.0</version >
49
- </dependency >
50
- ```
38
+ Updated dependencies:
39
+ - Updated Oracle JDBC from 21.7.0.0 to 21.11.0.0
40
+ - Updated Project Reactor from 3.5.0 to 3.5.11
51
41
52
42
## Installation
53
43
Oracle R2DBC can be obtained from Maven Central.
54
44
``` xml
55
45
<dependency >
56
46
<groupId >com.oracle.database.r2dbc</groupId >
57
47
<artifactId >oracle-r2dbc</artifactId >
58
- <version >1.0 .0</version >
48
+ <version >1.2 .0</version >
59
49
</dependency >
60
50
```
61
51
@@ -70,13 +60,30 @@ Oracle R2DBC can also be built from source using Maven:
70
60
Oracle R2DBC is compatible with JDK 11 (or newer), and has the following runtime dependencies:
71
61
- R2DBC SPI 1.0.0.RELEASE
72
62
- Reactive Streams 1.0.3
73
- - Project Reactor 3.4.18
74
- - Oracle JDBC 21.7 .0.0 for JDK 11 (ojdbc11.jar)
63
+ - Project Reactor 3.5.11
64
+ - Oracle JDBC 21.11 .0.0 for JDK 11 (ojdbc11.jar)
75
65
- Oracle R2DBC relies on the Oracle JDBC Driver's [ Reactive Extensions
76
66
] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jjdbc/jdbc-reactive-extensions.html#GUID-1C40C43B-3823-4848-8B5A-D2F97A82F79B ) APIs.
77
67
78
68
The Oracle R2DBC Driver has been verified with Oracle Database versions 18, 19,
79
- and 21.
69
+ 21, and 23.
70
+
71
+ ### Integration with Spring and Other Libraries
72
+ Oracle R2DBC can only interoperate with libraries that support the 1.0.0.RELEASE
73
+ version of the R2DBC SPI. When using libraries like Spring and r2dbc-pool, be
74
+ sure to use a version which supports the 1.0.0.RELEASE of the SPI.
75
+
76
+ Oracle R2DBC depends on the JDK 11 build of Oracle JDBC 21.11.0.0. Other
77
+ libraries may depend on a different version of Oracle JDBC, and this version may
78
+ be incompatible. To resolve incompatibilities, it may be necessary to explicitly
79
+ declare the dependency in your project, ie:
80
+ ``` xml
81
+ <dependency >
82
+ <groupId >com.oracle.database.jdbc</groupId >
83
+ <artifactId >ojdbc11</artifactId >
84
+ <version >21.11.0.0</version >
85
+ </dependency >
86
+ ```
80
87
81
88
## Code Examples
82
89
@@ -102,7 +109,9 @@ The following method returns an Oracle R2DBC `ConnectionFactory`
102
109
}
103
110
```
104
111
105
- The following method uses Project Reactor's [ Flux] ( https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html ) to open a connection, execute a SQL query, and then close the connection:
112
+ The following method uses Project Reactor's
113
+ [ Flux] ( https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html )
114
+ to open a connection, execute a SQL query, and then close the connection:
106
115
``` java
107
116
Flux . usingWhen(
108
117
getConnectionFactory(). create(),
@@ -181,8 +190,10 @@ the Reactive Streams 1.0.3 [Specification](https://github.com/reactive-streams/r
181
190
and [ Javadoc] ( http://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/org/reactivestreams/package-summary.html )
182
191
183
192
The R2DBC and Reactive Streams specifications include requirements that are
184
- optional for a compliant implementation. The remainder of this document specifies
185
- the Oracle R2DBC Driver's implementation of these optional requirements.
193
+ optional for a compliant implementation. Oracle R2DBC's implementation of these
194
+ optional are specified in this document. This document also specifies additional
195
+ functionality that is supported by Oracle R2DBC, but is not part of the R2DBC
196
+ 1.0.0 Specification.
186
197
187
198
### Connection Creation
188
199
The Oracle R2DBC Driver is identified by the name "oracle". The driver
@@ -372,8 +383,10 @@ The same property can also be configured programmatically:
372
383
.option(OracleR2dbcOptions . TLS_WALLET_LOCATION , " /path/to/wallet" )
373
384
```
374
385
375
- The following is a list of all Oracle JDBC connection properties that are
376
- supported by Oracle R2DBC:
386
+ The next sections list Oracle JDBC connection properties which are supported by
387
+ Oracle R2DBC.
388
+
389
+ ##### TLS/SSL Connection Properties
377
390
- [ oracle.net.tns_admin] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_TNS_ADMIN )
378
391
- [ oracle.net.wallet_location] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_WALLET_LOCATION )
379
392
- [ oracle.net.wallet_password] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_WALLET_PASSWORD )
@@ -392,6 +405,8 @@ supported by Oracle R2DBC:
392
405
- [ ssl.keyManagerFactory.algorithm] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_THIN_SSL_KEYMANAGERFACTORY_ALGORITHM )
393
406
- [ ssl.trustManagerFactory.algorithm] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_THIN_SSL_TRUSTMANAGERFACTORY_ALGORITHM )
394
407
- [ oracle.net.ssl_context_protocol] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_SSL_CONTEXT_PROTOCOL )
408
+
409
+ ##### Miscellaneous Connection Properties
395
410
- [ oracle.jdbc.fanEnabled] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_FAN_ENABLED )
396
411
- [ oracle.jdbc.implicitStatementCacheSize] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE )
397
412
- [ oracle.jdbc.defaultLobPrefetchSize] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html?is-external=true#CONNECTION_PROPERTY_DEFAULT_LOB_PREFETCH_SIZE )
@@ -401,20 +416,50 @@ supported by Oracle R2DBC:
401
416
- Cached query results can cause phantom reads even if the serializable
402
417
transaction isolation level is set. Set this to "false" if using the
403
418
serializable isolation level.
419
+ - [ oracle.jdbc.timeZoneAsRegion] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_TIMEZONE_AS_REGION )
420
+ - Setting this option to "false" may resolve "ORA-01882: timezone region not
421
+ found". The ORA-01882 error happens when Oracle Database doesn't recognize
422
+ the name returned by ` java.util.TimeZone.getDefault().getId() ` .
423
+
424
+ ##### Database Tracing Connection Properties
404
425
- [ v$session.terminal] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_VSESSION_TERMINAL )
405
426
- [ v$session.machine] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_VSESSION_MACHINE )
406
427
- [ v$session.osuser] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_VSESSION_OSUSER )
407
428
- [ v$session.program] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_VSESSION_PROGRAM )
408
429
- [ v$session.process] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_VSESSION_PROCESS )
409
- - [ oracle.jdbc.timeZoneAsRegion] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_TIMEZONE_AS_REGION )
410
- - Setting this option to "false" may resolve "ORA-01882: timezone region not
411
- found". The ORA-01882 error happens when Oracle Database doesn't recognize
412
- the name returned by ` java.util.TimeZone.getDefault().getId() ` .
430
+
431
+ ##### Oracle Net Encryption Connection Properties
413
432
- [ oracle.net.encryption_client] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL )
414
433
- [ oracle.net.encryption_types_client] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES )
415
434
- [ oracle.net.crypto_checksum_client] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_CHECKSUM_LEVEL )
416
435
- [ oracle.net.crypto_checksum_types_client] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_CHECKSUM_TYPES )
417
436
437
+ ##### Kerberos Connection Properties
438
+ - [ oracle.net.kerberos5_cc_name] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB5_CC_NAME )
439
+ - [ oracle.net.kerberos5_mutual_authentication] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB5_MUTUAL )
440
+ - [ oracle.net.KerberosRealm] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB_REALM )
441
+ - [ oracle.net.KerberosJaasLoginModule] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_NET_AUTHENTICATION_KRB_JAAS_LOGIN_MODULE )
442
+
443
+ ##### LDAP Connection Properties
444
+ - [ oracle.net.ldap.security.authentication] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SECURITY_AUTHENTICATION )
445
+ - [ oracle.net.ldap.security.principal] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SECURITY_PRINCIPAL )
446
+ - [ oracle.net.ldap.security.credentials] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SECURITY_CREDENTIALS )
447
+ - [ com.sun.jndi.ldap.connect.timeout] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_JNDI_LDAP_CONNECT_TIMEOUT )
448
+ - [ com.sun.jndi.ldap.read.timeout] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_JNDI_LDAP_READ_TIMEOUT )
449
+ - [ oracle.net.ldap.ssl.walletLocation] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_WALLET_LOCATION )
450
+ - [ oracle.net.ldap.ssl.walletPassword] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_WALLET_PASSWORD )
451
+ - [ oracle.net.ldap.ssl.keyStoreType] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_KEYSTORE_TYPE )
452
+ - [ oracle.net.ldap.ssl.keyStore] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_KEYSTORE )
453
+ - [ oracle.net.ldap.ssl.keyStorePassword] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_KEYSTORE_PASSWORD )
454
+ - [ oracle.net.ldap.ssl.trustStoreType] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_TRUSTSTORE_TYPE )
455
+ - [ oracle.net.ldap.ssl.trustStore] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_TRUSTSTORE )
456
+ - [ oracle.net.ldap.ssl.trustStorePassword] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_TRUSTSTORE_PASSWORD )
457
+ - [ oracle.net.ldap.ssl.supportedCiphers] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_CIPHER_SUITES )
458
+ - [ oracle.net.ldap.ssl.supportedVersions] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_VERSIONS )
459
+ - [ oracle.net.ldap.ssl.keyManagerFactory.algorithm] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_KEYMANAGER_FACTORY_ALGORITHM )
460
+ - [ oracle.net.ldap.ssl.trustManagerFactory.algorithm] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_TRUSTMANAGER_FACTORY_ALGORITHM )
461
+ - [ oracle.net.ldap.ssl.ssl_context_protocol] ( https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_LDAP_SSL_CONTEXT_PROTOCOL )
462
+
418
463
### Thread Safety and Parallel Execution
419
464
Oracle R2DBC's ` ConnectionFactory ` and ` ConnectionFactoryProvider ` are the only
420
465
classes that have a thread safe implementation. All other classes implemented
0 commit comments