Skip to content

Commit c2cc711

Browse files
committed
SqlConnectOptions do extend NetClientOptions which eventually leads to use a TCP client per socket forcing to keep a map of clients in the connection factory. We should avoiding this design and instead move the relevant bits of NetClientOptions to SqlConnectOptions like the new ClientSSLOptions.
After this, SqlConnectOptions does not extend NetClientOptions anymore and we can use a single TCP client in the connection factory which makes this easier to use. Thanks to the new TCP ConnectOptions the connection factory can specify the ClientSSLOptions when upgrading the connection to SSL. We will provide another way to specify NetClientOptions for a pool as this can still be useful for other reasons.
1 parent 952ee57 commit c2cc711

File tree

36 files changed

+389
-903
lines changed

36 files changed

+389
-903
lines changed

vertx-db2-client/src/main/generated/io/vertx/db2client/DB2ConnectOptionsConverter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public class DB2ConnectOptionsConverter {
2020
public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, DB2ConnectOptions obj) {
2121
for (java.util.Map.Entry<String, Object> member : json) {
2222
switch (member.getKey()) {
23+
case "ssl":
24+
if (member.getValue() instanceof Boolean) {
25+
obj.setSsl((Boolean)member.getValue());
26+
}
27+
break;
2328
case "pipeliningLimit":
2429
break;
2530
}
@@ -31,6 +36,7 @@ public static void toJson(DB2ConnectOptions obj, JsonObject json) {
3136
}
3237

3338
public static void toJson(DB2ConnectOptions obj, java.util.Map<String, Object> json) {
39+
json.put("ssl", obj.isSsl());
3440
json.put("pipeliningLimit", obj.getPipeliningLimit());
3541
}
3642
}

vertx-db2-client/src/main/java/examples/DB2ClientExamples.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import io.vertx.core.Future;
2323
import io.vertx.core.Vertx;
24+
import io.vertx.core.net.ClientSSLOptions;
2425
import io.vertx.core.net.JksOptions;
2526
import io.vertx.db2client.DB2ConnectOptions;
2627
import io.vertx.db2client.DB2Connection;
@@ -258,9 +259,9 @@ public void connectSsl(Vertx vertx) {
258259
.setUser("user")
259260
.setPassword("secret")
260261
.setSsl(true)
261-
.setTrustStoreOptions(new JksOptions()
262-
.setPath("/path/to/keystore.p12")
263-
.setPassword("keystoreSecret"));
262+
.setSslOptions(new ClientSSLOptions().setTrustOptions(new JksOptions()
263+
.setPath("/path/to/keystore.p12")
264+
.setPassword("keystoreSecret")));
264265

265266
DB2Connection.connect(vertx, options)
266267
.onComplete(res -> {
@@ -396,5 +397,4 @@ public void enumIntValues(SqlClient client) {
396397
}
397398
});
398399
}
399-
400400
}

vertx-db2-client/src/main/java/io/vertx/db2client/DB2ConnectOptions.java

Lines changed: 25 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,7 @@
2525
import io.vertx.codegen.annotations.DataObject;
2626
import io.vertx.codegen.annotations.GenIgnore;
2727
import io.vertx.core.json.JsonObject;
28-
import io.vertx.core.net.ClientOptionsBase;
29-
import io.vertx.core.net.JdkSSLEngineOptions;
30-
import io.vertx.core.net.JksOptions;
31-
import io.vertx.core.net.KeyCertOptions;
32-
import io.vertx.core.net.NetClientOptions;
33-
import io.vertx.core.net.OpenSSLEngineOptions;
34-
import io.vertx.core.net.PemKeyCertOptions;
35-
import io.vertx.core.net.PemTrustOptions;
36-
import io.vertx.core.net.SSLEngineOptions;
37-
import io.vertx.core.net.TrustOptions;
28+
import io.vertx.core.net.*;
3829
import io.vertx.core.tracing.TracingPolicy;
3930
import io.vertx.db2client.impl.DB2ConnectionUriParser;
4031
import io.vertx.db2client.impl.drda.SQLState;
@@ -77,13 +68,15 @@ public static DB2ConnectOptions fromUri(String connectionUri) throws IllegalArgu
7768
public static final boolean DEFAULT_USE_AFFECTED_ROWS = false;
7869
public static final int DEFAULT_PIPELINING_LIMIT = 1; // 256; // TODO default to 256 once implemented properly
7970
public static final Map<String, String> DEFAULT_CONNECTION_ATTRIBUTES;
71+
public static final boolean DEFAULT_SSL = false;
8072

