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