You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/05/22 03:37:05 UTC

[james-project] 01/03: JAMES-2763 Startup check API should be more generic

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 8955b1430ed3c04aa7bab1a87f80f6c657760f68
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 16 10:47:22 2019 +0700

    JAMES-2763 Startup check API should be more generic
---
 .../CassandraSchemaVersionStartUpCheck.java        |   4 +-
 .../modules/mailbox/CassandraSessionModule.java    |   4 +-
 .../org/apache/james/StartUpChecksPerformer.java   |  99 +----------------
 .../apache/james/modules/StartUpChecksModule.java  |   4 +-
 .../apache/james/StartUpChecksPerformerTest.java   |  13 ++-
 .../james/GuiceJamesServerStartUpCheckTest.java    |   2 +-
 server/container/lifecycle-api/pom.xml             |   4 +
 .../apache/james/lifecycle/api/StartUpCheck.java   | 121 +++++++++++++++++++++
 8 files changed, 140 insertions(+), 111 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
index 561b8aa..2c992cb 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
@@ -19,14 +19,14 @@
 
 package org.apache.james.modules.mailbox;
 
-import org.apache.james.StartUpChecksPerformer;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
+import org.apache.james.lifecycle.api.StartUpCheck;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.inject.Inject;
 
-public class CassandraSchemaVersionStartUpCheck implements StartUpChecksPerformer.StartUpCheck {
+public class CassandraSchemaVersionStartUpCheck implements StartUpCheck {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(CassandraSchemaVersionStartUpCheck.class);
     static final String CHECK_NAME = "CassandraSchemaVersionStartUpCheck";
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 951a328..681fa26 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -23,7 +23,6 @@ import java.util.Set;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.StartUpChecksPerformer;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
 import org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory;
@@ -35,6 +34,7 @@ import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
 import org.apache.james.core.healthcheck.HealthCheck;
+import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.server.CassandraProbe;
 import org.apache.james.util.Host;
@@ -74,7 +74,7 @@ public class CassandraSessionModule extends AbstractModule {
         bind(CassandraSchemaVersionManager.class).in(Scopes.SINGLETON);
         bind(CassandraSchemaVersionDAO.class).in(Scopes.SINGLETON);
 
-        Multibinder.newSetBinder(binder(), StartUpChecksPerformer.StartUpCheck.class)
+        Multibinder.newSetBinder(binder(), StartUpCheck.class)
             .addBinding().to(CassandraSchemaVersionStartUpCheck.class);
 
         Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(CassandraProbe.class);
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java b/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java
index cbc52fa..b04f2c3 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java
@@ -20,18 +20,17 @@
 package org.apache.james;
 
 import java.util.List;
-import java.util.Optional;
 import java.util.Set;
 
 import javax.inject.Inject;
 
+import org.apache.james.lifecycle.api.StartUpCheck;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Joiner;
-import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Sets;
 
@@ -74,102 +73,6 @@ public class StartUpChecksPerformer {
         }
     }
 
-    public interface StartUpCheck {
-
-        enum ResultType {
-            GOOD, BAD
-        }
-
-        class CheckResult {
-
-            public static class Builder {
-
-                @FunctionalInterface
-                public interface RequireCheckName {
-                    RequireResultType checkName(String name);
-                }
-
-                @FunctionalInterface
-                public interface RequireResultType {
-                    ReadyToBuild resultType(ResultType resultType);
-                }
-
-                public static class ReadyToBuild {
-                    private final String name;
-                    private final ResultType resultType;
-                    private Optional<String> description;
-
-                    ReadyToBuild(String name, ResultType resultType) {
-                        this.name = name;
-                        this.resultType = resultType;
-                        this.description = Optional.empty();
-                    }
-
-                    public ReadyToBuild description(String description) {
-                        this.description = Optional.ofNullable(description);
-                        return this;
-                    }
-
-                    public CheckResult build() {
-                        return new CheckResult(name, resultType, description);
-                    }
-                }
-
-            }
-
-            public static Builder.RequireCheckName builder() {
-                return name -> resultType -> new Builder.ReadyToBuild(name, resultType);
-            }
-
-            private final String name;
-            private final ResultType resultType;
-            private final Optional<String> description;
-
-            private CheckResult(String name, ResultType resultType, Optional<String> description) {
-                Preconditions.checkNotNull(name);
-                Preconditions.checkNotNull(resultType);
-                Preconditions.checkNotNull(description);
-
-                this.name = name;
-                this.resultType = resultType;
-                this.description = description;
-            }
-
-            public String getName() {
-                return name;
-            }
-
-            public ResultType getResultType() {
-                return resultType;
-            }
-
-            public Optional<String> getDescription() {
-                return description;
-            }
-
-            public boolean isBad() {
-                return resultType.equals(ResultType.BAD);
-            }
-
-            public boolean isGood() {
-                return resultType.equals(ResultType.GOOD);
-            }
-
-            @Override
-            public String toString() {
-                return MoreObjects.toStringHelper(this)
-                    .add("name", name)
-                    .add("resultType", resultType)
-                    .add("description", description)
-                    .toString();
-            }
-        }
-
-        CheckResult check();
-
-        String checkName();
-    }
-
     static class StartUpChecks {
 
         private final Set<StartUpCheck> startUpChecks;
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartUpChecksModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartUpChecksModule.java
index 9f7484d..99cdc8f 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartUpChecksModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/StartUpChecksModule.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.modules;
 
-import org.apache.james.StartUpChecksPerformer;
+import org.apache.james.lifecycle.api.StartUpCheck;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
@@ -28,6 +28,6 @@ public class StartUpChecksModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        Multibinder.newSetBinder(binder(), StartUpChecksPerformer.StartUpCheck.class);
+        Multibinder.newSetBinder(binder(), StartUpCheck.class);
     }
 }
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
index cddb6e9..23abb96 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
@@ -23,15 +23,16 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import org.apache.james.StartUpChecksPerformer.StartUpCheck.CheckResult;
-import org.apache.james.StartUpChecksPerformer.StartUpCheck.ResultType;
+import org.apache.james.lifecycle.api.StartUpCheck;
+import org.apache.james.lifecycle.api.StartUpCheck.CheckResult;
+import org.apache.james.lifecycle.api.StartUpCheck.ResultType;
 import org.junit.jupiter.api.Test;
 
 class StartUpChecksPerformerTest {
 
     private static final CheckResult GOOD_CHECK_1 = CheckResult.builder()
         .checkName("good 1")
-        .resultType(ResultType.GOOD)
+        .resultType(StartUpCheck.ResultType.GOOD)
         .build();
     private static final CheckResult GOOD_CHECK_2 = CheckResult.builder()
         .checkName("good 2")
@@ -46,8 +47,8 @@ class StartUpChecksPerformerTest {
         .resultType(ResultType.BAD)
         .build();
 
-    private static StartUpChecksPerformer.StartUpCheck fromResult(CheckResult checkResult) {
-        return new StartUpChecksPerformer.StartUpCheck() {
+    private static StartUpCheck fromResult(CheckResult checkResult) {
+        return new StartUpCheck() {
 
             @Override
             public CheckResult check() {
@@ -110,7 +111,7 @@ class StartUpChecksPerformerTest {
         String checkName = "throwing check name";
         StartUpChecksPerformer checksPerformer = StartUpChecksPerformer.from(
 
-            new StartUpChecksPerformer.StartUpCheck() {
+            new StartUpCheck() {
                 @Override
                 public CheckResult check() {
                     throw new RuntimeException("unexpected");
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
index ddf136d..61101f4 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
@@ -25,7 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.util.List;
 import java.util.stream.Stream;
 
-import org.apache.james.StartUpChecksPerformer.StartUpCheck;
+import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.BlobExportImplChoice;
diff --git a/server/container/lifecycle-api/pom.xml b/server/container/lifecycle-api/pom.xml
index 7dbc3eb..4c9e47a 100644
--- a/server/container/lifecycle-api/pom.xml
+++ b/server/container/lifecycle-api/pom.xml
@@ -34,6 +34,10 @@
 
     <dependencies>
         <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
             <groupId>commons-configuration</groupId>
             <artifactId>commons-configuration</artifactId>
         </dependency>
diff --git a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
new file mode 100644
index 0000000..87c3420
--- /dev/null
+++ b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
@@ -0,0 +1,121 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.lifecycle.api;
+
+import java.util.Optional;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
+
+public interface StartUpCheck {
+
+    enum ResultType {
+        GOOD, BAD
+    }
+
+    class CheckResult {
+
+        public static class Builder {
+
+            @FunctionalInterface
+            public interface RequireCheckName {
+                RequireResultType checkName(String name);
+            }
+
+            @FunctionalInterface
+            public interface RequireResultType {
+                ReadyToBuild resultType(ResultType resultType);
+            }
+
+            public static class ReadyToBuild {
+                private final String name;
+                private final ResultType resultType;
+                private Optional<String> description;
+
+                ReadyToBuild(String name, ResultType resultType) {
+                    this.name = name;
+                    this.resultType = resultType;
+                    this.description = Optional.empty();
+                }
+
+                public ReadyToBuild description(String description) {
+                    this.description = Optional.ofNullable(description);
+                    return this;
+                }
+
+                public CheckResult build() {
+                    return new CheckResult(name, resultType, description);
+                }
+            }
+
+        }
+
+        public static Builder.RequireCheckName builder() {
+            return name -> resultType -> new Builder.ReadyToBuild(name, resultType);
+        }
+
+        private final String name;
+        private final ResultType resultType;
+        private final Optional<String> description;
+
+        private CheckResult(String name, ResultType resultType, Optional<String> description) {
+            Preconditions.checkNotNull(name);
+            Preconditions.checkNotNull(resultType);
+            Preconditions.checkNotNull(description);
+
+            this.name = name;
+            this.resultType = resultType;
+            this.description = description;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public ResultType getResultType() {
+            return resultType;
+        }
+
+        public Optional<String> getDescription() {
+            return description;
+        }
+
+        public boolean isBad() {
+            return resultType.equals(ResultType.BAD);
+        }
+
+        public boolean isGood() {
+            return resultType.equals(ResultType.GOOD);
+        }
+
+        @Override
+        public String toString() {
+            return MoreObjects.toStringHelper(this)
+                .add("name", name)
+                .add("resultType", resultType)
+                .add("description", description)
+                .toString();
+        }
+    }
+
+    CheckResult check();
+
+    String checkName();
+}


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