8173
static {
8274
Map<String, String> defaultAttributes = new HashMap<>();
8375
defaultAttributes.put("_client_name", "vertx-db2-client");
8476
DEFAULT_CONNECTION_ATTRIBUTES = Collections.unmodifiableMap(defaultAttributes);
8577
}
8678

79+
private boolean ssl = DEFAULT_SSL;
8780
private int pipeliningLimit = DEFAULT_PIPELINING_LIMIT;
8881

8982
public DB2ConnectOptions() {
@@ -100,12 +93,14 @@ public DB2ConnectOptions(SqlConnectOptions other) {
10093
if (other instanceof DB2ConnectOptions) {
10194
DB2ConnectOptions opts = (DB2ConnectOptions) other;
10295
this.pipeliningLimit = opts.pipeliningLimit;
96+
this.ssl = opts.ssl;
10397
}
10498
}
10599

106100
public DB2ConnectOptions(DB2ConnectOptions other) {
107101
super(other);
108102
this.pipeliningLimit = other.pipeliningLimit;
103+
this.ssl = other.ssl;
109104
}
110105

111106
@Override
@@ -169,69 +164,23 @@ public DB2ConnectOptions setPreparedStatementCacheSqlLimit(int preparedStatement
169164
return (DB2ConnectOptions) super.setPreparedStatementCacheSqlLimit(preparedStatementCacheSqlLimit);
170165
}
171166

172-
@Override
173-
public DB2ConnectOptions setSsl(boolean ssl) {
174-
return (DB2ConnectOptions) super.setSsl(ssl);
175-
}
176-
177-
@Override
178-
public DB2ConnectOptions setSslHandshakeTimeout(long sslHandshakeTimeout) {
179-
return (DB2ConnectOptions) super.setSslHandshakeTimeout(sslHandshakeTimeout);
180-
}
181-
182-
@Override
183-
public DB2ConnectOptions setSslHandshakeTimeoutUnit(TimeUnit sslHandshakeTimeoutUnit) {
184-
return (DB2ConnectOptions) super.setSslHandshakeTimeoutUnit(sslHandshakeTimeoutUnit);
185-
}
186-
187-
@Override
188-
public DB2ConnectOptions setSslEngineOptions(SSLEngineOptions sslEngineOptions) {
189-
return (DB2ConnectOptions) super.setSslEngineOptions(sslEngineOptions);
190-
}
191-
192-
@Override
193-
public DB2ConnectOptions setJdkSslEngineOptions(JdkSSLEngineOptions sslEngineOptions) {
194-
return (DB2ConnectOptions) super.setJdkSslEngineOptions(sslEngineOptions);
195-
}
196-
197-
@Override
198-
public DB2ConnectOptions setKeyCertOptions(KeyCertOptions options) {
199-
return (DB2ConnectOptions) super.setKeyCertOptions(options);
200-
}
201-
202-
@Override
203-
public DB2ConnectOptions setKeyStoreOptions(JksOptions options) {
204-
return (DB2ConnectOptions) super.setKeyStoreOptions(options);
205-
}
206-
207-
@Override
208-
public DB2ConnectOptions setOpenSslEngineOptions(OpenSSLEngineOptions sslEngineOptions) {
209-
return (DB2ConnectOptions) super.setOpenSslEngineOptions(sslEngineOptions);
210-
}
211-
212-
@Override
213-
public DB2ConnectOptions setPemKeyCertOptions(PemKeyCertOptions options) {
214-
return (DB2ConnectOptions) super.setPemKeyCertOptions(options);
215-
}
216-
217-
@Override
218-
public DB2ConnectOptions setPemTrustOptions(PemTrustOptions options) {
219-
return (DB2ConnectOptions) super.setPemTrustOptions(options);
220-
}
221-
222-
@Override
223-
public DB2ConnectOptions setTrustAll(boolean trustAll) {
224-
return (DB2ConnectOptions) super.setTrustAll(trustAll);
225-
}
226-
227-
@Override
228-
public DB2ConnectOptions setTrustOptions(TrustOptions options) {
229-
return (DB2ConnectOptions) super.setTrustOptions(options);
167+
/**
168+
*
169+
* @return is SSL/TLS enabled?
170+
*/
171+
public boolean isSsl() {
172+
return ssl;
230173
}
231174

232-
@Override
233-
public DB2ConnectOptions setTrustStoreOptions(JksOptions options) {
234-
return (DB2ConnectOptions) super.setTrustStoreOptions(options);
175+
/**
176+
* Set whether SSL/TLS is enabled
177+
*
178+
* @param ssl true if enabled
179+
* @return a reference to this, so the API can be used fluently
180+
*/
181+
public DB2ConnectOptions setSsl(boolean ssl) {
182+
this.ssl = ssl;
183+
return this;
235184
}
236185

237186
public int getPipeliningLimit() {
@@ -271,6 +220,11 @@ public DB2ConnectOptions addProperty(String key, String value) {
271220
return (DB2ConnectOptions) super.addProperty(key, value);
272221
}
273222

223+
@Override
224+
public DB2ConnectOptions setSslOptions(ClientSSLOptions sslOptions) {
225+
return (DB2ConnectOptions) super.setSslOptions(sslOptions);
226+
}
227+
274228
/**
275229
* Initialize with the default options.
276230
*/

vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2ConnectionFactory.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,9 @@ protected Future<Connection> doConnectInternal(DB2ConnectOptions options, Contex
5050
String database = options.getDatabase();
5151
Map<String, String> properties = options.getProperties();
5252
int pipeliningLimit = options.getPipeliningLimit();
53-
NetClient netClient = netClient(options);
54-
return netClient.connect(server).flatMap(so -> {
53+
return client.connect(server).flatMap(so -> {
5554
VertxMetrics vertxMetrics = vertx.metricsSPI();
56-
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
55+
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", tcpOptions.getMetricsName()) : null;
5756
DB2SocketConnection conn = new DB2SocketConnection((NetSocketInternal) so, metrics, options, cachePreparedStatements,
5857
preparedStatementCacheSize, preparedStatementCacheSqlFilter, pipeliningLimit, context);
5958
conn.init();

vertx-db2-client/src/test/java/io/vertx/db2client/junit/DB2Resource.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.vertx.db2client.junit;
1717

18+
import io.vertx.core.net.ClientSSLOptions;
1819
import io.vertx.core.net.JksOptions;
1920
import io.vertx.db2client.DB2ConnectOptions;
2021
import org.junit.rules.ExternalResource;
@@ -101,9 +102,9 @@ public DB2ConnectOptions secureOptions() {
101102
return new DB2ConnectOptions(options())
102103
.setPort(securePort)
103104
.setSsl(true)
104-
.setTrustStoreOptions(new JksOptions()
105-
.setPath("src/test/resources/tls/db2-keystore.p12")
106-
.setPassword("db2test"));
105+
.setSslOptions(new ClientSSLOptions().setTrustOptions(new JksOptions()
106+
.setPath("src/test/resources/tls/db2-keystore.p12")
107+
.setPassword("db2test")));
107108
}
108109

109110
public boolean isZOS() {

vertx-mssql-client/src/main/generated/io/vertx/mssqlclient/MSSQLConnectOptionsConverter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json,
2525
obj.setPacketSize(((Number)member.getValue()).intValue());
2626
}
2727
break;
28+
case "ssl":
29+
if (member.getValue() instanceof Boolean) {
30+
obj.setSsl((Boolean)member.getValue());
31+
}
32+
break;
2833
}
2934
}
3035
}
@@ -35,5 +40,6 @@ public static void toJson(MSSQLConnectOptions obj, JsonObject json) {
3540

3641
public static void toJson(MSSQLConnectOptions obj, java.util.Map<String, Object> json) {
3742
json.put("packetSize", obj.getPacketSize());
43+
json.put("ssl", obj.isSsl());
3844
}
3945
}

vertx-mssql-client/src/main/java/examples/MSSQLClientExamples.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
package examples;
1313

1414
import io.vertx.core.Vertx;
15+
import io.vertx.core.net.ClientSSLOptions;
1516
import io.vertx.core.net.PemTrustOptions;
1617
import io.vertx.docgen.Source;
1718
import io.vertx.mssqlclient.MSSQLConnectOptions;
@@ -307,13 +308,13 @@ public void setSsl() {
307308
public void disableHostnameValidation() {
308309
MSSQLConnectOptions connectOptions = new MSSQLConnectOptions()
309310
.setSsl(true)
310-
.setTrustAll(true);
311+
.setSslOptions(new ClientSSLOptions().setTrustAll(true));
311312
}
312313

313314
public void usingTrustOptions() {
314315
MSSQLConnectOptions connectOptions = new MSSQLConnectOptions()
315316
.setSsl(true)
316-
.setPemTrustOptions(new PemTrustOptions().addCertPath("/path/to/server-cert.pem"));
317+
.setSslOptions(new ClientSSLOptions().setTrustOptions(new PemTrustOptions().addCertPath("/path/to/server-cert.pem")));
317318
}
318319

319320
public void infoHandler(MSSQLConnection connection) {

0 commit comments

Comments
 (0)