Skip to content

Commit b0b97bc

Browse files
authored
Configure Oracle client from URI (#1075)
* Fixes on OracleConnectOptions Missing copy constructor Broken JsonObject constructor Removed duplicated options Signed-off-by: Thomas Segismont <tsegismont@gmail.com> * Add OracleConnectionUriParser Parses Oracle thin client URIs for now. 'jdbc:' prefix omitted to avoid confusions. Signed-off-by: Thomas Segismont <tsegismont@gmail.com> * Add method to create OracleConnectOptions from uri Signed-off-by: Thomas Segismont <tsegismont@gmail.com> * Add methods to create OraclePool from uri Signed-off-by: Thomas Segismont <tsegismont@gmail.com> * Document pool setup with connection uri Signed-off-by: Thomas Segismont <tsegismont@gmail.com>
1 parent 4c7b355 commit b0b97bc

File tree

7 files changed

+394
-61
lines changed

7 files changed

+394
-61
lines changed

vertx-oracle-client/src/main/asciidoc/index.adoc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,22 @@ There are several alternatives for you to configure the client.
8686

8787
=== Data Object
8888

89-
A simple way to configure the client is to specify a `OracleConnectOptions` data object.
89+
A simple way to configure the client is to specify a {@link io.vertx.oracleclient.OracleConnectOptions} data object.
9090

9191
[source,$lang]
9292
----
9393
{@link examples.OracleClientExamples#configureFromDataObject(io.vertx.core.Vertx)}
9494
----
9595

96+
=== Connection URI
97+
98+
Apart from configuring with a {@link io.vertx.oracleclient.OracleConnectOptions} data object, ww also provide you with an alternative way to connect when you want to configure with a connection URI:
99+
100+
[source,$lang]
101+
----
102+
{@link examples.OracleClientExamples#configureFromUri(io.vertx.core.Vertx)}
103+
----
104+
96105
== Connect retries
97106

98107
You can configure the client to retry when a connection fails to be established.

vertx-oracle-client/src/main/java/examples/OracleClientExamples.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2011-2019 Contributors to the Eclipse Foundation
2+
* Copyright (c) 2011-2021 Contributors to the Eclipse Foundation
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License 2.0 which is available at
@@ -17,13 +17,7 @@
1717
import io.vertx.docgen.Source;
1818
import io.vertx.oracleclient.OracleConnectOptions;
1919
import io.vertx.oracleclient.OraclePool;
20-
import io.vertx.sqlclient.Pool;
21-
import io.vertx.sqlclient.PoolOptions;
22-
import io.vertx.sqlclient.Row;
23-
import io.vertx.sqlclient.RowSet;
24-
import io.vertx.sqlclient.SqlClient;
25-
import io.vertx.sqlclient.SqlResult;
26-
import io.vertx.sqlclient.Tuple;
20+
import io.vertx.sqlclient.*;
2721
import io.vertx.sqlclient.data.Numeric;
2822

2923
import java.math.BigDecimal;
@@ -33,7 +27,9 @@
3327
import java.util.stream.Collectors;
3428

3529
@Source
30+
@SuppressWarnings("unused")
3631
public class OracleClientExamples {
32+
3733
public void gettingStarted() {
3834

3935
// Connect options
@@ -88,6 +84,18 @@ public void configureFromDataObject(Vertx vertx) {
8884
});
8985
}
9086

87+
public void configureFromUri(Vertx vertx) {
88+
89+
// Connection URI
90+
String connectionUri = "oracle:thin:scott/tiger@myhost:1521:orcl";
91+
92+
// Pool Options
93+
PoolOptions poolOptions = new PoolOptions().setMaxSize(5);
94+
95+
// Create the pool from the connection URI
96+
OraclePool pool = OraclePool.pool(connectionUri, poolOptions);
97+
}
98+
9199
public void connecting01() {
92100

93101
// Connect options

vertx-oracle-client/src/main/java/io/vertx/oracleclient/OracleConnectOptions.java

Lines changed: 119 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -11,58 +11,51 @@
1111
package io.vertx.oracleclient;
1212

1313
import io.vertx.codegen.annotations.DataObject;
14-
import io.vertx.core.json.JsonArray;
1514
import io.vertx.core.json.JsonObject;
15+
import io.vertx.core.net.SocketAddress;
1616
import io.vertx.core.tracing.TracingPolicy;
17+
import io.vertx.oracleclient.impl.OracleConnectionUriParser;
1718
import io.vertx.sqlclient.SqlConnectOptions;
1819

20+
import java.util.Map;
21+
import java.util.function.Predicate;
22+
1923
@DataObject(generateConverter = true)
2024
public class OracleConnectOptions extends SqlConnectOptions {
2125

2226
// Support TNS_ADMIN (tnsnames.ora, ojdbc.properties).
2327
private String tnsAdmin;
2428

25-
private int connectTimeout;
26-
private int idleTimeout;
27-
28-
29-
private TracingPolicy tracingPolicy;
30-
31-
public OracleConnectOptions(JsonObject toJson) {
32-
super(toJson);
33-
// TODO Copy
34-
}
35-
3629
public OracleConnectOptions() {
30+
}
3731

32+
public OracleConnectOptions(OracleConnectOptions other) {
33+
super(other);
34+
this.tnsAdmin = other.tnsAdmin;
3835
}
3936

4037
public OracleConnectOptions(SqlConnectOptions options) {
4138
super(options);
42-
// TODO Copy
4339
}
4440

45-
// TODO...
46-
47-
/**
48-
* @return the tracing policy
49-
*/
50-
public TracingPolicy getTracingPolicy() {
51-
return tracingPolicy;
41+
public OracleConnectOptions(JsonObject json) {
42+
super(json);
43+
OracleConnectOptionsConverter.fromJson(json, this);
5244
}
5345

5446
/**
55-
* Set the tracing policy for the client behavior when Vert.x has tracing enabled.
47+
* Provide a {@link OracleConnectOptions} configured from a connection URI.
5648
*
57-
* @param tracingPolicy the tracing policy
58-
* @return a reference to this, so the API can be used fluently
49+
* @param connectionUri the connection URI to configure from
50+
* @return a {@link OracleConnectOptions} parsed from the connection URI
51+
* @throws IllegalArgumentException when the {@code connectionUri} is in an invalid format
5952
*/
60-
public OracleConnectOptions setTracingPolicy(TracingPolicy tracingPolicy) {
61-
this.tracingPolicy = tracingPolicy;
62-
return this;
53+
public static OracleConnectOptions fromUri(String connectionUri) throws IllegalArgumentException {
54+
JsonObject parsedConfiguration = OracleConnectionUriParser.parse(connectionUri);
55+
return new OracleConnectOptions(parsedConfiguration);
6356
}
6457

65-
// Oracle specifics
58+
// Oracle-specific options
6659

6760
public String getTnsAdmin() {
6861
return tnsAdmin;
@@ -73,51 +66,127 @@ public OracleConnectOptions setTnsAdmin(String tnsAdmin) {
7366
return this;
7467
}
7568

69+
// Non-specific options
70+
7671
@Override
77-
public OracleConnectOptions setPort(int port) {
78-
super.setPort(port);
79-
return this;
72+
public String getHost() {
73+
return super.getHost();
8074
}
8175

8276
@Override
8377
public OracleConnectOptions setHost(String host) {
84-
super.setHost(host);
85-
return this;
78+
return (OracleConnectOptions) super.setHost(host);
8679
}
8780

8881
@Override
89-
public OracleConnectOptions setDatabase(String db) {
90-
super.setDatabase(db);
91-
return this;
82+
public int getPort() {
83+
return super.getPort();
84+
}
85+
86+
@Override
87+
public OracleConnectOptions setPort(int port) {
88+
return (OracleConnectOptions) super.setPort(port);
89+
}
90+
91+
@Override
92+
public String getUser() {
93+
return super.getUser();
9294
}
9395

9496
@Override
9597
public OracleConnectOptions setUser(String user) {
96-
super.setUser(user);
97-
return this;
98+
return (OracleConnectOptions) super.setUser(user);
9899
}
99100

100101
@Override
101-
public OracleConnectOptions setPassword(String pwd) {
102-
super.setPassword(pwd);
103-
return this;
102+
public String getPassword() {
103+
return super.getPassword();
104+
}
105+
106+
@Override
107+
public OracleConnectOptions setPassword(String password) {
108+
return (OracleConnectOptions) super.setPassword(password);
104109
}
105110

106-
public int getConnectTimeout() {
107-
return connectTimeout;
111+
@Override
112+
public String getDatabase() {
113+
return super.getDatabase();
108114
}
109115

110-
public OracleConnectOptions setConnectTimeout(int connectTimeout) {
111-
this.connectTimeout = connectTimeout;
112-
return this;
116+
@Override
117+
public OracleConnectOptions setDatabase(String database) {
118+
return (OracleConnectOptions) super.setDatabase(database);
113119
}
114120

115-
public int getIdleTimeout() {
116-
return idleTimeout;
121+
@Override
122+
public boolean getCachePreparedStatements() {
123+
return super.getCachePreparedStatements();
117124
}
118125

119-
public OracleConnectOptions setIdleTimeout(int idleTimeout) {
120-
this.idleTimeout = idleTimeout;
121-
return this;
126+
@Override
127+
public OracleConnectOptions setCachePreparedStatements(boolean cachePreparedStatements) {
128+
return (OracleConnectOptions) super.setCachePreparedStatements(cachePreparedStatements);
129+
}
130+
131+
@Override
132+
public int getPreparedStatementCacheMaxSize() {
133+
return super.getPreparedStatementCacheMaxSize();
134+
}
135+
136+
@Override
137+
public OracleConnectOptions setPreparedStatementCacheMaxSize(int preparedStatementCacheMaxSize) {
138+
return (OracleConnectOptions) super.setPreparedStatementCacheMaxSize(preparedStatementCacheMaxSize);
139+
}
140+
141+
@Override
142+
public Predicate<String> getPreparedStatementCacheSqlFilter() {
143+
return super.getPreparedStatementCacheSqlFilter();
144+
}
145+
146+
@Override
147+
public OracleConnectOptions setPreparedStatementCacheSqlFilter(Predicate<String> predicate) {
148+
return (OracleConnectOptions) super.setPreparedStatementCacheSqlFilter(predicate);
149+
}
150+
151+
@Override
152+
public OracleConnectOptions setPreparedStatementCacheSqlLimit(int preparedStatementCacheSqlLimit) {
153+
return (OracleConnectOptions) super.setPreparedStatementCacheSqlLimit(preparedStatementCacheSqlLimit);
154+
}
155+
156+
@Override
157+
public Map<String, String> getProperties() {
158+
return super.getProperties();
159+
}
160+
161+
@Override
162+
public OracleConnectOptions setProperties(Map<String, String> properties) {
163+
return (OracleConnectOptions) super.setProperties(properties);
164+
}
165+
166+
@Override
167+
public OracleConnectOptions addProperty(String key, String value) {
168+
return (OracleConnectOptions) super.addProperty(key, value);
169+
}
170+
171+
@Override
172+
public SocketAddress getSocketAddress() {
173+
return super.getSocketAddress();
174+
}
175+
176+
@Override
177+
public TracingPolicy getTracingPolicy() {
178+
return super.getTracingPolicy();
179+
}
180+
181+
@Override
182+
public OracleConnectOptions setTracingPolicy(TracingPolicy tracingPolicy) {
183+
return (OracleConnectOptions) super.setTracingPolicy(tracingPolicy);
184+
}
185+
186+
@Override
187+
public JsonObject toJson() {
188+
JsonObject json = super.toJson();
189+
OracleConnectOptionsConverter.toJson(this, json);
190+
return json;
122191
}
123192
}

vertx-oracle-client/src/main/java/io/vertx/oracleclient/OraclePool.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public interface OraclePool extends Pool {
3838
*/
3939
PropertyKind<Boolean> OUTPUT = PropertyKind.create("callable-statement-output", Boolean.class);
4040

41-
4241
static OraclePool pool(OracleConnectOptions connectOptions, PoolOptions poolOptions) {
4342
if (Vertx.currentContext() != null) {
4443
throw new IllegalStateException(
@@ -60,6 +59,17 @@ static OraclePool pool(Vertx vertx, OracleConnectOptions connectOptions, PoolOpt
6059
return OraclePoolImpl.create((VertxInternal) vertx, false, connectOptions, poolOptions, tracer);
6160
}
6261

63-
// TODO No option version
62+
/**
63+
* Like {@link #pool(OracleConnectOptions, PoolOptions)} but connection options are created from the provided {@code connectionUri}.
64+
*/
65+
static OraclePool pool(String connectionUri, PoolOptions poolOptions) {
66+
return pool(OracleConnectOptions.fromUri(connectionUri), poolOptions);
67+
}
6468

69+
/**
70+
* Like {@link #pool(String, PoolOptions)} with a specific {@link Vertx} instance.
71+
*/
72+
static OraclePool pool(Vertx vertx, String connectionUri, PoolOptions poolOptions) {
73+
return pool(vertx, OracleConnectOptions.fromUri(connectionUri), poolOptions);
74+
}
6575
}

0 commit comments

Comments
 (0)