diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/boot/impl/ReactiveServiceRegistryInitializer.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/boot/impl/ReactiveServiceRegistryInitializer.java index 6529f5717..c1ba5a30c 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/boot/impl/ReactiveServiceRegistryInitializer.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/boot/impl/ReactiveServiceRegistryInitializer.java @@ -2,7 +2,7 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.reactive.jpa.impl.ReactivePersisterClassResolverInitiator; -import org.hibernate.reactive.service.initiator.ReactiveConnectionPoolInitiator; +import org.hibernate.reactive.pool.impl.SqlClientPoolInitiator; import org.hibernate.reactive.service.initiator.DummyConnectionProviderInitiator; import org.hibernate.reactive.service.initiator.ReactiveJdbcEnvironmentInitiator; import org.hibernate.reactive.service.initiator.ReactiveQueryTranslatorFactoryInitiator; @@ -20,9 +20,9 @@ public class ReactiveServiceRegistryInitializer implements ServiceContributor { public void contribute(StandardServiceRegistryBuilder serviceRegistryBuilder) { serviceRegistryBuilder.addInitiator( DummyConnectionProviderInitiator.INSTANCE ); serviceRegistryBuilder.addInitiator( ReactiveJdbcEnvironmentInitiator.INSTANCE ); - serviceRegistryBuilder.addInitiator( ReactiveConnectionPoolInitiator.INSTANCE ); serviceRegistryBuilder.addInitiator( ReactiveTransactionCoordinatorBuilderInitiator.INSTANCE ); serviceRegistryBuilder.addInitiator( ReactivePersisterClassResolverInitiator.INSTANCE ); serviceRegistryBuilder.addInitiator( ReactiveQueryTranslatorFactoryInitiator.INSTANCE ); + serviceRegistryBuilder.addInitiator( SqlClientPoolInitiator.INSTANCE ); } } diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternal.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternal.java index f2aad1fee..67a274a80 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternal.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternal.java @@ -10,7 +10,7 @@ import org.hibernate.event.internal.MergeContext; import org.hibernate.internal.util.collections.IdentitySet; import org.hibernate.reactive.engine.spi.ReactiveActionQueue; -import org.hibernate.reactive.service.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnection; import org.hibernate.reactive.stage.Stage; /** diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternalImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternalImpl.java index e0082c67f..6141d20f2 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternalImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/impl/ReactiveSessionInternalImpl.java @@ -67,7 +67,7 @@ import org.hibernate.reactive.mutiny.Mutiny; import org.hibernate.reactive.mutiny.impl.MutinySessionImpl; import org.hibernate.reactive.persister.entity.impl.ReactiveEntityPersister; -import org.hibernate.reactive.service.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnection; import org.hibernate.reactive.stage.Stage; import org.hibernate.reactive.stage.impl.StageSessionImpl; import org.hibernate.reactive.util.impl.CompletionStages; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java index 725ba219b..cd2eae332 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/mutiny/impl/MutinySessionFactoryImpl.java @@ -5,7 +5,7 @@ import org.hibernate.internal.SessionFactoryImpl; import org.hibernate.reactive.impl.ReactiveSessionInternalImpl; import org.hibernate.reactive.mutiny.Mutiny; -import org.hibernate.reactive.service.ReactiveConnectionPool; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import java.util.function.Function; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java index a6421805b..2d1d23ea0 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java @@ -19,7 +19,7 @@ import org.hibernate.reactive.adaptor.impl.PreparedStatementAdaptor; import org.hibernate.reactive.impl.ReactiveSessionInternal; import org.hibernate.reactive.loader.entity.impl.ReactiveDynamicBatchingEntityLoaderBuilder; -import org.hibernate.reactive.service.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnection; import org.hibernate.reactive.sql.impl.Parameters; import org.hibernate.reactive.util.impl.CompletionStages; import org.hibernate.sql.Delete; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/TableReactiveIdentifierGenerator.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/TableReactiveIdentifierGenerator.java index cc2497d43..0892884bb 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/TableReactiveIdentifierGenerator.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/TableReactiveIdentifierGenerator.java @@ -21,7 +21,7 @@ import org.hibernate.mapping.Table; import org.hibernate.persister.spi.PersisterCreationContext; import org.hibernate.reactive.impl.ReactiveSessionInternal; -import org.hibernate.reactive.service.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnection; import org.hibernate.reactive.sql.impl.Parameters; import java.util.Collections; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveConnection.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/ReactiveConnection.java similarity index 79% rename from hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveConnection.java rename to hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/ReactiveConnection.java index 3ac8d48f9..35a06a103 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveConnection.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/ReactiveConnection.java @@ -1,13 +1,15 @@ -package org.hibernate.reactive.service; +package org.hibernate.reactive.pool; import java.sql.ResultSet; import java.util.Iterator; import java.util.concurrent.CompletionStage; /** - * Abstracts over reactive connection pools. + * Abstracts over reactive database connections, defining + * operations that allow queries to be executed asynchronously + * via {@link CompletionStage}. * - * @see SqlClientConnection for the Vert.x-based implementation + * @see ReactiveConnectionPool */ public interface ReactiveConnection { diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveConnectionPool.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/ReactiveConnectionPool.java similarity index 50% rename from hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveConnectionPool.java rename to hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/ReactiveConnectionPool.java index 503e2c6f3..35760335b 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveConnectionPool.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/ReactiveConnectionPool.java @@ -1,4 +1,4 @@ -package org.hibernate.reactive.service; +package org.hibernate.reactive.pool; import org.hibernate.service.Service; @@ -8,7 +8,11 @@ * A Hibernate {@link Service} that provides access to pooled * {@link ReactiveConnection reactive connections}. * - * @see SqlClientPool + * A program may integrate a custom {@link ReactiveConnectionPool} + * with Hibernate Reactive by contributing a new service using a + * {@link org.hibernate.boot.registry.StandardServiceInitiator} + * or from code-based Hibernate configuration by calling + * {@link org.hibernate.boot.registry.StandardServiceRegistryBuilder#addService}. */ public interface ReactiveConnectionPool extends Service { diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/Handlers.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/Handlers.java new file mode 100644 index 000000000..59efca1bf --- /dev/null +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/Handlers.java @@ -0,0 +1,33 @@ +package org.hibernate.reactive.pool.impl; + +import io.vertx.core.AsyncResult; +import io.vertx.core.Handler; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; +import java.util.function.Consumer; + +/** + * Utility operations for working with Vert.x handlers + */ +public class Handlers { + + protected static CompletionStage toCompletionStage( + Consumer>> completionConsumer) { + CompletableFuture cs = new CompletableFuture<>(); +// try { + completionConsumer.accept( ar -> { + if ( ar.succeeded() ) { + cs.complete( ar.result() ); + } + else { + cs.completeExceptionally( ar.cause() ); + } + } ); +// } +// catch (Exception e) { +// cs.completeExceptionally( e ); +// } + return cs; + } +} diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/SqlClientConnection.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientConnection.java similarity index 81% rename from hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/SqlClientConnection.java rename to hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientConnection.java index 1efa31e51..a3b140eb9 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/SqlClientConnection.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientConnection.java @@ -1,16 +1,13 @@ -package org.hibernate.reactive.service; +package org.hibernate.reactive.pool.impl; -import io.vertx.core.AsyncResult; -import io.vertx.core.Handler; import io.vertx.sqlclient.*; import org.hibernate.reactive.adaptor.impl.ResultSetAdaptor; +import org.hibernate.reactive.pool.ReactiveConnection; import org.hibernate.reactive.util.impl.CompletionStages; import java.sql.ResultSet; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; -import java.util.function.Consumer; import static io.vertx.core.Future.failedFuture; import static io.vertx.core.Future.succeededFuture; @@ -27,23 +24,11 @@ public class SqlClientConnection implements ReactiveConnection { private final SqlConnection connection; private Transaction transaction; - private SqlClientConnection(SqlConnection connection, boolean showSQL) { + SqlClientConnection(SqlConnection connection, boolean showSQL) { this.showSQL = showSQL; this.connection = connection; } - public static CompletionStage create(Pool pool, boolean showSQL) { - return toCompletionStage( - handler -> pool.getConnection( - ar -> handler.handle( - ar.succeeded() - ? succeededFuture( new SqlClientConnection( ar.result(), showSQL ) ) - : failedFuture( ar.cause() ) - ) - ) - ); - } - @Override public CompletionStage update(String sql, Object[] paramValues) { return update( sql, Tuple.wrap( paramValues ) ); @@ -109,7 +94,7 @@ public CompletionStage> preparedQuery(String sql, Tuple parameters) if (showSQL) { System.out.println(sql); } - return toCompletionStage( + return Handlers.toCompletionStage( handler -> client().preparedQuery( sql ).execute( parameters, handler ) ); } @@ -119,7 +104,7 @@ public CompletionStage> preparedQuery(String sql) { if (showSQL) { System.out.println(sql); } - return toCompletionStage( + return Handlers.toCompletionStage( handler -> client().preparedQuery( sql ).execute( handler ) ); } @@ -138,7 +123,7 @@ public CompletionStage beginTransaction() { @Override public CompletionStage commitTransaction() { - return toCompletionStage( + return Handlers.toCompletionStage( handler -> transaction.commit( ar -> { transaction = null; @@ -151,7 +136,7 @@ public CompletionStage commitTransaction() { @Override public CompletionStage rollbackTransaction() { - return toCompletionStage( + return Handlers.toCompletionStage( handler -> transaction.rollback( ar -> { transaction = null; @@ -167,25 +152,6 @@ public void close() { connection.close(); } - protected static CompletionStage toCompletionStage( - Consumer>> completionConsumer) { - CompletableFuture cs = new CompletableFuture<>(); -// try { - completionConsumer.accept( ar -> { - if ( ar.succeeded() ) { - cs.complete( ar.result() ); - } - else { - cs.completeExceptionally( ar.cause() ); - } - } ); -// } -// catch (Exception e) { -// cs.completeExceptionally( e ); -// } - return cs; - } - /** * Loads MySQLClient.LAST_INSERTED_ID via reflection to avoid a hard * dependency on the MySQL driver diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/SqlClientPool.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientPool.java similarity index 91% rename from hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/SqlClientPool.java rename to hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientPool.java index 4ee2f3951..4e31f7ee2 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/SqlClientPool.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientPool.java @@ -1,4 +1,4 @@ -package org.hibernate.reactive.service; +package org.hibernate.reactive.pool.impl; import java.net.URI; import java.util.Map; @@ -10,6 +10,8 @@ import org.hibernate.internal.util.config.ConfigurationException; import org.hibernate.internal.util.config.ConfigurationHelper; import org.hibernate.reactive.cfg.ReactiveSettings; +import org.hibernate.reactive.pool.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import org.hibernate.reactive.util.impl.JdbcUrlParser; import org.hibernate.service.spi.Configurable; import org.hibernate.service.spi.Stoppable; @@ -20,6 +22,9 @@ import io.vertx.sqlclient.SqlConnectOptions; import io.vertx.sqlclient.spi.Driver; +import static io.vertx.core.Future.failedFuture; +import static io.vertx.core.Future.succeededFuture; + /** * A pool of reactive connections backed by a Vert.x {@link Pool}. */ @@ -131,7 +136,15 @@ private Pool configurePool(Map configurationValues) { @Override public CompletionStage getConnection() { - return SqlClientConnection.create( pool, showSQL ); + return Handlers.toCompletionStage( + handler -> pool.getConnection( + ar -> handler.handle( + ar.succeeded() + ? succeededFuture( new SqlClientConnection( ar.result(), showSQL) ) + : failedFuture( ar.cause() ) + ) + ) + ); } @Override diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientPoolInitiator.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientPoolInitiator.java new file mode 100644 index 000000000..8ae436ff8 --- /dev/null +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/pool/impl/SqlClientPoolInitiator.java @@ -0,0 +1,32 @@ +package org.hibernate.reactive.pool.impl; + +import org.hibernate.boot.registry.StandardServiceInitiator; +import org.hibernate.reactive.pool.ReactiveConnectionPool; +import org.hibernate.service.spi.ServiceRegistryImplementor; + +import java.util.Map; + +/** + * A Hibernate {@link StandardServiceInitiator service initiator} that + * integrates our {@link ReactiveConnectionPool}. + * + * @see ReactiveConnectionPool + * @see SqlClientPool + */ +public class SqlClientPoolInitiator implements StandardServiceInitiator { + + public static final SqlClientPoolInitiator INSTANCE = new SqlClientPoolInitiator(); + + private SqlClientPoolInitiator() { + } + + @Override + public ReactiveConnectionPool initiateService(Map configurationValues, ServiceRegistryImplementor registry) { + return new SqlClientPool( configurationValues ); + } + + @Override + public Class getServiceInitiated() { + return ReactiveConnectionPool.class; + } +} diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveGenerationTarget.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveGenerationTarget.java index c83a994b1..a1498cc39 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveGenerationTarget.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/ReactiveGenerationTarget.java @@ -1,5 +1,7 @@ package org.hibernate.reactive.service; +import org.hibernate.reactive.pool.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import org.hibernate.service.ServiceRegistry; import org.hibernate.tool.schema.internal.exec.GenerationTarget; diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/initiator/ReactiveConnectionPoolInitiator.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/initiator/ReactiveConnectionPoolInitiator.java deleted file mode 100644 index 25b03ca72..000000000 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/service/initiator/ReactiveConnectionPoolInitiator.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.hibernate.reactive.service.initiator; - -import org.hibernate.boot.registry.StandardServiceInitiator; -import org.hibernate.reactive.service.ReactiveConnectionPool; -import org.hibernate.reactive.service.SqlClientPool; -import org.hibernate.service.spi.ServiceRegistryImplementor; - -import java.util.Map; - -/** - * A Hibernate {@link StandardServiceInitiator service initiator} that - * integrates our {@link ReactiveConnectionPool}. - * - * @see ReactiveConnectionPool - * @see SqlClientPool - */ -public class ReactiveConnectionPoolInitiator implements StandardServiceInitiator { - - public static final ReactiveConnectionPoolInitiator INSTANCE = new ReactiveConnectionPoolInitiator(); - - private ReactiveConnectionPoolInitiator() { - } - - @Override - public SqlClientPool initiateService(Map configurationValues, ServiceRegistryImplementor registry) { - return new SqlClientPool( configurationValues ); - } - - @Override - public Class getServiceInitiated() { - return SqlClientPool.class; - } -} diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java index 31a29fe52..90b7db41d 100644 --- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java +++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/stage/impl/StageSessionFactoryImpl.java @@ -3,7 +3,7 @@ import org.hibernate.HibernateException; import org.hibernate.internal.SessionFactoryImpl; import org.hibernate.reactive.impl.ReactiveSessionInternalImpl; -import org.hibernate.reactive.service.ReactiveConnectionPool; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import org.hibernate.reactive.stage.Stage; import java.util.concurrent.CompletionStage; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseMutinyTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseMutinyTest.java index 0c5e89d71..04d033e03 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseMutinyTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseMutinyTest.java @@ -11,8 +11,8 @@ import org.hibernate.cfg.Configuration; import org.hibernate.reactive.containers.PostgreSQLDatabase; import org.hibernate.reactive.mutiny.Mutiny; -import org.hibernate.reactive.service.ReactiveConnection; -import org.hibernate.reactive.service.ReactiveConnectionPool; +import org.hibernate.reactive.pool.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import org.hibernate.reactive.stage.Stage; import org.junit.After; import org.junit.Before; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseReactiveTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseReactiveTest.java index 0edd36827..e9ea2ece6 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseReactiveTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/BaseReactiveTest.java @@ -7,8 +7,8 @@ import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.Configuration; import org.hibernate.reactive.containers.PostgreSQLDatabase; -import org.hibernate.reactive.service.ReactiveConnection; -import org.hibernate.reactive.service.ReactiveConnectionPool; +import org.hibernate.reactive.pool.ReactiveConnection; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import org.hibernate.reactive.stage.Stage; import org.junit.After; import org.junit.Before; diff --git a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/configuration/ReactiveConnectionPoolTest.java b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/configuration/ReactiveConnectionPoolTest.java index 6d074bf6b..6d3378bef 100644 --- a/hibernate-reactive-core/src/test/java/org/hibernate/reactive/configuration/ReactiveConnectionPoolTest.java +++ b/hibernate-reactive-core/src/test/java/org/hibernate/reactive/configuration/ReactiveConnectionPoolTest.java @@ -16,8 +16,8 @@ import org.hibernate.reactive.cfg.ReactiveSettings; import org.hibernate.reactive.containers.DatabaseConfiguration; import org.hibernate.reactive.containers.PostgreSQLDatabase; -import org.hibernate.reactive.service.SqlClientPool; -import org.hibernate.reactive.service.ReactiveConnectionPool; +import org.hibernate.reactive.pool.impl.SqlClientPool; +import org.hibernate.reactive.pool.ReactiveConnectionPool; import org.junit.Rule; import org.junit.Test;