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 ma...@apache.org on 2018/08/01 12:34:30 UTC
[12/14] james-project git commit: MAILBOX-342 Use a singleton and
surefire::reuseforks to launch a single cassandra container
MAILBOX-342 Use a singleton and surefire::reuseforks to launch a single cassandra container
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/524e43ab
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/524e43ab
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/524e43ab
Branch: refs/heads/master
Commit: 524e43abc9704513a5d0f1fc21081d1a317442a6
Parents: 8cd1e2c
Author: benwa <bt...@linagora.com>
Authored: Tue Jul 24 15:36:53 2018 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Wed Aug 1 14:32:01 2018 +0200
----------------------------------------------------------------------
backends-common/cassandra/pom.xml | 12 +++
.../ContainerLifecycleConfiguration.java | 4 +
.../backends/cassandra/DockerCassandra.java | 107 +++++++++++++++++++
.../backends/cassandra/DockerCassandraRule.java | 83 ++------------
.../cassandra/DockerCassandraSingleton.java | 36 +++++++
mailbox/cassandra/pom.xml | 12 +++
.../CassandraMessageIdToImapUidDAOTest.java | 2 +
mpt/impl/imap-mailbox/cassandra/pom.xml | 12 +++
mpt/impl/smtp/cassandra/pom.xml | 12 +++
server/container/guice/cassandra-guice/pom.xml | 7 ++
server/data/data-cassandra/pom.xml | 7 ++
server/data/data-jmap-cassandra/pom.xml | 7 ++
.../mailrepository-cassandra/pom.xml | 7 ++
.../protocols/webadmin-integration-test/pom.xml | 12 +++
14 files changed, 246 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/backends-common/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/pom.xml b/backends-common/cassandra/pom.xml
index 9be80f7..7516b2b 100644
--- a/backends-common/cassandra/pom.xml
+++ b/backends-common/cassandra/pom.xml
@@ -134,4 +134,16 @@
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
index 0768f51..d9592f9 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ContainerLifecycleConfiguration.java
@@ -28,6 +28,10 @@ import org.testcontainers.shaded.com.google.common.base.Preconditions;
public class ContainerLifecycleConfiguration {
+ public static Builder builder() {
+ return new Builder();
+ }
+
public static Builder withDefaultIterationsBetweenRestart() {
return new Builder();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..bb0feec
--- /dev/null
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
@@ -0,0 +1,107 @@
+/****************************************************************
+ * 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;
+
+import org.apache.james.util.Host;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.DockerClientFactory;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.output.OutputFrame;
+import org.testcontainers.images.builder.ImageFromDockerfile;
+import org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
+
+import com.github.dockerjava.api.DockerClient;
+
+public class DockerCassandra {
+
+ private static final Logger logger = LoggerFactory.getLogger(DockerCassandra.class);
+
+ private static final int CASSANDRA_PORT = 9042;
+ private static final String CASSANDRA_CONFIG_DIR = "$CASSANDRA_CONFIG";
+ private static final String CASSANDRA_YAML = CASSANDRA_CONFIG_DIR + "/cassandra.yaml";
+ private static final String CASSANDRA_ENV = CASSANDRA_CONFIG_DIR + "/cassandra-env.sh";
+ private static final String JVM_OPTIONS = CASSANDRA_CONFIG_DIR + "/jvm.options";
+
+ private final GenericContainer<?> cassandraContainer;
+ private final DockerClient client;
+
+ @SuppressWarnings("resource")
+ public DockerCassandra() {
+ client = DockerClientFactory.instance().client();
+ boolean deleteOnExit = false;
+ int cassandraMemory = 1000;
+ long cassandraContainerMemory = Float.valueOf(cassandraMemory * 1.2f * 1024 * 1024L).longValue();
+ cassandraContainer = new GenericContainer<>(
+ new ImageFromDockerfile("cassandra_2_2_12", deleteOnExit)
+ .withDockerfileFromBuilder(builder ->
+ builder
+ .from("cassandra:2.2.12")
+ .env("ENV CASSANDRA_CONFIG", "/etc/cassandra")
+ .run("echo \"-Xms" + cassandraMemory + "M\" >> " + JVM_OPTIONS)
+ .run("echo \"-Xmx" + cassandraMemory + "M\" >> " + JVM_OPTIONS)
+ .build()))
+ .withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withTmpFs(ImmutableMap.of("/var/lib/cassandra", "rw,noexec,nosuid,size=200m")))
+ .withCreateContainerCmdModifier(cmd -> cmd.withMemory(cassandraContainerMemory))
+ .withExposedPorts(CASSANDRA_PORT)
+ .withLogConsumer(DockerCassandra::displayDockerLog);
+ cassandraContainer
+ .waitingFor(new CassandraWaitStrategy(cassandraContainer));
+ }
+
+ private static void displayDockerLog(OutputFrame outputFrame) {
+ logger.info(outputFrame.getUtf8String());
+ }
+
+ public void start() {
+ cassandraContainer.start();
+ }
+
+ public void stop() {
+ cassandraContainer.stop();
+ }
+
+ public Host getHost() {
+ return Host.from(
+ getIp(),
+ getBindingPort());
+ }
+
+ public String getIp() {
+ return cassandraContainer.getContainerIpAddress();
+ }
+
+ public int getBindingPort() {
+ return cassandraContainer.getMappedPort(CASSANDRA_PORT);
+ }
+
+ public GenericContainer<?> getRawContainer() {
+ return cassandraContainer;
+ }
+
+ public void pause() {
+ client.pauseContainerCmd(cassandraContainer.getContainerId());
+ }
+
+ public void unpause() {
+ client.unpauseContainerCmd(cassandraContainer.getContainerId());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
index 6f634dd..b3eb35e 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
@@ -23,111 +23,46 @@ import org.apache.james.util.Host;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.DockerClientFactory;
import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.OutputFrame;
-import org.testcontainers.images.builder.ImageFromDockerfile;
-import org.testcontainers.shaded.com.google.common.collect.ImmutableMap;
-
-import com.github.dockerjava.api.DockerClient;
public class DockerCassandraRule implements TestRule {
- private static final Logger logger = LoggerFactory.getLogger(DockerCassandraRule.class);
-
- private static final int CASSANDRA_PORT = 9042;
- private static final String CASSANDRA_CONFIG_DIR = "$CASSANDRA_CONFIG";
- private static final String CASSANDRA_YAML = CASSANDRA_CONFIG_DIR + "/cassandra.yaml";
- private static final String CASSANDRA_ENV = CASSANDRA_CONFIG_DIR + "/cassandra-env.sh";
- private static final String JVM_OPTIONS = CASSANDRA_CONFIG_DIR + "/jvm.options";
-
- private final GenericContainer<?> cassandraContainer;
- private final DockerClient client;
-
- @SuppressWarnings("resource")
- public DockerCassandraRule() {
- client = DockerClientFactory.instance().client();
- boolean deleteOnExit = false;
- cassandraContainer = new GenericContainer<>(
- new ImageFromDockerfile("cassandra_2_2_12", deleteOnExit)
- .withDockerfileFromBuilder(builder ->
- builder
- .from("cassandra:2.2.12")
- .env("ENV CASSANDRA_CONFIG", "/etc/cassandra")
- //avoiding token range computation helps starting faster
- .run("echo \"JVM_OPTS=\\\"\\$JVM_OPTS -Dcassandra.initial_token=0\\\"\" >> " + CASSANDRA_ENV)
- .run("sed -i -e \"s/num_tokens/\\#num_tokens/\" " + CASSANDRA_YAML)
- //don't wait for other nodes communication to happen
- .run("echo \"JVM_OPTS=\\\"\\$JVM_OPTS -Dcassandra.skip_wait_for_gossip_to_settle=0\\\"\" >> " + CASSANDRA_ENV)
- //make sure commit log disk flush won't happen
- .run("sed -i -e \"s/commitlog_sync_period_in_ms: 10000/commitlog_sync_period_in_ms: 9999999/\" " + CASSANDRA_YAML)
- //auto_bootstrap should be useless when no existing data
- .run("echo auto_bootstrap: false >> " + CASSANDRA_YAML)
- .run("echo \"-Xms1500M\" >> " + JVM_OPTIONS)
- .run("echo \"-Xmx1500M\" >> " + JVM_OPTIONS)
- // disable assertions (modest performance benefit)
- .run("sed -i -e 's/JVM_OPTS=\"$JVM_OPTS -ea\"/JVM_OPTS=\"$JVM_OPTS -da\"/' " + CASSANDRA_ENV)
- // use caches for keys & rows
- .run("sed -i -e \"s/key_cache_size_in_mb:/key_cache_size_in_mb: 256/\" " + CASSANDRA_YAML)
- .run("sed -i -e \"s/row_cache_size_in_mb: 0/row_cache_size_in_mb: 512/\" " + CASSANDRA_YAML)
- .build()))
- .withCreateContainerCmdModifier(cmd -> cmd.withMemory(2000 * 1024 * 1024L))
- .withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withTmpFs(ImmutableMap.of("/var/lib/cassandra", "rw,noexec,nosuid,size=100m")))
- .withExposedPorts(CASSANDRA_PORT)
- .withLogConsumer(this::displayDockerLog);
- cassandraContainer
- .waitingFor(new CassandraWaitStrategy(cassandraContainer));
- }
-
- private void displayDockerLog(OutputFrame outputFrame) {
- logger.info(outputFrame.getUtf8String());
- }
-
@Override
public Statement apply(Statement base, Description description) {
- return new Statement() {
- @Override
- public void evaluate() throws Throwable {
- cassandraContainer.apply(base, description).evaluate();
- }
- };
+ return base;
}
public void start() {
- cassandraContainer.start();
+
}
public void stop() {
- cassandraContainer.stop();
+
}
public Host getHost() {
- return Host.from(
- getIp(),
- getBindingPort());
+ return DockerCassandraSingleton.singleton.getHost();
}
public String getIp() {
- return cassandraContainer.getContainerIpAddress();
+ return DockerCassandraSingleton.singleton.getIp();
}
public int getBindingPort() {
- return cassandraContainer.getMappedPort(CASSANDRA_PORT);
+ return DockerCassandraSingleton.singleton.getBindingPort();
}
public GenericContainer<?> getRawContainer() {
- return cassandraContainer;
+ return DockerCassandraSingleton.singleton.getRawContainer();
}
public void pause() {
- client.pauseContainerCmd(cassandraContainer.getContainerId());
+ DockerCassandraSingleton.singleton.pause();
}
public void unpause() {
- client.unpauseContainerCmd(cassandraContainer.getContainerId());
+ DockerCassandraSingleton.singleton.unpause();
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
new file mode 100644
index 0000000..98fc5fc
--- /dev/null
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
@@ -0,0 +1,36 @@
+/****************************************************************
+ * 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;
+
+public class DockerCassandraSingleton {
+
+ public static final DockerCassandra singleton = new DockerCassandra();
+
+ static {
+ singleton.start();
+ }
+
+ public static void restart() {
+ singleton.stop();
+ singleton.start();
+ }
+
+ // Cleanup will be performed by test container resource reaper
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml
index fb1c5aa..26d57cf 100644
--- a/mailbox/cassandra/pom.xml
+++ b/mailbox/cassandra/pom.xml
@@ -176,4 +176,16 @@
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java
index a273fb4..c7d6e7d 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java
@@ -29,6 +29,7 @@ import javax.mail.Flags.Flag;
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.DockerCassandraSingleton;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
@@ -57,6 +58,7 @@ public class CassandraMessageIdToImapUidDAOTest {
@BeforeClass
public static void setUpClass() {
+ DockerCassandraSingleton.restart();
cassandra = CassandraCluster.create(CassandraMessageModule.MODULE, cassandraServer.getHost());
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/mpt/impl/imap-mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/pom.xml b/mpt/impl/imap-mailbox/cassandra/pom.xml
index 2289877..4166a7c 100644
--- a/mpt/impl/imap-mailbox/cassandra/pom.xml
+++ b/mpt/impl/imap-mailbox/cassandra/pom.xml
@@ -60,4 +60,16 @@
<artifactId>blob-cassandra</artifactId>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/mpt/impl/smtp/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/smtp/cassandra/pom.xml b/mpt/impl/smtp/cassandra/pom.xml
index 3942beb..04784de 100644
--- a/mpt/impl/smtp/cassandra/pom.xml
+++ b/mpt/impl/smtp/cassandra/pom.xml
@@ -92,5 +92,17 @@
<scope>test</scope>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/server/container/guice/cassandra-guice/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/pom.xml b/server/container/guice/cassandra-guice/pom.xml
index af6166b..5035f68 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -333,6 +333,13 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
</plugins>
</build>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/server/data/data-cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/pom.xml b/server/data/data-cassandra/pom.xml
index 2e3eb96..3755ffa 100644
--- a/server/data/data-cassandra/pom.xml
+++ b/server/data/data-cassandra/pom.xml
@@ -158,6 +158,13 @@
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
</plugins>
</build>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/server/data/data-jmap-cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-jmap-cassandra/pom.xml b/server/data/data-jmap-cassandra/pom.xml
index 201c98b..115ff7a 100644
--- a/server/data/data-jmap-cassandra/pom.xml
+++ b/server/data/data-jmap-cassandra/pom.xml
@@ -99,6 +99,13 @@
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
</plugins>
</build>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/server/mailrepository/mailrepository-cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailrepository/mailrepository-cassandra/pom.xml b/server/mailrepository/mailrepository-cassandra/pom.xml
index 69102d9..19f03d0 100644
--- a/server/mailrepository/mailrepository-cassandra/pom.xml
+++ b/server/mailrepository/mailrepository-cassandra/pom.xml
@@ -112,6 +112,13 @@
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
</plugins>
</build>
</project>
http://git-wip-us.apache.org/repos/asf/james-project/blob/524e43ab/server/protocols/webadmin-integration-test/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin-integration-test/pom.xml b/server/protocols/webadmin-integration-test/pom.xml
index 7ea2a82..6a02073 100644
--- a/server/protocols/webadmin-integration-test/pom.xml
+++ b/server/protocols/webadmin-integration-test/pom.xml
@@ -117,4 +117,16 @@
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <reuseForks>true</reuseForks>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org