Repository: quarkusio/quarkus
Issue: Hibernate Reactive with Stage API throws ContextNotActiveException on flush

**Describe the bug**

The code below throws a `ContextNotActiveException` (see also reproducer below). Switching to the Mutiny API makes the problem disappear.

```java
    @Inject
    Stage.Session session;

    @Test
    @ActivateRequestContext
    public void test() {
        DefaultEntity entity = new DefaultEntity("default");

        DefaultEntity retrievedEntity = session.withTransaction(tx -> session.persist(entity))
                .thenCompose($ -> session.withTransaction(tx -> session.clear().find(DefaultEntity.class, entity.getId())))
                .toCompletableFuture().join();

        assertThat(retrievedEntity)
                .isNotSameAs(entity)
                .returns(entity.getName(), DefaultEntity::getName);
    }
```

Stack trace:

```
java.util.concurrent.CompletionException: javax.enterprise.context.ContextNotActiveException
        at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
        at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
        at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1081)
        at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
        at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
        at org.hibernate.reactive.pool.impl.Handlers.lambda$toCompletionStage$0(Handlers.java:26)
        at io.vertx.sqlclient.impl.SqlResultHandler.complete(SqlResultHandler.java:98)
        at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:87)
        at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:33)
        at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:241)
        at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:88)
        at io.vertx.core.net.impl.NetSocketImpl.lambda$new$2(NetSocketImpl.java:101)
        at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:237)
        at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:127)
        at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:357)
        at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)
        at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43)
        at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229)
        at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
        at io.vertx.pgclient.impl.codec.PgEncoder.lambda$write$0(PgEncoder.java:78)
        at io.vertx.pgclient.impl.codec.PgCommandCodec.handleReadyForQuery(PgCommandCodec.java:138)
        at io.vertx.pgclient.impl.codec.PgDecoder.decodeReadyForQuery(PgDecoder.java:226)
        at io.vertx.pgclient.impl.codec.PgDecoder.channelRead(PgDecoder.java:86)
        at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: javax.enterprise.context.ContextNotActiveException
        at io.quarkus.arc.impl.ClientProxies.getDelegate(ClientProxies.java:40)
        at io.quarkus.hibernate.reactive.runtime.ReactiveSessionProducer_ProducerMethod_createStageSession_f9b8f611ead14dce89da7dfa2d7630a8afb9b0b9_ClientProxy.arc$delegate(ReactiveSessionProducer_ProducerMethod_createStageSession_f9b8f611ead14dce89da7dfa2d7630a8afb9b0b9_ClientProxy.zig:61)
        at io.quarkus.hibernate.reactive.runtime.ReactiveSessionProducer_ProducerMethod_createStageSession_f9b8f611ead14dce89da7dfa2d7630a8afb9b0b9_ClientProxy.flush(ReactiveSessionProducer_ProducerMethod_createStageSession_f9b8f611ead14dce89da7dfa2d7630a8afb9b0b9_ClientProxy.zig:187)
        at io.quarkus.hibernate.reactive.singlepersistenceunit.SinglePersistenceUnitCdiStageSessionTest.lambda$test$1(SinglePersistenceUnitCdiStageSessionTest.java:33)
        at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
        ... 41 more
```

**Expected behavior**
I would expect the Mutiny API and the Stage API to behave similarly. Maybe the code is wrong, but in that case both APIs should throw an exception?

**Actual behavior**
(Describe the actual behavior clearly and concisely.)


**To Reproduce**

