This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 12a5987235f60cbbe24c42a1e1411f12105ed441
Author: Matthieu Baechler <matth...@apache.org>
AuthorDate: Thu Apr 23 12:13:12 2020 +0200

    JAMES-3065 remove remaining usages of Reactor types in public api
---
 .../cassandra/utils/CassandraHealthCheckTest.java  |  8 +++---
 .../es/ElasticSearchHealthCheckConnectionTest.java |  4 +--
 .../backends/rabbitmq/RabbitMQHealthCheckTest.java | 28 ++++++++++----------
 core/pom.xml                                       |  4 +++
 .../apache/james/core/healthcheck/HealthCheck.java | 10 +-------
 mailbox/api/pom.xml                                |  4 +++
 .../EventDeadLettersHealthCheckContract.java       | 30 +++++++++++-----------
 metrics/metrics-tests/pom.xml                      |  4 +++
 .../apache/james/PeriodicalHealthChecksTest.java   |  2 +-
 server/data/data-jmap/pom.xml                      |  4 +++
 .../MessageFastViewProjectionHealthCheck.java      | 20 +++++++++------
 .../MessageFastViewProjectionHealthCheckTest.java  | 26 +++++++++----------
 .../james/jpa/healthcheck/JPAHealthCheck.java      | 24 +++++++++--------
 .../james/jpa/healthcheck/JPAHealthCheckTest.java  |  4 +--
 .../james/webadmin/routes/HealthCheckRoutes.java   | 17 ++++++------
 .../webadmin/routes/HealthCheckRoutesTest.java     |  6 +++--
 16 files changed, 107 insertions(+), 88 deletions(-)

diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java
index c37f641..1796033 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java
@@ -49,7 +49,7 @@ class CassandraHealthCheckTest {
 
     @Test
     void checkShouldReturnHealthyWhenCassandraIsRunning() {
-        Result check = healthCheck.check();
+        Result check = healthCheck.checkReactive().block();
 
         assertThat(check.isHealthy()).isTrue();
     }
@@ -58,7 +58,7 @@ class CassandraHealthCheckTest {
     void 
checkShouldReturnUnhealthyWhenCassandraIsNotRunning(DockerCassandraExtension.DockerCassandra
 cassandraServer) {
         try {
             cassandraServer.getContainer().pause();
-            Result check = healthCheck.check();
+            Result check = healthCheck.checkReactive().block();
 
             assertThat(check.isUnHealthy()).isTrue();
         } finally {
@@ -72,12 +72,12 @@ class CassandraHealthCheckTest {
         try {
             cassandraServer.getContainer().pause();
 
-            healthCheck.check();
+            healthCheck.checkReactive().block();
         } finally {
             cassandraServer.getContainer().unpause();
         }
 
-        Result check = healthCheck.check();
+        Result check = healthCheck.checkReactive().block();
 
         assertThat(check.isHealthy()).isTrue();
     }
diff --git 
a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java
 
b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java
index 0f5ddd6..0dc6530 100644
--- 
a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java
+++ 
b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchHealthCheckConnectionTest.java
@@ -44,7 +44,7 @@ class ElasticSearchHealthCheckConnectionTest {
 
     @Test
     void checkShouldSucceedWhenElasticSearchIsRunning() {
-        assertThat(elasticSearchHealthCheck.check().isHealthy()).isTrue();
+        
assertThat(elasticSearchHealthCheck.checkReactive().block().isHealthy()).isTrue();
     }
 
     @Test
@@ -53,7 +53,7 @@ class ElasticSearchHealthCheckConnectionTest {
         elasticSearch.getDockerElasticSearch().pause();
 
         try {
-            
assertThat(elasticSearchHealthCheck.check().isUnHealthy()).isTrue();
+            
assertThat(elasticSearchHealthCheck.checkReactive().block().isUnHealthy()).isTrue();
         } finally {
             elasticSearch.getDockerElasticSearch().unpause();
         }
diff --git 
a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
 
b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
index 769741a..f205bc7 100644
--- 
a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
+++ 
b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
@@ -46,21 +46,21 @@ class RabbitMQHealthCheckTest {
 
     @Test
     void checkShouldReturnHealthyWhenRabbitMQIsRunning() {
-        Result check = healthCheck.check();
+        Result check = healthCheck.checkReactive().block();
 
         assertThat(check.isHealthy()).isTrue();
     }
 
     @Test
     void checkShouldReturnHealthyWhenCalledSeveralTime() {
-        healthCheck.check();
-        healthCheck.check();
-        healthCheck.check();
-        healthCheck.check();
-        healthCheck.check();
-        healthCheck.check();
-        healthCheck.check();
-        Result check = healthCheck.check();
+        healthCheck.checkReactive().block();
+        healthCheck.checkReactive().block();
+        healthCheck.checkReactive().block();
+        healthCheck.checkReactive().block();
+        healthCheck.checkReactive().block();
+        healthCheck.checkReactive().block();
+        healthCheck.checkReactive().block();
+        Result check = healthCheck.checkReactive().block();
 
         assertThat(check.isHealthy()).isTrue();
     }
@@ -69,7 +69,7 @@ class RabbitMQHealthCheckTest {
     void checkShouldReturnUnhealthyWhenRabbitMQIsNotRunning(DockerRabbitMQ 
rabbitMQ) throws Exception {
         rabbitMQ.stopApp();
 
-        Result check = healthCheck.check();
+        Result check = healthCheck.checkReactive().block();
 
         assertThat(check.isHealthy()).isFalse();
     }
@@ -77,21 +77,21 @@ class RabbitMQHealthCheckTest {
     @Test
     void checkShouldDetectWhenRabbitMQRecovered(DockerRabbitMQ rabbitMQ) 
throws Exception {
         rabbitMQ.stopApp();
-        healthCheck.check();
+        healthCheck.checkReactive().block();
 
         rabbitMQ.startApp();
 
-        Result check = healthCheck.check();
+        Result check = healthCheck.checkReactive().block();
         assertThat(check.isHealthy()).isTrue();
     }
 
     @Test
     void checkShouldDetectWhenRabbitMQFail(DockerRabbitMQ rabbitMQ) throws 
Exception {
-        healthCheck.check();
+        healthCheck.checkReactive().block();
 
         rabbitMQ.stopApp();
 
-        Result check = healthCheck.check();
+        Result check = healthCheck.checkReactive().block();
         assertThat(check.isHealthy()).isFalse();
     }
 }
\ No newline at end of file
diff --git a/core/pom.xml b/core/pom.xml
index 0127fea..48f4e33 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -66,6 +66,10 @@
             <artifactId>commons-io</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.reactivestreams</groupId>
+            <artifactId>reactive-streams</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
diff --git 
a/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java 
b/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java
index effd3c6..4f0bd4b 100644
--- a/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java
+++ b/core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java
@@ -20,16 +20,8 @@ package org.apache.james.core.healthcheck;
 
 import org.reactivestreams.Publisher;
 
-import reactor.core.publisher.Mono;
-
 public interface HealthCheck {
     ComponentName componentName();
 
-    default Result check() {
-        return Mono.from(checkReactive()).block();
-    }
-
-    default Publisher<Result> checkReactive() {
-        return Mono.fromCallable(this::check);
-    }
+    Publisher<Result> checkReactive();
 }
diff --git a/mailbox/api/pom.xml b/mailbox/api/pom.xml
index 7ce79e2..dc16b36 100644
--- a/mailbox/api/pom.xml
+++ b/mailbox/api/pom.xml
@@ -84,6 +84,10 @@
             <artifactId>commons-io</artifactId>
         </dependency>
         <dependency>
+            <groupId>io.projectreactor</groupId>
+            <artifactId>reactor-core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>javax.inject</groupId>
             <artifactId>javax.inject</artifactId>
         </dependency>
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java
index 6d1c49c..73d4f39 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventDeadLettersHealthCheckContract.java
@@ -57,8 +57,8 @@ interface EventDeadLettersHealthCheckContract {
 
     @Test
     default void checkShouldReturnHealthyWhenEventDeadLetterEmpty() {
-        assertThat(testee().check().isHealthy()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isHealthy()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.healthy(COMPONENT_NAME));
     }
 
@@ -66,8 +66,8 @@ interface EventDeadLettersHealthCheckContract {
     default void checkShouldReturnDegradedWhenEventDeadLetterContainEvent() {
         eventDeadLetters().store(GROUP_A, EVENT_1).block();
 
-        assertThat(testee().check().isDegraded()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isDegraded()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.degraded(COMPONENT_NAME, 
EXPECTED_DEGRADED_MESSAGE));
     }
 
@@ -76,8 +76,8 @@ interface EventDeadLettersHealthCheckContract {
         eventDeadLetters().store(GROUP_A, EVENT_1).block();
         eventDeadLetters().store(GROUP_B, EVENT_2).block();
 
-        assertThat(testee().check().isDegraded()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isDegraded()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.degraded(COMPONENT_NAME, 
EXPECTED_DEGRADED_MESSAGE));
     }
 
@@ -86,15 +86,15 @@ interface EventDeadLettersHealthCheckContract {
         EventDeadLetters.InsertionId insertionId1 = 
eventDeadLetters().store(GROUP_A, EVENT_1).block();
         EventDeadLetters.InsertionId insertionId2 = 
eventDeadLetters().store(GROUP_B, EVENT_2).block();
 
-        assertThat(testee().check().isDegraded()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isDegraded()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.degraded(COMPONENT_NAME, 
EXPECTED_DEGRADED_MESSAGE));
 
         eventDeadLetters().remove(GROUP_A, insertionId1).block();
         eventDeadLetters().remove(GROUP_B, insertionId2).block();
 
-        assertThat(testee().check().isHealthy()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isHealthy()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.healthy(COMPONENT_NAME));
     }
 
@@ -103,14 +103,14 @@ interface EventDeadLettersHealthCheckContract {
         EventDeadLetters.InsertionId insertionId1 = 
eventDeadLetters().store(GROUP_A, EVENT_1).block();
         eventDeadLetters().store(GROUP_B, EVENT_2).block();
 
-        assertThat(testee().check().isDegraded()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isDegraded()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.degraded(COMPONENT_NAME, 
EXPECTED_DEGRADED_MESSAGE));
 
         eventDeadLetters().remove(GROUP_A, insertionId1).block();
 
-        assertThat(testee().check().isDegraded()).isTrue();
-        assertThat(testee().check())
+        assertThat(testee().checkReactive().block().isDegraded()).isTrue();
+        assertThat(testee().checkReactive().block())
             .isEqualTo(Result.degraded(COMPONENT_NAME, 
EXPECTED_DEGRADED_MESSAGE));
     }
 
@@ -119,7 +119,7 @@ interface EventDeadLettersHealthCheckContract {
         Result actualResult;
         try {
             createErrorWhenDoingHealthCheck();
-            actualResult = testee().check();
+            actualResult = testee().checkReactive().block();
         } finally {
             resolveErrorWhenDoingHealthCheck();
         }
diff --git a/metrics/metrics-tests/pom.xml b/metrics/metrics-tests/pom.xml
index 69f0432..c8971d6 100644
--- a/metrics/metrics-tests/pom.xml
+++ b/metrics/metrics-tests/pom.xml
@@ -58,5 +58,9 @@
             <groupId>com.github.steveash.guavate</groupId>
             <artifactId>guavate</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.projectreactor</groupId>
+            <artifactId>reactor-core</artifactId>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
index 6819ebe..8627197 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
@@ -95,7 +95,7 @@ public class PeriodicalHealthChecksTest {
 
     @Test
     void startShouldCallRemainingHealthChecksWhenAHealthCheckThrows() {
-        when(mockHealthCheck1.check()).thenThrow(new RuntimeException());
+        
when(mockHealthCheck1.checkReactive()).thenReturn(Mono.error(RuntimeException::new));
 
         testee.start();
 
diff --git a/server/data/data-jmap/pom.xml b/server/data/data-jmap/pom.xml
index 2811569..e913193 100644
--- a/server/data/data-jmap/pom.xml
+++ b/server/data/data-jmap/pom.xml
@@ -85,6 +85,10 @@
             <artifactId>guava</artifactId>
         </dependency>
         <dependency>
+            <groupId>io.projectreactor</groupId>
+            <artifactId>reactor-core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>javax.inject</groupId>
             <artifactId>javax.inject</artifactId>
         </dependency>
diff --git 
a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java
 
b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java
index de18851..61c5f79 100644
--- 
a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java
+++ 
b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java
@@ -30,6 +30,8 @@ import org.apache.james.core.healthcheck.Result;
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.metrics.api.MetricFactory;
 
+import reactor.core.publisher.Mono;
+
 public class MessageFastViewProjectionHealthCheck implements HealthCheck {
 
     private static final ComponentName COMPONENT_NAME = new 
ComponentName("MessageFastViewProjection");
@@ -50,14 +52,16 @@ public class MessageFastViewProjectionHealthCheck 
implements HealthCheck {
     }
 
     @Override
-    public Result check() {
-        long hitCount = retrieveHitCountMetric.getCount();
-        long missCount = retrieveMissCountMetric.getCount();
-
-        if (missCount == 0) {
-            return Result.healthy(COMPONENT_NAME);
-        }
-        return check(hitCount, missCount);
+    public Mono<Result> checkReactive() {
+        return Mono.fromCallable(() -> retrieveMissCountMetric.getCount())
+            .flatMap(missCount -> {
+                if (missCount == 0) {
+                    return Mono.just(Result.healthy(COMPONENT_NAME));
+                } else {
+                    return Mono.fromCallable(() -> 
retrieveHitCountMetric.getCount())
+                        .map(hitCount -> check(hitCount, missCount));
+                }
+            });
     }
 
     private Result check(long hitCount, long missCount) {
diff --git 
a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java
 
b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java
index b9888e7..f7ac3fa 100644
--- 
a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java
+++ 
b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java
@@ -62,7 +62,7 @@ class MessageFastViewProjectionHealthCheckTest {
 
         @Test
         void checkShouldReturnHealthyWhenNoRetrieveCalled() {
-            assertThat(testee.check())
+            assertThat(testee.checkReactive().block())
                 .isEqualTo(Result.healthy(COMPONENT_NAME));
         }
 
@@ -71,7 +71,7 @@ class MessageFastViewProjectionHealthCheckTest {
             missMetric.increment();
             missMetric.increment();
 
-            assertThat(testee.check())
+            assertThat(testee.checkReactive().block())
                 .isEqualTo(Result.degraded(COMPONENT_NAME, "retrieveMissCount 
percentage 100.0% (2/2) is higher than the threshold 10.0%"));
         }
 
@@ -80,7 +80,7 @@ class MessageFastViewProjectionHealthCheckTest {
             missMetric.increment();
             hitMetric.add(43);
 
-            assertThat(testee.check())
+            assertThat(testee.checkReactive().block())
                 .isEqualTo(Result.healthy(COMPONENT_NAME));
         }
 
@@ -89,7 +89,7 @@ class MessageFastViewProjectionHealthCheckTest {
             missMetric.increment();
             hitMetric.add(9);
 
-            assertThat(testee.check())
+            assertThat(testee.checkReactive().block())
                 .isEqualTo(Result.healthy(COMPONENT_NAME));
         }
 
@@ -98,7 +98,7 @@ class MessageFastViewProjectionHealthCheckTest {
             missMetric.increment();
             hitMetric.add(3);
 
-            assertThat(testee.check())
+            assertThat(testee.checkReactive().block())
                 .isEqualTo(Result.degraded(COMPONENT_NAME,
                     "retrieveMissCount percentage 25.0% (1/4) is higher than 
the threshold 10.0%"));
         }
@@ -107,11 +107,11 @@ class MessageFastViewProjectionHealthCheckTest {
         void checkShouldReturnHealthyAfterMoreHits() {
             missMetric.increment();
             hitMetric.increment();
-            Result resultWithLessHit = testee.check();
+            Result resultWithLessHit = testee.checkReactive().block();
 
             // more hits
             hitMetric.add(10);
-            Result resultWithMoreHit = testee.check();
+            Result resultWithMoreHit = testee.checkReactive().block();
 
             SoftAssertions.assertSoftly(softly -> {
                 softly.assertThat(resultWithLessHit)
@@ -126,11 +126,11 @@ class MessageFastViewProjectionHealthCheckTest {
         void checkShouldKeepBeingDegradedAfterNotEnoughOfHits() {
             missMetric.increment();
             hitMetric.increment();
-            Result resultWithLessHit = testee.check();
+            Result resultWithLessHit = testee.checkReactive().block();
 
             // more hits, but not enough
             hitMetric.add(3);
-            Result resultWithMoreHit = testee.check();
+            Result resultWithMoreHit = testee.checkReactive().block();
 
             SoftAssertions.assertSoftly(softly -> {
                 softly.assertThat(resultWithLessHit)
@@ -148,11 +148,11 @@ class MessageFastViewProjectionHealthCheckTest {
             // enough of hits
             hitMetric.add(10);
 
-            Result resultWithEnoughOfHits = testee.check();
+            Result resultWithEnoughOfHits = testee.checkReactive().block();
 
             // more miss
             missMetric.increment();
-            Result resultWithMoreMiss = testee.check();
+            Result resultWithMoreMiss = testee.checkReactive().block();
 
             SoftAssertions.assertSoftly(softly -> {
                 softly.assertThat(resultWithEnoughOfHits)
@@ -168,12 +168,12 @@ class MessageFastViewProjectionHealthCheckTest {
             missMetric.increment();
             // enough of hits
             hitMetric.add(10000);
-            Result resultWithEnoughOfHits = testee.check();
+            Result resultWithEnoughOfHits = testee.checkReactive().block();
 
             // more miss, but not enough
             IntStream.rangeClosed(1, 3)
                 .forEach(counter -> missMetric.increment());
-            Result resultWithMoreMiss = testee.check();
+            Result resultWithMoreMiss = testee.checkReactive().block();
 
             SoftAssertions.assertSoftly(softly -> {
                 softly.assertThat(resultWithEnoughOfHits)
diff --git 
a/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java
 
b/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java
index 8cd1706..281626c 100644
--- 
a/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java
+++ 
b/server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java
@@ -28,6 +28,8 @@ import org.apache.james.core.healthcheck.ComponentName;
 import org.apache.james.core.healthcheck.HealthCheck;
 import org.apache.james.core.healthcheck.Result;
 
+import reactor.core.publisher.Mono;
+
 public class JPAHealthCheck implements HealthCheck {
 
     private final EntityManagerFactory entityManagerFactory;
@@ -43,15 +45,17 @@ public class JPAHealthCheck implements HealthCheck {
     }
 
     @Override
-    public Result check() {
-        try {
-            if (entityManagerFactory.createEntityManager().isOpen()) {
-                return healthy(componentName());
-            }
-        } catch (IllegalStateException stateException) {
-            return unhealthy(componentName(), "EntityManagerFactory or 
EntityManager thrown an IllegalStateException, the connection is unhealthy", 
stateException);
-        }
-
-        return unhealthy(componentName(), "entityManager is not open");
+    public Mono<Result> checkReactive() {
+        return Mono.fromCallable(entityManagerFactory::createEntityManager)
+            .map(entityManager -> entityManager.isOpen())
+            .map(open -> {
+                if (open) {
+                    return healthy(componentName());
+                } else {
+                    return unhealthy(componentName(), "entityManager is not 
open");
+                }
+            })
+            .onErrorResume(IllegalStateException.class,
+                e -> Mono.just(unhealthy(componentName(), 
"EntityManagerFactory or EntityManager thrown an IllegalStateException, the 
connection is unhealthy", e)));
     }
 }
diff --git 
a/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java
 
b/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java
index b749d96..a365abe 100644
--- 
a/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java
+++ 
b/server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java
@@ -46,7 +46,7 @@ class JPAHealthCheckTest {
 
     @Test
     void testWhenActive() {
-        Result result = jpaHealthCheck.check();
+        Result result = jpaHealthCheck.checkReactive().block();
         ResultStatus healthy = ResultStatus.HEALTHY;
         assertThat(result.getStatus()).as("Result %s status should be %s", 
result.getStatus(), healthy)
                 .isEqualTo(healthy);
@@ -57,7 +57,7 @@ class JPAHealthCheckTest {
         jpaTestCluster.getEntityManagerFactory().close();
         Result result = Result.healthy(jpaHealthCheck.componentName());
         try {
-            result = jpaHealthCheck.check();
+            result = jpaHealthCheck.checkReactive().block();
         } catch (IllegalStateException e) {
             fail("The exception of the EMF was not handled property.ยช");
         }
diff --git 
a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java
 
b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java
index 12051af..ce75afa 100644
--- 
a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java
@@ -49,6 +49,8 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
 import spark.HaltException;
 import spark.Request;
 import spark.Response;
@@ -94,7 +96,7 @@ public class HealthCheckRoutes implements PublicRoutes {
             message = "Internal server error - When one check has failed.")
     })
     public Object validateHealthChecks(Request request, Response response) {
-        ImmutableList<Result> results = executeHealthChecks();
+        List<Result> results = executeHealthChecks().collectList().block();
         ResultStatus status = retrieveAggregationStatus(results);
         response.status(getCorrespondingStatusCode(status));
         return new HeathCheckAggregationExecutionResultDto(status, 
mapResultToDto(results));
@@ -119,8 +121,8 @@ public class HealthCheckRoutes implements PublicRoutes {
             .filter(c -> c.componentName().getName().equals(componentName))
             .findFirst()
             .orElseThrow(() -> throw404(componentName));
-        
-        Result result = healthCheck.check();
+
+        Result result = Mono.from(healthCheck.checkReactive()).block();
         logFailedCheck(result);
         response.status(getCorrespondingStatusCode(result.getStatus()));
         return new HealthCheckExecutionResultDto(result);
@@ -175,11 +177,10 @@ public class HealthCheckRoutes implements PublicRoutes {
         }
     }
 
-    private ImmutableList<Result> executeHealthChecks() {
-        return healthChecks.stream()
-            .map(HealthCheck::check)
-            .peek(this::logFailedCheck)
-            .collect(ImmutableList.toImmutableList());
+    private Flux<Result> executeHealthChecks() {
+        return Flux.fromIterable(healthChecks)
+            .flatMap(HealthCheck::checkReactive)
+            .doOnNext(this::logFailedCheck);
     }
 
     private ResultStatus retrieveAggregationStatus(List<Result> results) {
diff --git 
a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java
 
b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java
index 359724d..a394531 100644
--- 
a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java
@@ -41,9 +41,11 @@ import org.eclipse.jetty.http.HttpStatus;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.reactivestreams.Publisher;
 
 import io.restassured.RestAssured;
 import net.javacrumbs.jsonunit.core.Option;
+import reactor.core.publisher.Mono;
 
 public class HealthCheckRoutesTest {
 
@@ -65,8 +67,8 @@ public class HealthCheckRoutesTest {
             }
 
             @Override
-            public Result check() {
-                return result;
+            public Publisher<Result> checkReactive() {
+                return Mono.just(result);
             }
         };
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to