diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/Pool.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/Pool.java index 2700336ce6..8d8be09733 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/Pool.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/Pool.java @@ -28,7 +28,7 @@ import io.vertx.core.Vertx; import io.vertx.core.net.NetClientOptions; import io.vertx.core.internal.ContextInternal; -import io.vertx.sqlclient.internal.pool.PoolImpl; +import io.vertx.sqlclient.impl.TransactionPropagationLocal; import io.vertx.sqlclient.impl.Utils; import io.vertx.sqlclient.spi.Driver; @@ -158,7 +158,7 @@ static Pool pool(Vertx vertx, SqlConnectOptions database, PoolOptions options) { default Future<@Nullable T> withTransaction(TransactionPropagation txPropagation, Function> function) { if (txPropagation == TransactionPropagation.CONTEXT) { ContextInternal context = (ContextInternal) Vertx.currentContext(); - SqlConnection sqlConnection = context.getLocal(PoolImpl.PROPAGATABLE_CONNECTION); + SqlConnection sqlConnection = context.getLocal(TransactionPropagationLocal.KEY); if (sqlConnection == null) { return startPropagatableConnection(this, function); } diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/TransactionPropagationLocal.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/TransactionPropagationLocal.java new file mode 100644 index 0000000000..18c5cd6eda --- /dev/null +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/TransactionPropagationLocal.java @@ -0,0 +1,15 @@ +package io.vertx.sqlclient.impl; + +import io.vertx.core.internal.VertxBootstrap; +import io.vertx.core.spi.VertxServiceProvider; +import io.vertx.core.spi.context.storage.ContextLocal; +import io.vertx.sqlclient.SqlConnection; + +public class TransactionPropagationLocal implements VertxServiceProvider { + + public static final ContextLocal KEY = ContextLocal.registerLocal(SqlConnection.class); + + @Override + public void init(VertxBootstrap builder) { + } +} diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/internal/pool/PoolImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/internal/pool/PoolImpl.java index a8fafba953..a8ef734f15 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/internal/pool/PoolImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/internal/pool/PoolImpl.java @@ -26,6 +26,7 @@ import io.vertx.core.spi.metrics.PoolMetrics; import io.vertx.core.spi.metrics.VertxMetrics; import io.vertx.sqlclient.*; +import io.vertx.sqlclient.impl.TransactionPropagationLocal; import io.vertx.sqlclient.impl.pool.SqlConnectionPool; import io.vertx.sqlclient.internal.Connection; import io.vertx.sqlclient.internal.SqlClientBase; @@ -54,8 +55,6 @@ public class PoolImpl extends SqlClientBase implements Pool, Closeable { private final Handler connectionInitializer; private long timerID; - public static final String PROPAGATABLE_CONNECTION = "propagatable_connection"; - public PoolImpl(VertxInternal vertx, Driver driver, boolean pipelined, @@ -149,7 +148,7 @@ public Future getConnection() { public static Future<@Nullable T> startPropagatableConnection(Pool pool, Function> function) { ContextInternal context = (ContextInternal) Vertx.currentContext(); - return pool.getConnection().onComplete(handler -> context.putLocal(PROPAGATABLE_CONNECTION, handler.result())) + return pool.getConnection().onComplete(handler -> context.putLocal(TransactionPropagationLocal.KEY, handler.result())) .flatMap(conn -> conn .begin() .flatMap(tx -> function @@ -167,7 +166,7 @@ public Future getConnection() { .compose(v -> context.failedFuture(err), failure -> context.failedFuture(err)); } })) - .onComplete(ar -> conn.close().onComplete(v -> context.removeLocal(PROPAGATABLE_CONNECTION)))); + .onComplete(ar -> conn.close().onComplete(v -> context.removeLocal(TransactionPropagationLocal.KEY)))); } @Override diff --git a/vertx-sql-client/src/main/java/module-info.java b/vertx-sql-client/src/main/java/module-info.java index a223770395..34e6e23dcf 100644 --- a/vertx-sql-client/src/main/java/module-info.java +++ b/vertx-sql-client/src/main/java/module-info.java @@ -1,3 +1,6 @@ +import io.vertx.core.spi.VertxServiceProvider; +import io.vertx.sqlclient.impl.TransactionPropagationLocal; + module io.vertx.sql.client { requires io.netty.common; @@ -18,6 +21,8 @@ uses io.vertx.sqlclient.spi.Driver; + provides io.vertx.core.spi.VertxServiceProvider with io.vertx.sqlclient.impl.TransactionPropagationLocal; + // Expose enough for implementing a client back-end on top of this API (e.g. vertx-jdbc-client) exports io.vertx.sqlclient.internal; diff --git a/vertx-sql-client/src/main/resources/META-INF/services/io.vertx.core.spi.VertxServiceProvider b/vertx-sql-client/src/main/resources/META-INF/services/io.vertx.core.spi.VertxServiceProvider new file mode 100644 index 0000000000..fdaf850134 --- /dev/null +++ b/vertx-sql-client/src/main/resources/META-INF/services/io.vertx.core.spi.VertxServiceProvider @@ -0,0 +1 @@ +io.vertx.sqlclient.impl.TransactionPropagationLocal