Repository: quarkusio/quarkus
Issue: quarkus-reactive-routes fails when using Mutiny.SessionFactory.withSession

### Describe the bug

quarkus-reactive-routes based code fails when using Mutiny.SessionFactory.withSession

hibernate-reactive-routes-quickstart is failing since https://github.com/quarkusio/quarkus/pull/23719 got merged
Code link https://github.com/quarkusio/quarkus-quickstarts/blob/main/hibernate-reactive-routes-quickstart/src/main/java/org/acme/hibernate/reactive/FruitsRoutes.java#L39 

```
2022-03-01 10:27:25,791 ERROR [org.acm.hib.rea.FruitsRoutes] (vert.x-eventloop-thread-1) Failed to handle request: java.lang.IllegalStateException: The current operation requires a safe (isolated) Vert.x sub-context, but the current context hasn't been flagged as such. You can still use Hibernate Reactive, you just need to avoid using the methods which implicitly require accessing the stateful context, such as MutinySessionFactory#withTransaction and #withSession.
	at io.quarkus.vertx.core.runtime.context.VertxContextSafetyToggle.checkIsSafe(VertxContextSafetyToggle.java:80)
	at io.quarkus.vertx.core.runtime.context.VertxContextSafetyToggle.validateContextIfExists(VertxContextSafetyToggle.java:63)
	at io.quarkus.hibernate.reactive.runtime.customized.CheckingVertxContext.get(CheckingVertxContext.java:46)
	at org.hibernate.reactive.mutiny.impl.MutinySessionFactoryImpl.withSession(MutinySessionFactoryImpl.java:189)
	at org.acme.hibernate.reactive.FruitsRoutes.getAll(FruitsRoutes.java:39)
...
```

Zulip chat - https://quarkusio.zulipchat.com/#narrow/stream/187038-dev/topic/hibernate-reactive-routes-quickstart/near/273641831
Conclusion: the vert.x http server didn't mark the context as safe


### Expected behavior

hibernate-reactive-routes-quickstart is passing 

### Actual behavior

hibernate-reactive-routes-quickstart is failing 

### How to Reproduce?

Run hibernate-reactive-routes-quickstart

### Output of `uname -a` or `ver`

macOS Monterey

### Output of `java -version`

Java 17

### GraalVM version (if different from Java)

_No response_

### Quarkus version or git rev

Quarkus main

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)

_No response_

### Additional information

_No response_

Changed files:
extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/supports/context/GrpcDuplicatedContextGrpcInterceptor.java
extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/vertx/InstrumenterVertxTracer.java
extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxHttpRecorder.java

diff --git a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/supports/context/GrpcDuplicatedContextGrpcInterceptor.java b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/supports/context/GrpcDuplicatedContextGrpcInterceptor.java
index b6f0938dafe..21d7b0ee422 100644
--- a/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/supports/context/GrpcDuplicatedContextGrpcInterceptor.java
+++ b/extensions/grpc/runtime/src/main/java/io/quarkus/grpc/runtime/supports/context/GrpcDuplicatedContextGrpcInterceptor.java
@@ -1,5 +1,7 @@
 package io.quarkus.grpc.runtime.supports.context;
 
+import static io.quarkus.vertx.core.runtime.context.VertxContextSafetyToggle.setContextSafe;
+
 import java.util.function.Supplier;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -39,6 +41,7 @@ public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, Re
         if (capturedVertxContext != null) {
             // If we are not on a duplicated context, create and switch.
             Context local = VertxContext.getOrCreateDuplicatedContext(capturedVertxContext);
+            setContextSafe(local, true);
 
             // Must be sure to call next.startCall on the right context
             return new ListenedOnDuplicatedContext<>(() -> next.startCall(call, headers), local);
diff --git a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/vertx/InstrumenterVertxTracer.java b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/vertx/InstrumenterVertxTracer.java
index 7bfd07b10bb..294c0205162 100644
--- a/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/vertx/InstrumenterVertxTracer.java
+++ b/extensions/opentelemetry/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/vertx/InstrumenterVertxTracer.java
@@ -1,5 +1,7 @@
 package io.quarkus.opentelemetry.runtime.tracing.vertx;
 
+import static io.quarkus.vertx.core.runtime.context.VertxContextSafetyToggle.setContextSafe;
+
 import java.util.Map;
 import java.util.function.BiConsumer;
 
@@ -91,6 +93,7 @@ default <R> SpanOperation sendRequest(
             io.opentelemetry.context.Context spanContext = instrumenter.start(parentContext,
                     writableHeaders((REQ) request, headers));
             Context duplicatedContext = VertxContext.getOrCreateDuplicatedContext(context);
+            setContextSafe(duplicatedContext, true);
             Scope scope = QuarkusContextStorage.INSTANCE.attach(duplicatedContext, spanContext);
             return spanOperation(duplicatedContext, (REQ) request, toMultiMap(headers), spanContext, scope);
         }
diff --git a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxHttpRecorder.java b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxHttpRecorder.java
index 929b1088030..adeb4a57192 100644
--- a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxHttpRecorder.java
+++ b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/VertxHttpRecorder.java
@@ -1,5 +1,8 @@
 package io.quarkus.vertx.http.runtime;
 
+import static io.quarkus.vertx.core.runtime.context.VertxContextSafetyToggle.setContextSafe;
+import static io.quarkus.vertx.core.runtime.context.VertxContextSafetyToggle.setCurrentContextSafe;
+
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
@@ -488,6 +491,7 @@ public void handle(HttpServerRequest event) {
         root = new Handler<HttpServerRequest>() {
             @Override
             public void handle(HttpServerRequest event) {
+                setCurrentContextSafe(true);
                 delegate.handle(new ResumingRequestWrapper(event));
             }
         };
@@ -1209,7 +1213,12 @@ public void initChannel(VirtualChannel ch) throws Exception {
                         VertxHandler<Http1xServerConnection> handler = VertxHandler.create(chctx -> {
 
                             Http1xServerConnection conn = new Http1xServerConnection(
-                                    () -> (ContextInternal) VertxContext.getOrCreateDuplicatedContext(context),
+                                    () -> {
+                                        ContextInternal internal = (ContextInternal) VertxContext
+                                                .getOrCreateDuplicatedContext(context);
+                                        setContextSafe(internal, true);
+                                        return internal;
+                                    },
                                     null,
                                     new HttpServerOptions(),
                                     chctx,