See [this branch](https://github.com/quarkusio/quarkus/compare/master...yrodiere:reactive-context-not-active#diff-c1b22d077ee2c530ae96730f751521016fda503b609ddbc2852ced4e2c95fbcdR32) where I added two tests: one with the Mutiny API and another with the Stage API. The Munity test passes, but the Stage one fails.

**Configuration**
N/A

**Screenshots**
N/A

**Environment (please complete the following information):**
 - Output of `uname -a` or `ver`: `Linux yrodiere.redhat 5.10.8-100.fc32.x86_64 #1 SMP Sun Jan 17 19:52:43 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux`
 - Output of `java -version`:
 ```
openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9+11)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9+11, mixed mode)
```
 - GraalVM version (if different from Java): the one built in Quarkus
 - Quarkus version or git rev: 63db661ad3af4dca1b63a9c9905f911e888dbde1
 - Build tool (ie. output of `mvnw --version` or `gradlew --version`):
 ```
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/yrodiere/.m2/wrapper/dists/apache-maven-3.6.3-bin/1iopthnavndlasol9gbrbg6bf2/apache-maven-3.6.3
Java version: 11.0.9, vendor: AdoptOpenJDK, runtime: /home/yrodiere/tools/java/jdk-11.0.9+11
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.10.8-100.fc32.x86_64", arch: "amd64", family: "unix"
```

**Additional context**
N/A


Changed files:
integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpoint.java
integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveFetchLazyTest.java
integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2Test.java
integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTest.java
extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitCdiStageSessionTest.java
integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTestEndpoint.java
integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTestEndpoint.java
integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointAlternative.java
integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2TestEndpoint.java
extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionProducer.java
extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionFactoryProducer.java
integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTest.java
integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveAlternativeTest.java
integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTestEndpoint.java
integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTest.java
integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointFetchLazy.java
integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTest.java

diff --git a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitCdiStageSessionTest.java b/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitCdiStageSessionTest.java
deleted file mode 100644
index fb4f969c8ee..00000000000
--- a/extensions/hibernate-reactive/deployment/src/test/java/io/quarkus/hibernate/reactive/singlepersistenceunit/SinglePersistenceUnitCdiStageSessionTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package io.quarkus.hibernate.reactive.singlepersistenceunit;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import javax.enterprise.context.control.ActivateRequestContext;
-import javax.inject.Inject;
-
-import org.hibernate.reactive.stage.Stage;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-import io.quarkus.test.QuarkusUnitTest;
-
-public class SinglePersistenceUnitCdiStageSessionTest {
-
-    @RegisterExtension
-    static QuarkusUnitTest runner = new QuarkusUnitTest()
-            .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
-                    .addClass(DefaultEntity.class)
-                    .addAsResource("application.properties"));
-
-    @Inject
-    Stage.Session session;
-
-    @Inject
-    Stage.SessionFactory sessionFactory;
-
-    @Test
-    @ActivateRequestContext
-    public void testWithFactory() {
-        DefaultEntity entity = new DefaultEntity("default");
-
-        DefaultEntity retrievedEntity = sessionFactory.withTransaction((session, tx) -> session.persist(entity))
-                .thenCompose(v -> sessionFactory.withSession(session -> session.find(DefaultEntity.class, entity.getId())))
-                .toCompletableFuture().join();
-
-        assertThat(retrievedEntity)
-                .isNotSameAs(entity)
-                .returns(entity.getName(), DefaultEntity::getName);
-    }
-
-    @Test
-    @Disabled("#14812: We're getting a ContextNotActiveException for some (unknown) reason")
-    @ActivateRequestContext
-    public void test() {
-        DefaultEntity entity = new DefaultEntity("default");
-
-        DefaultEntity retrievedEntity = session.withTransaction(tx -> session.persist(entity))
-                .thenCompose($ -> session.withTransaction(tx -> session.clear().find(DefaultEntity.class, entity.getId())))
-                .toCompletableFuture().join();
-
-        assertThat(retrievedEntity)
-                .isNotSameAs(entity)
-                .returns(entity.getName(), DefaultEntity::getName);
-    }
-
-}
diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionFactoryProducer.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionFactoryProducer.java
index e51781acd70..478f5a60c23 100644
--- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionFactoryProducer.java
+++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionFactoryProducer.java
@@ -8,7 +8,6 @@
 import javax.persistence.PersistenceUnit;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.quarkus.arc.DefaultBean;
 
