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 b48dc9715eaafb681aa4093e7fe60ff5c4dae03a Author: Benoit Tellier <[email protected]> AuthorDate: Wed Oct 2 12:29:22 2019 +0700 JAMES-2904 ClusterBuild should be turned into ClusterFactory Two part of James code were handling default values: the ClusterConfiguration and the ClusterBuilder. This made adding new options complicated. --- .../backends/cassandra/init/ClusterBuilder.java | 178 --------------------- .../backends/cassandra/init/ClusterFactory.java | 87 ++++++++++ .../init/ClusterWithKeyspaceCreatedFactory.java | 36 ----- .../cassandra/init/ResilientClusterProvider.java | 13 +- .../init/configuration/ClusterConfiguration.java | 15 +- .../james/backends/cassandra/CassandraCluster.java | 9 +- .../james/backends/cassandra/DockerCassandra.java | 16 +- ...terBuilderTest.java => ClusterFactoryTest.java} | 9 +- .../SessionWithInitializedTablesFactoryTest.java | 8 +- src/site/xdoc/server/config-cassandra.xml | 4 +- 10 files changed, 118 insertions(+), 257 deletions(-) diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java deleted file mode 100644 index e41c6d6..0000000 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterBuilder.java +++ /dev/null @@ -1,178 +0,0 @@ -/**************************************************************** - * 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.backends.cassandra.init; - -import java.util.Collection; -import java.util.Optional; - -import org.apache.james.backends.cassandra.init.configuration.QueryLoggerConfiguration; -import org.apache.james.util.Host; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.ConsistencyLevel; -import com.datastax.driver.core.PoolingOptions; -import com.datastax.driver.core.QueryOptions; -import com.datastax.driver.core.SocketOptions; -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; - -public class ClusterBuilder { - private static final Logger LOGGER = LoggerFactory.getLogger(ClusterBuilder.class); - private static final String DEFAULT_CLUSTER_IP = "localhost"; - public static final int DEFAULT_CASSANDRA_PORT = 9042; - - public static ClusterBuilder builder() { - return new ClusterBuilder(); - } - - private Optional<String> username; - private Optional<String> password; - - private Optional<Collection<Host>> servers; - - private Optional<QueryLoggerConfiguration> queryLogger; - private Optional<Integer> readTimeoutMillis; - private Optional<Integer> connectTimeoutMillis; - private Optional<PoolingOptions> poolingOptions; - private Optional<Boolean> useSsl; - - private ClusterBuilder() { - username = Optional.empty(); - password = Optional.empty(); - useSsl = Optional.empty(); - - servers = Optional.empty(); - - queryLogger = Optional.empty(); - readTimeoutMillis = Optional.empty(); - connectTimeoutMillis = Optional.empty(); - poolingOptions = Optional.empty(); - } - - public ClusterBuilder username(String username) { - return username(Optional.of(username)); - } - - public ClusterBuilder password(String password) { - return password(Optional.of(password)); - } - - public ClusterBuilder username(Optional<String> username) { - this.username = username; - - return this; - } - - public ClusterBuilder password(Optional<String> password) { - this.password = password; - - return this; - } - - public ClusterBuilder useSsl(boolean useSsl) { - this.useSsl = Optional.of(useSsl); - - return this; - } - - public ClusterBuilder poolingOptions(PoolingOptions poolingOptions) { - this.poolingOptions = Optional.of(poolingOptions); - return this; - } - - public ClusterBuilder poolingOptions(Optional<PoolingOptions> poolingOptions) { - this.poolingOptions = poolingOptions; - return this; - } - - public ClusterBuilder servers(Host... servers) { - this.servers = Optional.of(ImmutableList.copyOf(servers)); - - return this; - } - - public ClusterBuilder servers(Collection<Host> servers) { - this.servers = Optional.of(servers); - - return this; - } - - public ClusterBuilder queryLoggerConfiguration(QueryLoggerConfiguration queryLogger) { - this.queryLogger = Optional.of(queryLogger); - - return this; - } - - public ClusterBuilder readTimeoutMillis(int readTimeoutMillis) { - this.readTimeoutMillis = Optional.of(readTimeoutMillis); - return this; - } - - public ClusterBuilder connectTimeoutMillis(int connectTimeoutMillis) { - this.connectTimeoutMillis = Optional.of(connectTimeoutMillis); - return this; - } - - public Cluster build() { - Preconditions.checkState(username.isPresent() == password.isPresent(), "If you specify username, you must specify password"); - - Cluster.Builder clusterBuilder = Cluster.builder() - .withoutJMXReporting(); - getServers().forEach(server -> clusterBuilder - .addContactPoint(server.getHostName()) - .withPort(server.getPort())); - - username.map(username -> - password.map(password -> - clusterBuilder.withCredentials(username, password))); - - clusterBuilder.withQueryOptions(queryOptions()); - - SocketOptions socketOptions = new SocketOptions(); - readTimeoutMillis.ifPresent(socketOptions::setReadTimeoutMillis); - connectTimeoutMillis.ifPresent(socketOptions::setConnectTimeoutMillis); - clusterBuilder.withSocketOptions(socketOptions); - poolingOptions.ifPresent(clusterBuilder::withPoolingOptions); - - useSsl.filter(b -> b).ifPresent(any -> clusterBuilder.withSSL()); - - Cluster cluster = clusterBuilder.build(); - try { - queryLogger.map(queryLoggerConfiguration -> - cluster.register(queryLoggerConfiguration.getQueryLogger())); - return cluster; - } catch (Exception e) { - cluster.close(); - throw e; - } - } - - private QueryOptions queryOptions() { - return new QueryOptions() - .setConsistencyLevel(ConsistencyLevel.QUORUM); - } - - private Collection<Host> getServers() { - return servers.orElse(ImmutableList.of( - Host.from(DEFAULT_CLUSTER_IP, DEFAULT_CASSANDRA_PORT))); - } -} diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java new file mode 100644 index 0000000..eafd622 --- /dev/null +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java @@ -0,0 +1,87 @@ +/**************************************************************** + * 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.backends.cassandra.init; + +import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; + +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.ConsistencyLevel; +import com.datastax.driver.core.QueryOptions; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.SocketOptions; +import com.google.common.base.Preconditions; + +public class ClusterFactory { + public static Cluster create(ClusterConfiguration configuration) { + Preconditions.checkState(configuration.getUsername().isPresent() == configuration.getPassword().isPresent(), "If you specify username, you must specify password"); + + Cluster.Builder clusterBuilder = Cluster.builder() + .withoutJMXReporting(); + configuration.getHosts().forEach(server -> clusterBuilder + .addContactPoint(server.getHostName()) + .withPort(server.getPort())); + + configuration.getUsername().ifPresent(username -> + configuration.getPassword().ifPresent(password -> + clusterBuilder.withCredentials(username, password))); + + clusterBuilder.withQueryOptions(queryOptions()); + + SocketOptions socketOptions = new SocketOptions(); + socketOptions.setReadTimeoutMillis(configuration.getReadTimeoutMillis()); + socketOptions.setConnectTimeoutMillis(configuration.getConnectTimeoutMillis()); + clusterBuilder.withSocketOptions(socketOptions); + configuration.getPoolingOptions().ifPresent(clusterBuilder::withPoolingOptions); + + if (configuration.useSsl()) { + clusterBuilder.withSSL(); + } + + Cluster cluster = clusterBuilder.build(); + try { + configuration.getQueryLoggerConfiguration().map(queryLoggerConfiguration -> + cluster.register(queryLoggerConfiguration.getQueryLogger())); + return cluster; + } catch (Exception e) { + cluster.close(); + throw e; + } + } + + public static Cluster createWithKeyspace(ClusterConfiguration clusterConfiguration) { + Cluster cluster = create(clusterConfiguration); + createKeyspace(clusterConfiguration, cluster); + return cluster; + } + + public static void createKeyspace(ClusterConfiguration clusterConfiguration, Cluster cluster) { + try (Session session = cluster.connect()) { + session.execute("CREATE KEYSPACE IF NOT EXISTS " + clusterConfiguration.getKeyspace() + + " WITH replication = {'class':'SimpleStrategy', 'replication_factor':" + clusterConfiguration.getReplicationFactor() + "}" + + " AND durable_writes = " + clusterConfiguration.isDurableWrites() + + ";"); + } + } + + private static QueryOptions queryOptions() { + return new QueryOptions() + .setConsistencyLevel(ConsistencyLevel.QUORUM); + } +} diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterWithKeyspaceCreatedFactory.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterWithKeyspaceCreatedFactory.java deleted file mode 100644 index a93ca15..0000000 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterWithKeyspaceCreatedFactory.java +++ /dev/null @@ -1,36 +0,0 @@ -/**************************************************************** - * 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.backends.cassandra.init; - -import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; - -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.Session; - -public class ClusterWithKeyspaceCreatedFactory { - public static void createKeyspace(Cluster cluster, ClusterConfiguration clusterConfiguration) { - try (Session session = cluster.connect()) { - session.execute("CREATE KEYSPACE IF NOT EXISTS " + clusterConfiguration.getKeyspace() - + " WITH replication = {'class':'SimpleStrategy', 'replication_factor':" + clusterConfiguration.getReplicationFactor() + "}" - + " AND durable_writes = " + clusterConfiguration.isDurableWrites() - + ";"); - } - } -} diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ResilientClusterProvider.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ResilientClusterProvider.java index 523a925..743b887 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ResilientClusterProvider.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ResilientClusterProvider.java @@ -60,18 +60,9 @@ public class ResilientClusterProvider implements Provider<Cluster> { ImmutableList.copyOf(configuration.getHosts()).toString()); return () -> { - Cluster cluster = ClusterBuilder.builder() - .servers(configuration.getHosts()) - .username(configuration.getUsername()) - .password(configuration.getPassword()) - .useSsl(configuration.isUseSsl()) - .poolingOptions(configuration.getPoolingOptions()) - .queryLoggerConfiguration(configuration.getQueryLoggerConfiguration()) - .readTimeoutMillis(configuration.getReadTimeoutMillis()) - .connectTimeoutMillis(configuration.getConnectTimeoutMillis()) - .build(); + Cluster cluster = ClusterFactory.create(configuration); try { - ClusterWithKeyspaceCreatedFactory.createKeyspace(cluster, configuration); + ClusterFactory.createKeyspace(configuration, cluster); return cluster; } catch (Exception e) { cluster.close(); diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java index 68958f4..82c4afb 100644 --- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java +++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java @@ -26,7 +26,6 @@ import java.util.Objects; import java.util.Optional; import org.apache.commons.configuration2.Configuration; -import org.apache.james.backends.cassandra.init.ClusterBuilder; import org.apache.james.util.Host; import com.datastax.driver.core.HostDistance; @@ -190,7 +189,7 @@ public class ClusterConfiguration { replicationFactor.orElse(DEFAULT_REPLICATION_FACTOR), minDelay.orElse(DEFAULT_CONNECTION_MIN_DELAY), maxRetry.orElse(DEFAULT_CONNECTION_MAX_RETRIES), - queryLoggerConfiguration.orElse(QueryLoggerConfiguration.DEFAULT), + queryLoggerConfiguration, poolingOptions, readTimeoutMillis.orElse(DEFAULT_READ_TIMEOUT_MILLIS), connectTimeoutMillis.orElse(DEFAULT_CONNECT_TIMEOUT_MILLIS), @@ -218,6 +217,8 @@ public class ClusterConfiguration { private static final int DEFAULT_CONNECTION_MIN_DELAY = 5000; private static final int DEFAULT_READ_TIMEOUT_MILLIS = 5000; private static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 5000; + public static final int DEFAULT_CASSANDRA_PORT = 9042; + private static final boolean DEFAULT_SSL = false; public static Builder builder() { @@ -245,7 +246,7 @@ public class ClusterConfiguration { String[] ipAndPorts = configuration.getStringArray(CASSANDRA_NODES); return Arrays.stream(ipAndPorts) - .map(string -> Host.parseConfString(string, ClusterBuilder.DEFAULT_CASSANDRA_PORT)) + .map(string -> Host.parseConfString(string, DEFAULT_CASSANDRA_PORT)) .collect(Guavate.toImmutableList()); } @@ -285,7 +286,7 @@ public class ClusterConfiguration { private final int replicationFactor; private final int minDelay; private final int maxRetry; - private final QueryLoggerConfiguration queryLoggerConfiguration; + private final Optional<QueryLoggerConfiguration> queryLoggerConfiguration; private final Optional<PoolingOptions> poolingOptions; private final int readTimeoutMillis; private final int connectTimeoutMillis; @@ -295,7 +296,7 @@ public class ClusterConfiguration { private final boolean durableWrites; public ClusterConfiguration(List<Host> hosts, String keyspace, int replicationFactor, int minDelay, int maxRetry, - QueryLoggerConfiguration queryLoggerConfiguration, Optional<PoolingOptions> poolingOptions, + Optional<QueryLoggerConfiguration> queryLoggerConfiguration, Optional<PoolingOptions> poolingOptions, int readTimeoutMillis, int connectTimeoutMillis, boolean useSsl, Optional<String> username, Optional<String> password, boolean durableWrites) { this.hosts = hosts; @@ -337,7 +338,7 @@ public class ClusterConfiguration { return maxRetry; } - public QueryLoggerConfiguration getQueryLoggerConfiguration() { + public Optional<QueryLoggerConfiguration> getQueryLoggerConfiguration() { return queryLoggerConfiguration; } @@ -353,7 +354,7 @@ public class ClusterConfiguration { return connectTimeoutMillis; } - public boolean isUseSsl() { + public boolean useSsl() { return useSsl; } diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java index 9a6d412..50c6099 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java @@ -23,8 +23,7 @@ import java.util.Optional; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.backends.cassandra.init.CassandraTableManager; import org.apache.james.backends.cassandra.init.CassandraTypesProvider; -import org.apache.james.backends.cassandra.init.ClusterBuilder; -import org.apache.james.backends.cassandra.init.ClusterWithKeyspaceCreatedFactory; +import org.apache.james.backends.cassandra.init.ClusterFactory; import org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory; import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; import org.apache.james.util.Host; @@ -57,16 +56,12 @@ public final class CassandraCluster implements AutoCloseable { private CassandraCluster(CassandraModule module, Host host) throws RuntimeException { this.module = module; try { - cluster = ClusterBuilder.builder() - .servers(host) - .build(); ClusterConfiguration clusterConfiguration = ClusterConfiguration.builder() .host(host) .keyspace(KEYSPACE) - .replicationFactor(1) .disableDurableWrites() .build(); - ClusterWithKeyspaceCreatedFactory.createKeyspace(cluster, clusterConfiguration); + cluster = ClusterFactory.createWithKeyspace(clusterConfiguration); session = new SessionWithInitializedTablesFactory(clusterConfiguration, cluster, module).get(); typesProvider = new CassandraTypesProvider(module, session); } catch (Exception exception) { diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java index 58a9a08..99dce87 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java @@ -19,8 +19,6 @@ package org.apache.james.backends.cassandra; -import java.util.function.Function; - import org.apache.james.util.Host; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +27,6 @@ import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.output.OutputFrame; import org.testcontainers.images.builder.ImageFromDockerfile; import org.testcontainers.images.builder.dockerfile.DockerfileBuilder; -import org.testcontainers.images.builder.dockerfile.traits.RunStatementTrait; import com.github.dockerjava.api.DockerClient; import com.google.common.collect.ImmutableMap; @@ -38,6 +35,13 @@ public class DockerCassandra { private static final Logger logger = LoggerFactory.getLogger(DockerCassandra.class); + @FunctionalInterface + interface AdditionalDockerFileStep { + AdditionalDockerFileStep IDENTITY = builder -> builder; + + DockerfileBuilder applyStep(DockerfileBuilder builder); + } + private static final int CASSANDRA_PORT = 9042; private static final int CASSANDRA_MEMORY = 650; @@ -49,16 +53,16 @@ public class DockerCassandra { @SuppressWarnings("resource") public DockerCassandra() { - this("cassandra_3_11_3", Function.identity()); + this("cassandra_3_11_3", AdditionalDockerFileStep.IDENTITY); } - public DockerCassandra(String imageName, Function<DockerfileBuilder, DockerfileBuilder> additionalSteps) { + public DockerCassandra(String imageName, AdditionalDockerFileStep additionalSteps) { client = DockerClientFactory.instance().client(); boolean doNotDeleteImageAfterUsage = false; cassandraContainer = new GenericContainer<>( new ImageFromDockerfile(imageName,doNotDeleteImageAfterUsage) .withDockerfileFromBuilder(builder -> - additionalSteps.apply(builder + additionalSteps.applyStep(builder .from("cassandra:3.11.3") .env("ENV CASSANDRA_CONFIG", "/etc/cassandra") .run("echo \"-Xms" + CASSANDRA_MEMORY + "M\" >> " + JVM_OPTIONS) diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterBuilderTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterFactoryTest.java similarity index 85% rename from backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterBuilderTest.java rename to backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterFactoryTest.java index 4ad3db7..ce45523 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterBuilderTest.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterFactoryTest.java @@ -20,19 +20,20 @@ package org.apache.james.backends.cassandra.init; import static org.assertj.core.api.Assertions.assertThat; +import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; import org.apache.james.util.Host; import org.junit.jupiter.api.Test; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ConsistencyLevel; -class ClusterBuilderTest { +class ClusterFactoryTest { @Test void consistencyLevelShouldBeEqualToQuorum() { - Cluster cluster = ClusterBuilder.builder() - .servers(Host.from("localhost", ClusterBuilder.DEFAULT_CASSANDRA_PORT)) - .build(); + Cluster cluster = ClusterFactory.create(ClusterConfiguration.builder() + .host(Host.from("localhost", ClusterConfiguration.DEFAULT_CASSANDRA_PORT)) + .build()); ConsistencyLevel consistencyLevel = cluster.getConfiguration() .getQueryOptions() diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java index ea6fd49..f3e6dd9 100644 --- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java +++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java @@ -121,17 +121,13 @@ class SessionWithInitializedTablesFactoryTest { } private static Supplier<Session> createSession(DockerCassandraExtension.DockerCassandra cassandraServer) { - Host host = cassandraServer.getHost(); - Cluster cluster = ClusterBuilder.builder() - .servers(host) - .build(); ClusterConfiguration clusterConfiguration = ClusterConfiguration.builder() - .host(host) + .host(cassandraServer.getHost()) .keyspace(KEYSPACE) .replicationFactor(1) .disableDurableWrites() .build(); - ClusterWithKeyspaceCreatedFactory.createKeyspace(cluster, clusterConfiguration); + Cluster cluster = ClusterFactory.createWithKeyspace(clusterConfiguration); return () -> new SessionWithInitializedTablesFactory( clusterConfiguration, cluster, diff --git a/src/site/xdoc/server/config-cassandra.xml b/src/site/xdoc/server/config-cassandra.xml index 3511c87..ad9a400 100644 --- a/src/site/xdoc/server/config-cassandra.xml +++ b/src/site/xdoc/server/config-cassandra.xml @@ -47,8 +47,8 @@ required if <strong>cassandra.user</strong> is supplied</dd> <dt><strong>cassandra.ssl</strong></dt> - <dd>Wether SSL should be enabled on the communications with Cassandra cluster. Optional, defaults to false.<br/> - The keystore used for trusting SLL server socket can be set via JSSE system properties as explained on + <dd>Whether SSL should be enabled on the communications with Cassandra cluster. Optional, defaults to false.<br/> + The keystore used for trusting SSL server socket can be set via JSSE system properties as explained on <a href="https://docs.datastax.com/en/developer/java-driver/3.7/manual/ssl/">Cassandra driver manual</a>.</dd> <dt><strong>cassandra.replication.factor</strong></dt> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
