Skip to content

Commit 8acb97f

Browse files
committed
Decouple ConnectionFactory from connection API.
Motivation: The ConnectionFactory SPI currently provides an SqlConnection, most callers actually care about the actual Connection SPI and unwrap it then cast it. Instead we can have the ConnectionFactory only care about providing Connection and let callers wrap it with an SqlConnection of their choice. As consequence this simplifies the pool implementation as they operation on Connection.
1 parent 616f89e commit 8acb97f

File tree

19 files changed

+86
-64
lines changed

19 files changed

+86
-64
lines changed

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,10 @@ protected Future<Connection> doConnectInternal(DB2ConnectOptions options, Contex
6565
}
6666

6767
@Override
68-
public Future<SqlConnection> connect(Context context, DB2ConnectOptions options) {
68+
public Future<Connection> connect(Context context, DB2ConnectOptions options) {
6969
ContextInternal contextInternal = (ContextInternal) context;
70-
Promise<SqlConnection> promise = contextInternal.promise();
71-
connect(asEventLoopContext(contextInternal), options)
72-
.map(conn -> {
73-
DB2ConnectionImpl db2Connection = new DB2ConnectionImpl(contextInternal, this, conn);
74-
conn.init(db2Connection);
75-
return (SqlConnection)db2Connection;
76-
}).onComplete(promise);
70+
Promise<Connection> promise = contextInternal.promise();
71+
connect(asEventLoopContext(contextInternal), options).onComplete(promise);
7772
return promise.future();
7873
}
7974
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ public static Future<DB2Connection> connect(Vertx vertx, DB2ConnectOptions optio
3737
} catch (Exception e) {
3838
return ctx.failedFuture(e);
3939
}
40-
return prepareForClose(ctx, client.connect((Context)ctx, options)).map(DB2Connection::cast);
40+
return client.connect((Context)ctx, options).map(conn -> {
41+
DB2ConnectionImpl impl = new DB2ConnectionImpl(ctx, client, conn);
42+
conn.init(impl);
43+
prepareForClose(ctx, impl);
44+
return impl;
45+
});
4146
}
4247