@@ -18,14 +17,6 @@ public class ReactiveSessionFactoryProducer {
     @PersistenceUnit
     EntityManagerFactory emf;
 
-    @Produces
-    @Singleton
-    @DefaultBean
-    @Typed(Stage.SessionFactory.class)
-    public Stage.SessionFactory reactiveSessionFactory() {
-        return emf.unwrap(Stage.SessionFactory.class);
-    }
-
     @Produces
     @Singleton
     @DefaultBean
diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionProducer.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionProducer.java
index 709835c3207..ead36fc3330 100644
--- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionProducer.java
+++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/ReactiveSessionProducer.java
@@ -6,25 +6,14 @@
 import javax.inject.Inject;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.quarkus.arc.DefaultBean;
 
 public class ReactiveSessionProducer {
 
-    @Inject
-    Stage.SessionFactory reactiveSessionFactory;
-
     @Inject
     Mutiny.SessionFactory mutinySessionFactory;
 
-    @Produces
-    @RequestScoped
-    @DefaultBean
-    public Stage.Session createStageSession() {
-        return reactiveSessionFactory.openSession();
-    }
-
     @Produces
     @RequestScoped
     @DefaultBean
@@ -32,17 +21,6 @@ public Mutiny.Session createMutinySession() {
         return mutinySessionFactory.openSession();
     }
 
-    public void disposeStageSession(@Disposes Stage.Session reactiveSession) {
-        if (reactiveSession != null) {
-            //We're ignoring the returned CompletionStage!
-            //This could certainly done better but it should be effective enough to
-            //eventually close the session: the connection pool will order the operations
-            //as it won't be able to return connections to other consumers when it's saturated,
-            //ensuring close operations are handled.
-            reactiveSession.close().toCompletableFuture().join();
-        }
-    }
-
     public void disposeMutinySession(@Disposes Mutiny.Session reactiveSession) {
         if (reactiveSession != null) {
             //We're ignoring the returned CompletionStage!
diff --git a/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTestEndpoint.java b/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTestEndpoint.java
index 4ae671275e7..6c6a4ed1364 100644
--- a/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTestEndpoint.java
+++ b/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTestEndpoint.java
@@ -1,13 +1,10 @@
 package io.quarkus.it.hibernate.reactive.db2;
 
-import java.util.concurrent.CompletionStage;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.smallrye.mutiny.Uni;
 import io.vertx.mutiny.db2client.DB2Pool;
@@ -18,9 +15,6 @@
 @Path("/alternative-tests")
 public class HibernateReactiveDB2AlternativeTestEndpoint {
 
-    @Inject
-    Stage.Session stageSession;
-
     @Inject
     Mutiny.Session mutinySession;
 
@@ -29,14 +23,6 @@ public class HibernateReactiveDB2AlternativeTestEndpoint {
     @Inject
     DB2Pool db2Pool;
 
-    @GET
-    @Path("/reactiveFind")
-    public CompletionStage<GuineaPig> reactiveFind() {
-        final GuineaPig expectedPig = new GuineaPig(5, "Aloi");
-        return populateDB().convert().toCompletionStage()
-                .thenCompose(junk -> stageSession.find(GuineaPig.class, expectedPig.getId()));
-    }
-
     @GET
     @Path("/reactiveFindMutiny")
     public Uni<GuineaPig> reactiveFindMutiny() {
diff --git a/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2TestEndpoint.java b/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2TestEndpoint.java
index ac780eef29d..3ca8020f2c8 100644
--- a/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2TestEndpoint.java
+++ b/integration-tests/hibernate-reactive-db2/src/main/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2TestEndpoint.java
@@ -1,13 +1,10 @@
 package io.quarkus.it.hibernate.reactive.db2;
 
-import java.util.concurrent.CompletionStage;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.smallrye.mutiny.Uni;
 import io.vertx.mutiny.db2client.DB2Pool;
@@ -18,9 +15,6 @@
 @Path("/tests")
 public class HibernateReactiveDB2TestEndpoint {
 
-    @Inject
-    Stage.Session stageSession;
-
     @Inject
     Mutiny.Session mutinySession;
 
@@ -29,14 +23,6 @@ public class HibernateReactiveDB2TestEndpoint {
     @Inject
     DB2Pool db2Pool;
 
-    @GET
-    @Path("/reactiveFind")
-    public CompletionStage<GuineaPig> reactiveFind() {
-        final GuineaPig expectedPig = new GuineaPig(5, "Aloi");
-        return populateDB().convert().toCompletionStage()
-                .thenCompose(junk -> stageSession.find(GuineaPig.class, expectedPig.getId()));
-    }
-
     @GET
     @Path("/reactiveFindMutiny")
     public Uni<GuineaPig> reactiveFindMutiny() {
diff --git a/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTest.java b/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTest.java
index 291a5d18d5d..566585f4587 100644
--- a/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTest.java
+++ b/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2AlternativeTest.java
@@ -13,14 +13,6 @@
 @QuarkusTest
 public class HibernateReactiveDB2AlternativeTest {
 
-    @Test
-    public void reactiveFind() {
-        RestAssured.when()
-                .get("/alternative-tests/reactiveFind")
-                .then()
-                .body(is("{\\"id\\":5,\\"name\\":\\"Aloi\\"}"));
-    }
-
     @Test
     public void reactiveFindMutiny() {
         RestAssured.when()
diff --git a/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2Test.java b/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2Test.java
index 8007e0d770d..29c2bc4c3a1 100644
--- a/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2Test.java
+++ b/integration-tests/hibernate-reactive-db2/src/test/java/io/quarkus/it/hibernate/reactive/db2/HibernateReactiveDB2Test.java
@@ -13,14 +13,6 @@
 @QuarkusTest
 public class HibernateReactiveDB2Test {
 
-    @Test
-    public void reactiveFind() {
-        RestAssured.when()
-                .get("/tests/reactiveFind")
-                .then()
-                .body(is("{\\"id\\":5,\\"name\\":\\"Aloi\\"}"));
-    }
-
     @Test
     public void reactiveFindMutiny() {
         RestAssured.when()
diff --git a/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTestEndpoint.java b/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTestEndpoint.java
index c9048f764b1..1a8b7c51377 100644
--- a/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTestEndpoint.java
+++ b/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTestEndpoint.java
@@ -1,13 +1,10 @@
 package io.quarkus.it.hibernate.reactive.mysql;
 
-import java.util.concurrent.CompletionStage;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.smallrye.mutiny.Uni;
 import io.vertx.mutiny.mysqlclient.MySQLPool;
@@ -18,9 +15,6 @@
 @Path("/alternative-tests")
 public class HibernateReactiveMySQLAlternativeTestEndpoint {
 
-    @Inject
-    Stage.Session stageSession;
-
     @Inject
     Mutiny.Session mutinySession;
 
@@ -29,14 +23,6 @@ public class HibernateReactiveMySQLAlternativeTestEndpoint {
     @Inject
     MySQLPool mysqlPool;
 
-    @GET
-    @Path("/reactiveFind")
-    public CompletionStage<GuineaPig> reactiveFind() {
-        final GuineaPig expectedPig = new GuineaPig(5, "Aloi");
-        return populateDB().convert().toCompletionStage()
-                .thenCompose(junk -> stageSession.find(GuineaPig.class, expectedPig.getId()));
-    }
-
     @GET
     @Path("/reactiveFindMutiny")
     public Uni<GuineaPig> reactiveFindMutiny() {
diff --git a/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTestEndpoint.java b/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTestEndpoint.java
index 1c144be731a..84a90a6cd4e 100644
--- a/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTestEndpoint.java
+++ b/integration-tests/hibernate-reactive-mysql/src/main/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTestEndpoint.java
@@ -1,13 +1,10 @@
 package io.quarkus.it.hibernate.reactive.mysql;
 
-import java.util.concurrent.CompletionStage;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.smallrye.mutiny.Uni;
 import io.vertx.mutiny.mysqlclient.MySQLPool;
@@ -18,9 +15,6 @@
 @Path("/tests")
 public class HibernateReactiveMySQLTestEndpoint {
 
-    @Inject
-    Stage.Session stageSession;
-
     @Inject
     Mutiny.Session mutinySession;
 
@@ -29,14 +23,6 @@ public class HibernateReactiveMySQLTestEndpoint {
     @Inject
     MySQLPool mysqlPool;
 
-    @GET
-    @Path("/reactiveFind")
-    public CompletionStage<GuineaPig> reactiveFind() {
-        final GuineaPig expectedPig = new GuineaPig(5, "Aloi");
-        return populateDB().convert().toCompletionStage()
-                .thenCompose(junk -> stageSession.find(GuineaPig.class, expectedPig.getId()));
-    }
-
     @GET
     @Path("/reactiveFindMutiny")
     public Uni<GuineaPig> reactiveFindMutiny() {
diff --git a/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTest.java b/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTest.java
index c98b4377b35..b583e1dc79c 100644
--- a/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTest.java
+++ b/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLAlternativeTest.java
@@ -13,14 +13,6 @@
 @QuarkusTest
 public class HibernateReactiveMySQLAlternativeTest {
 
-    @Test
-    public void reactiveFind() {
-        RestAssured.when()
-                .get("/alternative-tests/reactiveFind")
-                .then()
-                .body(is("{\\"id\\":5,\\"name\\":\\"Aloi\\"}"));
-    }
-
     @Test
     public void reactiveFindMutiny() {
         RestAssured.when()
diff --git a/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTest.java b/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTest.java
index d6e2eaee65a..2636432990c 100644
--- a/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTest.java
+++ b/integration-tests/hibernate-reactive-mysql/src/test/java/io/quarkus/it/hibernate/reactive/mysql/HibernateReactiveMySQLTest.java
@@ -13,14 +13,6 @@
 @QuarkusTest
 public class HibernateReactiveMySQLTest {
 
-    @Test
-    public void reactiveFind() {
-        RestAssured.when()
-                .get("/tests/reactiveFind")
-                .then()
-                .body(is("{\\"id\\":5,\\"name\\":\\"Aloi\\"}"));
-    }
-
     @Test
     public void reactiveFindMutiny() {
         RestAssured.when()
diff --git a/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpoint.java b/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpoint.java
index e3fa12b9c81..9e2f53d5533 100644
--- a/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpoint.java
+++ b/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpoint.java
@@ -1,13 +1,10 @@
 package io.quarkus.it.hibernate.reactive.postgresql;
 
-import java.util.concurrent.CompletionStage;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.smallrye.mutiny.Uni;
 import io.vertx.mutiny.pgclient.PgPool;
@@ -18,9 +15,6 @@
 @Path("/tests")
 public class HibernateReactiveTestEndpoint {
 
-    @Inject
-    Stage.Session stageSession;
-
     @Inject
     Mutiny.Session mutinySession;
 
@@ -29,14 +23,6 @@ public class HibernateReactiveTestEndpoint {
     @Inject
     PgPool pgPool;
 
-    @GET
-    @Path("/reactiveFind")
-    public CompletionStage<GuineaPig> reactiveFind() {
-        final GuineaPig expectedPig = new GuineaPig(5, "Aloi");
-        return populateDB().convert().toCompletionStage()
-                .thenCompose(junk -> stageSession.find(GuineaPig.class, expectedPig.getId()));
-    }
-
     @GET
     @Path("/reactiveFindMutiny")
     public Uni<GuineaPig> reactiveFindMutiny() {
diff --git a/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointAlternative.java b/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointAlternative.java
index f0551267f32..ec7542caea5 100644
--- a/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointAlternative.java
+++ b/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointAlternative.java
@@ -1,13 +1,10 @@
 package io.quarkus.it.hibernate.reactive.postgresql;
 
-import java.util.concurrent.CompletionStage;
-
 import javax.inject.Inject;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.smallrye.mutiny.Uni;
 import io.vertx.mutiny.pgclient.PgPool;
@@ -18,9 +15,6 @@
 @Path("/alternative-tests")
 public class HibernateReactiveTestEndpointAlternative {
 
-    @Inject
-    Stage.Session stageSession;
-
     @Inject
     Mutiny.Session mutinySession;
 
@@ -29,14 +23,6 @@ public class HibernateReactiveTestEndpointAlternative {
     @Inject
     PgPool pgPool;
 
-    @GET
-    @Path("/reactiveFind")
-    public CompletionStage<GuineaPig> reactiveFind() {
-        final GuineaPig expectedPig = new GuineaPig(5, "Aloi");
-        return populateDB().convert().toCompletionStage()
-                .thenCompose(junk -> stageSession.find(GuineaPig.class, expectedPig.getId()));
-    }
-
     @GET
     @Path("/reactiveFindMutiny")
     public Uni<GuineaPig> reactiveFindMutiny() {
diff --git a/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointFetchLazy.java b/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointFetchLazy.java
index 8f8fdc87f9f..ff1b103592e 100644
--- a/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointFetchLazy.java
+++ b/integration-tests/hibernate-reactive-postgresql/src/main/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTestEndpointFetchLazy.java
@@ -1,7 +1,6 @@
 package io.quarkus.it.hibernate.reactive.postgresql;
 
 import java.util.Collection;
-import java.util.concurrent.CompletionStage;
 
 import javax.inject.Inject;
 import javax.ws.rs.GET;
@@ -10,7 +9,6 @@
 import javax.ws.rs.PathParam;
 
 import org.hibernate.reactive.mutiny.Mutiny;
-import org.hibernate.reactive.stage.Stage;
 
 import io.quarkus.it.hibernate.reactive.postgresql.lazy.Author;
 import io.quarkus.it.hibernate.reactive.postgresql.lazy.Book;
@@ -24,11 +22,6 @@ public class HibernateReactiveTestEndpointFetchLazy {
     @Inject
     Mutiny.Session mutinySession;
 
-    // I'm using the factory because there are some issues with an injected Stage.Session
-    // See issue https://github.com/quarkusio/quarkus/issues/14812
-    @Inject
-    Stage.SessionFactory stageSessionFactory;
-
     // Injecting a Vert.x Pool is not required, It's used to
     // independently validate the contents of the database for the test
     @Inject
@@ -41,14 +34,6 @@ public Uni<Collection<Book>> findBooksWithMutiny(@PathParam("authorId") Integer
                 .chain(author -> Mutiny.fetch(author.getBooks()));
     }
 
-    @GET
-    @Path("/findBooksWithStage/{authorId}")
-    public CompletionStage<Collection<Book>> findBooksWithStage(@PathParam("authorId") Integer authorId) {
-        return stageSessionFactory.withTransaction((session, tx) -> session
-                .find(Author.class, authorId)
-                .thenCompose(author -> Stage.fetch(author.getBooks())));
-    }
-
     @POST
     @Path("/prepareDb")
     public Uni<String> prepareDb() {
diff --git a/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveAlternativeTest.java b/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveAlternativeTest.java
index 9d5e37ada5a..eb795124133 100644
--- a/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveAlternativeTest.java
+++ b/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveAlternativeTest.java
@@ -15,14 +15,6 @@
 @TestHTTPEndpoint(HibernateReactiveTestEndpointAlternative.class)
 public class HibernateReactiveAlternativeTest {
 
-    @Test
-    public void reactiveFind() {
-        RestAssured.when()
-                .get("/reactiveFind")
-                .then()
-                .body(is("{\\"id\\":5,\\"name\\":\\"Aloi\\"}"));
-    }
-
     @Test
     public void reactiveFindMutiny() {
         RestAssured.when()
diff --git a/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveFetchLazyTest.java b/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveFetchLazyTest.java
index 38cd5a0e82f..1cb288ff860 100644
--- a/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveFetchLazyTest.java
+++ b/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveFetchLazyTest.java
@@ -32,20 +32,6 @@ public void fetchAfterFindWithMutiny() {
         assertTitles(response, "Cryptonomicon", "Snow Crash");
     }
 
-    @Test
-    public void fetchAfterFindWithWithStage() {
-        RestAssured.when()
-                .post("/prepareDb")
-                .then()
-                .body(is("Neal Stephenson"));
-
-        Response response = RestAssured.when()
-                .get("/findBooksWithStage/567")
-                .then()
-                .extract().response();
-        assertTitles(response, "Cryptonomicon", "Snow Crash");
-    }
-
     private void assertTitles(Response response, String... expectedTitles) {
         List<Object> titles = response.jsonPath().getList("title").stream().sorted().collect(toList());
         assertIterableEquals(asList(expectedTitles), titles);
diff --git a/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTest.java b/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTest.java
index 89fe03fbc06..b489a2ee142 100644
--- a/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTest.java
+++ b/integration-tests/hibernate-reactive-postgresql/src/test/java/io/quarkus/it/hibernate/reactive/postgresql/HibernateReactiveTest.java
@@ -16,14 +16,6 @@
 @TestHTTPEndpoint(HibernateReactiveTestEndpoint.class)
 public class HibernateReactiveTest {
 
-    @Test
-    public void reactiveFind() {
-        RestAssured.when()
-                .get("/reactiveFind")
-                .then()
-                .body(is("{\\"id\\":5,\\"name\\":\\"Aloi\\"}"));
-    }
-
     @Test
     public void reactiveCowPersist() {
         RestAssured.when()