Skip to content

Commit 03fb7e8

Browse files
authored
Dynamic connection provider documentation (#1292)
Closes #1291 Signed-off-by: Thomas Segismont <tsegismont@gmail.com>
1 parent f6410ff commit 03fb7e8

File tree

7 files changed

+138
-66
lines changed

7 files changed

+138
-66
lines changed

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

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,24 @@
1515
*/
1616
package examples;
1717

18-
import java.util.ArrayList;
19-
import java.util.Arrays;
20-
import java.util.List;
21-
2218
import io.vertx.core.AbstractVerticle;
2319
import io.vertx.core.DeploymentOptions;
20+
import io.vertx.core.Future;
2421
import io.vertx.core.Vertx;
2522
import io.vertx.core.tracing.TracingPolicy;
2623
import io.vertx.db2client.DB2ConnectOptions;
2724
import io.vertx.db2client.DB2Pool;
25+
import io.vertx.db2client.spi.DB2Driver;
2826
import io.vertx.docgen.Source;
29-
import io.vertx.sqlclient.Cursor;
30-
import io.vertx.sqlclient.Pool;
31-
import io.vertx.sqlclient.PoolOptions;
32-
import io.vertx.sqlclient.PreparedStatement;
33-
import io.vertx.sqlclient.Row;
34-
import io.vertx.sqlclient.RowSet;
35-
import io.vertx.sqlclient.RowStream;
36-
import io.vertx.sqlclient.SqlClient;
37-
import io.vertx.sqlclient.SqlConnectOptions;
38-
import io.vertx.sqlclient.SqlConnection;
39-
import io.vertx.sqlclient.Transaction;
40-
import io.vertx.sqlclient.Tuple;
27+
import io.vertx.sqlclient.*;
28+
import io.vertx.sqlclient.spi.ConnectionFactory;
29+
30+
import java.util.ArrayList;
31+
import java.util.Arrays;
32+
import java.util.List;
4133

4234
@Source
35+
@SuppressWarnings("unused")
4336
public class SqlClientExamples {
4437

4538
public void queries01(SqlClient client) {
@@ -413,4 +406,19 @@ public static void poolSharing3(Vertx vertx, DB2ConnectOptions database, int max
413406
.setName("my-pool")
414407
.setEventLoopSize(4));
415408
}
409+
410+
public void dynamicPoolConfig(Vertx vertx, DB2Pool pool) {
411+
pool.connectionProvider(ctx -> {
412+
Future<DB2ConnectOptions> fut = retrieveOptions();
413+
return fut.compose(connectOptions -> {
414+
// Do not forget to close later
415+
ConnectionFactory factory = DB2Driver.INSTANCE.createConnectionFactory(vertx, connectOptions);
416+
return factory.connect(ctx);
417+
});
418+
});
419+
}
420+
421+
private Future<DB2ConnectOptions> retrieveOptions() {
422+
return null;
423+
}
416424
}

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,22 @@
1818

1919
import io.vertx.core.AbstractVerticle;
2020
import io.vertx.core.DeploymentOptions;
21+
import io.vertx.core.Future;
2122
import io.vertx.core.Vertx;
2223
import io.vertx.core.tracing.TracingPolicy;
2324
import io.vertx.docgen.Source;
2425
import io.vertx.mssqlclient.MSSQLConnectOptions;
2526
import io.vertx.mssqlclient.MSSQLPool;
27+
import io.vertx.mssqlclient.spi.MSSQLDriver;
2628
import io.vertx.sqlclient.*;
29+
import io.vertx.sqlclient.spi.ConnectionFactory;
2730

2831
import java.util.ArrayList;
2932
import java.util.Arrays;
3033
import java.util.List;
3134

3235
@Source
36+
@SuppressWarnings("unused")
3337
public class SqlClientExamples {
3438

3539
public void queries01(SqlClient client) {
@@ -411,4 +415,19 @@ public static void poolSharing3(Vertx vertx, MSSQLConnectOptions database, int m
411415
.setName("my-pool")
412416
.setEventLoopSize(4));
413417
}
418+
419+
public void dynamicPoolConfig(Vertx vertx, MSSQLPool pool) {
420+
pool.connectionProvider(ctx -> {
421+
Future<MSSQLConnectOptions> fut = retrieveOptions();
422+
return fut.compose(connectOptions -> {
423+
// Do not forget to close later
424+
ConnectionFactory factory = MSSQLDriver.INSTANCE.createConnectionFactory(vertx, connectOptions);
425+
return factory.connect(ctx);
426+
});
427+
});
428+
}
429+
430+
private Future<MSSQLConnectOptions> retrieveOptions() {
431+
return null;
432+
}
414433
}

vertx-mysql-client/src/main/java/examples/SqlClientExamples.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,22 @@
1818

1919
import io.vertx.core.AbstractVerticle;
2020
import io.vertx.core.DeploymentOptions;
21+
import io.vertx.core.Future;
2122
import io.vertx.core.Vertx;
2223
import io.vertx.core.tracing.TracingPolicy;
2324
import io.vertx.docgen.Source;
2425
import io.vertx.mysqlclient.MySQLConnectOptions;
2526
import io.vertx.mysqlclient.MySQLPool;
26-
import io.vertx.sqlclient.Cursor;
27-
import io.vertx.sqlclient.Pool;
28-
import io.vertx.sqlclient.PoolOptions;
29-
import io.vertx.sqlclient.PreparedStatement;
30-
import io.vertx.sqlclient.Row;
31-
import io.vertx.sqlclient.RowSet;
32-
import io.vertx.sqlclient.RowStream;
33-
import io.vertx.sqlclient.SqlClient;
34-
import io.vertx.sqlclient.SqlConnectOptions;
35-
import io.vertx.sqlclient.SqlConnection;
36-
import io.vertx.sqlclient.Transaction;
37-
import io.vertx.sqlclient.Tuple;
27+
import io.vertx.mysqlclient.spi.MySQLDriver;
28+
import io.vertx.sqlclient.*;
29+
import io.vertx.sqlclient.spi.ConnectionFactory;
3830

3931
import java.util.ArrayList;
4032
import java.util.Arrays;
4133
import java.util.List;
4234

4335
@Source
36+
@SuppressWarnings("unused")
4437
public class SqlClientExamples {
4538

4639
public void queries01(SqlClient client) {
@@ -393,4 +386,19 @@ public static void poolSharing3(Vertx vertx, MySQLConnectOptions database, int m
393386
.setName("my-pool")
394387
.setEventLoopSize(4));
395388
}
389+
390+
public void dynamicPoolConfig(Vertx vertx, MySQLPool pool) {
391+
pool.connectionProvider(ctx -> {
392+
Future<MySQLConnectOptions> fut = retrieveOptions();
393+
return fut.compose(connectOptions -> {
394+
// Do not forget to close later
395+
ConnectionFactory factory = MySQLDriver.INSTANCE.createConnectionFactory(vertx, connectOptions);
396+
return factory.connect(ctx);
397+
});
398+
});
399+
}
400+
401+
private Future<MySQLConnectOptions> retrieveOptions() {
402+
return null;
403+
}
396404
}

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

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,22 @@
1616
*/
1717
package examples;
1818

19+
import io.vertx.core.Future;
1920
import io.vertx.core.Vertx;
2021
import io.vertx.core.tracing.TracingPolicy;
2122
import io.vertx.docgen.Source;
2223
import io.vertx.oracleclient.OracleConnectOptions;
23-
import io.vertx.sqlclient.Cursor;
24-
import io.vertx.sqlclient.Pool;
25-
import io.vertx.sqlclient.PreparedStatement;
26-
import io.vertx.sqlclient.Row;
27-
import io.vertx.sqlclient.RowSet;
28-
import io.vertx.sqlclient.RowStream;
29-
import io.vertx.sqlclient.SqlClient;
30-
import io.vertx.sqlclient.SqlConnectOptions;
31-
import io.vertx.sqlclient.SqlConnection;
32-
import io.vertx.sqlclient.Transaction;
33-
import io.vertx.sqlclient.Tuple;
24+
import io.vertx.oracleclient.OraclePool;
25+
import io.vertx.oracleclient.spi.OracleDriver;
26+
import io.vertx.sqlclient.*;
27+
import io.vertx.sqlclient.spi.ConnectionFactory;
3428

3529
import java.util.ArrayList;
3630
import java.util.Arrays;
3731
import java.util.List;
3832

3933
@Source
34+
@SuppressWarnings("unused")
4035
public class SqlClientExamples {
4136

4237
public void queries01(SqlClient client) {
@@ -343,4 +338,18 @@ public void tracing01(OracleConnectOptions options) {
343338
options.setTracingPolicy(TracingPolicy.ALWAYS);
344339
}
345340

341+
public void dynamicPoolConfig(Vertx vertx, OraclePool pool) {
342+
pool.connectionProvider(ctx -> {
343+
Future<OracleConnectOptions> fut = retrieveOptions();
344+
return fut.compose(connectOptions -> {
345+
// Do not forget to close later
346+
ConnectionFactory factory = OracleDriver.INSTANCE.createConnectionFactory(vertx, connectOptions);
347+
return factory.connect(ctx);
348+
});
349+
});
350+
}
351+
352+
private Future<OracleConnectOptions> retrieveOptions() {
353+
return null;
354+
}
346355
}

vertx-pg-client/src/main/java/examples/SqlClientExamples.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,22 @@
1818

1919
import io.vertx.core.AbstractVerticle;
2020
import io.vertx.core.DeploymentOptions;
21+
import io.vertx.core.Future;
2122
import io.vertx.core.Vertx;
2223
import io.vertx.core.tracing.TracingPolicy;
2324
import io.vertx.docgen.Source;
2425
import io.vertx.pgclient.PgConnectOptions;
2526
import io.vertx.pgclient.PgPool;
26-
import io.vertx.sqlclient.Cursor;
27-
import io.vertx.sqlclient.Pool;
28-
import io.vertx.sqlclient.PoolOptions;
29-
import io.vertx.sqlclient.PreparedStatement;
30-
import io.vertx.sqlclient.Row;
31-
import io.vertx.sqlclient.RowSet;
32-
import io.vertx.sqlclient.RowStream;
33-
import io.vertx.sqlclient.SqlClient;
34-
import io.vertx.sqlclient.SqlConnectOptions;
35-
import io.vertx.sqlclient.SqlConnection;
36-
import io.vertx.sqlclient.Transaction;
37-
import io.vertx.sqlclient.Tuple;
27+
import io.vertx.pgclient.spi.PgDriver;
28+
import io.vertx.sqlclient.*;
29+
import io.vertx.sqlclient.spi.ConnectionFactory;
3830

3931
import java.util.ArrayList;
4032
import java.util.Arrays;
4133
import java.util.List;
4234

4335
@Source
36+
@SuppressWarnings("unused")
4437
public class SqlClientExamples {
4538

4639
public void queries01(SqlClient client) {
@@ -417,4 +410,19 @@ public static void poolSharing3(Vertx vertx, PgConnectOptions database, int maxS
417410
.setName("my-pool")
418411
.setEventLoopSize(4));
419412
}
413+
414+
public void dynamicPoolConfig(Vertx vertx, PgPool pool) {
415+
pool.connectionProvider(ctx -> {
416+
Future<PgConnectOptions> fut = retrieveOptions();
417+
return fut.compose(connectOptions -> {
418+
// Do not forget to close later
419+
ConnectionFactory factory = PgDriver.INSTANCE.createConnectionFactory(vertx, connectOptions);
420+
return factory.connect(ctx);
421+
});
422+
});
423+
}
424+
425+
private Future<PgConnectOptions> retrieveOptions() {
426+
return null;
427+
}
420428
}

vertx-sql-client/src/main/asciidoc/pool_config.adoc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,18 @@ has been created and before it is inserted in the pool.
2222
----
2323

2424
Once you are done with the connection, you should simply close it to signal the pool to use it.
25+
26+
=== Dynamic connection provider
27+
28+
By default, the pool create connections using {@link io.vertx.sqlclient.spi.ConnectionFactory#connect ConnectionFactory#connect}.
29+
30+
But you can provide your own implementation in {@link io.vertx.sqlclient.Pool#connectionProvider Pool#connectionProvider}.
31+
32+
Since the provider is asynchronous, it can be used to provide dynamic pool configuration (e.g. password rotation).
33+
34+
[source,$lang]
35+
----
36+
{@link examples.SqlClientExamples#dynamicPoolConfig}
37+
----
38+
39+
CAUTION: When the connection factory becomes useless (e.g. because of a new configuration) it must be closed to release its resources.

vertx-sql-client/src/main/java/examples/SqlClientExamples.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,16 @@
2020
import io.vertx.core.DeploymentOptions;
2121
import io.vertx.core.Future;
2222
import io.vertx.core.Vertx;
23-
import io.vertx.core.http.HttpClient;
24-
import io.vertx.core.http.HttpClientOptions;
2523
import io.vertx.core.tracing.TracingPolicy;
26-
import io.vertx.sqlclient.Cursor;
27-
import io.vertx.sqlclient.Pool;
28-
import io.vertx.sqlclient.PoolOptions;
29-
import io.vertx.sqlclient.PreparedStatement;
30-
import io.vertx.sqlclient.Row;
31-
import io.vertx.sqlclient.RowSet;
32-
import io.vertx.sqlclient.RowStream;
33-
import io.vertx.sqlclient.SqlClient;
34-
import io.vertx.sqlclient.SqlConnectOptions;
35-
import io.vertx.sqlclient.SqlConnection;
36-
import io.vertx.sqlclient.Transaction;
37-
import io.vertx.sqlclient.Tuple;
24+
import io.vertx.sqlclient.*;
25+
import io.vertx.sqlclient.spi.ConnectionFactory;
26+
import io.vertx.sqlclient.spi.Driver;
3827

3928
import java.util.ArrayList;
40-
import java.util.Arrays;
4129
import java.util.Iterator;
4230
import java.util.List;
4331

32+
@SuppressWarnings("unused")
4433
public class SqlClientExamples {
4534

4635
public void queries01(SqlClient client) {
@@ -466,4 +455,20 @@ public static void poolSharing3(Vertx vertx, SqlConnectOptions database, int max
466455
.setName("my-pool")
467456
.setEventLoopSize(4));
468457
}
458+
459+
460+
public void dynamicPoolConfig(Vertx vertx, Pool pool, Driver driver) {
461+
pool.connectionProvider(ctx -> {
462+
Future<SqlConnectOptions> fut = retrieveOptions();
463+
return fut.compose(connectOptions -> {
464+
// Do not forget to close later
465+
ConnectionFactory factory = driver.createConnectionFactory(vertx, connectOptions);
466+
return factory.connect(ctx);
467+
});
468+
});
469+
}
470+
471+
private Future<SqlConnectOptions> retrieveOptions() {
472+
return null;
473+
}
469474
}

0 commit comments

Comments
 (0)