4348
public DB2ConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn) {

vertx-db2-client/src/main/java/io/vertx/db2client/spi/DB2Driver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public Pool newPool(Vertx vertx, Supplier<Future<DB2ConnectOptions>> databases,
6464
private PoolImpl newPoolImpl(VertxInternal vertx, Handler<SqlConnection> connectHandler, Supplier<Future<DB2ConnectOptions>> databases, PoolOptions options, NetClientOptions transportOptions, CloseFuture closeFuture) {
6565
boolean pipelinedPool = options instanceof Db2PoolOptions && ((Db2PoolOptions) options).isPipelined();
6666
ConnectionFactory<DB2ConnectOptions> factory = createConnectionFactory(vertx, transportOptions);
67-
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null, context -> factory.connect(context, databases.get()), connectHandler, closeFuture);
67+
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, options, null, null,
68+
factory, databases, connectHandler, closeFuture);
6869
pool.init();
6970
closeFuture.add(factory);
7071
return pool;

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionFactory.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,10 @@ private Future<Connection> login(MSSQLSocketConnection conn, MSSQLConnectOptions
106106
}
107107

108108
@Override
109-
public Future<SqlConnection> connect(Context context, MSSQLConnectOptions options) {
109+
public Future<Connection> connect(Context context, MSSQLConnectOptions options) {
110110
ContextInternal ctx = (ContextInternal) context;
111-
Promise<SqlConnection> promise = ctx.promise();
112-
connect(asEventLoopContext(ctx), options)
113-
.map(conn -> {
114-
MSSQLConnectionImpl msConn = new MSSQLConnectionImpl(ctx, this, conn);
115-
conn.init(msConn);
116-
return (SqlConnection)msConn;
117-
})
118-
.onComplete(promise);
111+
Promise<Connection> promise = ctx.promise();
112+
connect(asEventLoopContext(ctx), options).onComplete(promise);
119113
return promise.future();
120114
}
121115
}

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLConnectionImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@ public MSSQLConnectionImpl(ContextInternal context, ConnectionFactory factory, C
3636
public static Future<MSSQLConnection> connect(Vertx vertx, MSSQLConnectOptions options) {
3737
ContextInternal ctx = (ContextInternal) vertx.getOrCreateContext();
3838
MSSQLConnectionFactory client = new MSSQLConnectionFactory(ctx.owner());
39-
return prepareForClose(ctx, client.connect((Context)ctx, options)).map(MSSQLConnection::cast);
39+
return client.connect((Context)ctx, options).map(conn -> {
40+
MSSQLConnectionImpl impl = new MSSQLConnectionImpl(ctx, client, conn);
41+
conn.init(impl);
42+
prepareForClose(ctx, impl);
43+
return impl;
44+
});
4045
}
4146

4247
@Override

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/spi/MSSQLDriver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ public Pool newPool(Vertx vertx, Supplier<Future<MSSQLConnectOptions>> databases
6565

6666
private PoolImpl newPoolImpl(VertxInternal vertx, Handler<SqlConnection> connectHandler, Supplier<Future<MSSQLConnectOptions>> databases, PoolOptions poolOptions, NetClientOptions transportOptions, CloseFuture closeFuture) {
6767
ConnectionFactory<MSSQLConnectOptions> factory = createConnectionFactory(vertx, transportOptions);
68-
PoolImpl pool = new PoolImpl(vertx, this, false, poolOptions, null, null, context -> factory.connect(context, databases.get()), connectHandler, closeFuture);
68+
PoolImpl pool = new PoolImpl(vertx, this, false, poolOptions, null, null,
69+
factory, databases, connectHandler, closeFuture);
6970
pool.init();
7071
closeFuture.add(factory);
7172
return pool;

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionFactory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,15 @@ private Future<Connection> doConnect(MySQLConnectOptions options, SslMode sslMod
142142
}
143143

144144
@Override
145-
public Future<SqlConnection> connect(Context context, MySQLConnectOptions options) {
145+
public Future<Connection> connect(Context context, MySQLConnectOptions options) {
146146
ContextInternal contextInternal = (ContextInternal) context;
147-
Promise<SqlConnection> promise = contextInternal.promise();
147+
Promise<Connection> promise = contextInternal.promise();
148148
connect(asEventLoopContext(contextInternal), options)
149-
.map(conn -> {
149+
/*.map(conn -> {
150150
MySQLConnectionImpl mySQLConnection = new MySQLConnectionImpl(contextInternal, this, conn);
151151
conn.init(mySQLConnection);
152152
return (SqlConnection)mySQLConnection;
153-
})
153+
})*/
154154
.onComplete(promise);
155155
return promise.future();
156156
}

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLConnectionImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ public static Future<MySQLConnection> connect(ContextInternal ctx, MySQLConnectO
3737
} catch (Exception e) {
3838
return ctx.failedFuture(e);
3939
}
40-
return prepareForClose(ctx, client.connect((Context)ctx, options)).map(MySQLConnection::cast);
40+
return client.connect((Context)ctx, options).map(conn -> {
41+
MySQLConnectionImpl impl = new MySQLConnectionImpl(ctx, client, conn);
42+
conn.init(impl);
43+
prepareForClose(ctx, impl);
44+
return impl;
45+
});
4146
}
4247

4348
public MySQLConnectionImpl(ContextInternal context, ConnectionFactory factory, Connection conn) {

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/spi/MySQLDriver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ public Pool newPool(Vertx vertx, Supplier<Future<MySQLConnectOptions>> databases
6464
private PoolImpl newPoolImpl(VertxInternal vertx, Handler<SqlConnection> connectHandler, Supplier<Future<MySQLConnectOptions>> databases, PoolOptions poolOptions, NetClientOptions transportOptions, CloseFuture closeFuture) {
6565
boolean pipelinedPool = poolOptions instanceof MySQLPoolOptions && ((MySQLPoolOptions) poolOptions).isPipelined();
6666
ConnectionFactory<MySQLConnectOptions> factory = createConnectionFactory(vertx, transportOptions);
67-
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, poolOptions, null, null, context -> factory.connect(context, databases.get()), connectHandler, closeFuture);
67+
PoolImpl pool = new PoolImpl(vertx, this, pipelinedPool, poolOptions, null, null, factory,
68+
databases, connectHandler, closeFuture);
6869
pool.init();
6970
closeFuture.add(factory);
7071
return pool;

vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/OracleConnectionFactory.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
import io.vertx.core.Completable;
1414
import io.vertx.core.Context;
1515
import io.vertx.core.Future;
16-
import io.vertx.core.Promise;
1716
import io.vertx.core.internal.ContextInternal;
1817
import io.vertx.core.internal.VertxInternal;
1918
import io.vertx.core.json.JsonObject;
2019
import io.vertx.core.spi.metrics.ClientMetrics;
2120
import io.vertx.core.spi.metrics.VertxMetrics;
2221
import io.vertx.oracleclient.OracleConnectOptions;
2322
import io.vertx.sqlclient.SqlConnectOptions;
24-
import io.vertx.sqlclient.SqlConnection;
23+
import io.vertx.sqlclient.internal.Connection;
2524
import io.vertx.sqlclient.spi.ConnectionFactory;
2625
import oracle.jdbc.OracleConnection;
2726
import oracle.jdbc.datasource.OracleDataSource;
@@ -59,7 +58,7 @@ private OracleDataSource getDatasource(SqlConnectOptions options) {
5958
}
6059

6160
@Override
62-
public Future<SqlConnection> connect(Context context, OracleConnectOptions options) {
61+
public Future<Connection> connect(Context context, OracleConnectOptions options) {
6362
OracleDataSource datasource = getDatasource(options);
6463
VertxMetrics vertxMetrics = ((VertxInternal)context.owner()).metrics();
6564
ClientMetrics metrics = vertxMetrics != null ? vertxMetrics.createClientMetrics(options.getSocketAddress(), "sql", options.getMetricsName()) : null;
@@ -68,9 +67,7 @@ public Future<SqlConnection> connect(Context context, OracleConnectOptions optio
6867
OracleConnection orac = datasource.createConnectionBuilder().build();
6968
OracleMetadata metadata = new OracleMetadata(orac.getMetaData());
7069
OracleJdbcConnection conn = new OracleJdbcConnection(ctx, metrics, options, orac, metadata);
71-
OracleConnectionImpl msConn = new OracleConnectionImpl(ctx, this, conn);
72-
conn.init(msConn);
73-
return msConn;
70+
return conn;
7471
});
7572
}
7673
}

0 commit comments

Comments
 (0)