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 2018/06/14 08:35:25 UTC
[07/13] james-project git commit: JAMES-2418 Provide
MailRepositoryUrlStore JPA implementation
JAMES-2418 Provide MailRepositoryUrlStore JPA implementation
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0f7ec3c1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0f7ec3c1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0f7ec3c1
Branch: refs/heads/master
Commit: 0f7ec3c131a211220424645d628f32600f3ed232
Parents: c2dadb2
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 8 13:28:14 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jun 14 15:16:59 2018 +0700
----------------------------------------------------------------------
.../james/backends/jpa/TransactionRunner.java | 22 ++++++-
.../james/backends/jpa/JpaTestCluster.java | 1 +
.../src/main/resources/META-INF/persistence.xml | 1 +
.../src/main/resources/META-INF/persistence.xml | 1 +
.../src/main/resources/META-INF/persistence.xml | 1 +
.../org/apache/james/JPAJamesServerTest.java | 3 +-
server/data/data-jpa/pom.xml | 34 ++++++++--
.../jpa/JPAMailRepositoryUrlStore.java | 67 ++++++++++++++++++++
.../apache/james/mailrepository/jpa/JPAUrl.java | 65 +++++++++++++++++++
.../src/main/resources/META-INF/persistence.xml | 1 +
.../jpa/JPAMailRepositoryUrlStoreExtension.java | 47 ++++++++++++++
.../jpa/JPAMailRepositoryUrlStoreTest.java | 28 ++++++++
12 files changed, 263 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java
----------------------------------------------------------------------
diff --git a/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java b/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java
index 0b3c914..dae6f2e 100644
--- a/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java
+++ b/backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java
@@ -20,6 +20,7 @@
package org.apache.james.backends.jpa;
import java.util.function.Consumer;
+import java.util.function.Function;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
@@ -32,6 +33,7 @@ import org.slf4j.LoggerFactory;
public class TransactionRunner {
private static final Logger LOGGER = LoggerFactory.getLogger(TransactionRunner.class);
+ public static final Function<PersistenceException, Object> IGNORE_EXCEPTION = e -> null;
private final EntityManagerFactory entityManagerFactory;
@@ -40,17 +42,35 @@ public class TransactionRunner {
}
public void run(Consumer<EntityManager> runnable) {
+ runAndRetrieveResult(entityManager -> {
+ runnable.accept(entityManager);
+ return null;
+ },
+ IGNORE_EXCEPTION);
+ }
+
+ public <T> T runAndRetrieveResult(Function<EntityManager, T> toResult) {
+ return runAndRetrieveResult(toResult,
+ e -> {
+ throw new RuntimeException(e);
+ });
+ }
+
+ public <T> T runAndRetrieveResult(Function<EntityManager, T> toResult,
+ Function<PersistenceException, T> errorHandler) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
- runnable.accept(entityManager);
+ T result = toResult.apply(entityManager);
transaction.commit();
+ return result;
} catch (PersistenceException e) {
LOGGER.warn("Could not execute transaction", e);
if (transaction.isActive()) {
transaction.rollback();
}
+ return errorHandler.apply(e);
} finally {
entityManager.close();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java
----------------------------------------------------------------------
diff --git a/backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java b/backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java
index e845801..fc96085 100644
--- a/backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java
+++ b/backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java
@@ -22,6 +22,7 @@ package org.apache.james.backends.jpa;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
+
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/app/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/server/app/src/main/resources/META-INF/persistence.xml b/server/app/src/main/resources/META-INF/persistence.xml
index 4688e39..6f68e20 100644
--- a/server/app/src/main/resources/META-INF/persistence.xml
+++ b/server/app/src/main/resources/META-INF/persistence.xml
@@ -33,6 +33,7 @@
<class>org.apache.james.mailbox.jpa.mail.model.JPAMailboxAnnotation</class>
<class>org.apache.james.mailbox.jpa.user.model.JPASubscription</class>
<class>org.apache.james.domainlist.jpa.model.JPADomain</class>
+ <class>org.apache.james.mailrepository.jpa.JPAUrl</class>
<class>org.apache.james.user.jpa.model.JPAUser</class>
<class>org.apache.james.rrt.jpa.model.JPARecipientRewrite</class>
<class>org.apache.james.mailbox.jpa.quota.model.MaxDomainMessageCount</class>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml b/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
index 9f00fa9..fd1711d 100644
--- a/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
+++ b/server/container/guice/jpa-guice/src/main/resources/META-INF/persistence.xml
@@ -32,6 +32,7 @@
<class>org.apache.james.mailbox.jpa.user.model.JPASubscription</class>
<class>org.apache.james.domainlist.jpa.model.JPADomain</class>
+ <class>org.apache.james.mailrepository.jpa.JPAUrl</class>
<class>org.apache.james.user.jpa.model.JPAUser</class>
<class>org.apache.james.rrt.jpa.model.JPARecipientRewrite</class>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/container/guice/jpa-smtp/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/src/main/resources/META-INF/persistence.xml b/server/container/guice/jpa-smtp/src/main/resources/META-INF/persistence.xml
index d82c703..0656779 100644
--- a/server/container/guice/jpa-smtp/src/main/resources/META-INF/persistence.xml
+++ b/server/container/guice/jpa-smtp/src/main/resources/META-INF/persistence.xml
@@ -25,6 +25,7 @@
<persistence-unit name="Global" transaction-type="RESOURCE_LOCAL">
<class>org.apache.james.domainlist.jpa.model.JPADomain</class>
+ <class>org.apache.james.mailrepository.jpa.JPAUrl</class>
<class>org.apache.james.user.jpa.model.JPAUser</class>
<class>org.apache.james.rrt.jpa.model.JPARecipientRewrite</class>
<properties>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java
index 93a74f1..87962dd 100644
--- a/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java
+++ b/server/container/guice/jpa-smtp/src/test/java/org/apache/james/JPAJamesServerTest.java
@@ -31,6 +31,7 @@ import javax.persistence.EntityManagerFactory;
import org.apache.james.backends.jpa.JpaTestCluster;
import org.apache.james.domainlist.jpa.model.JPADomain;
+import org.apache.james.mailrepository.jpa.JPAUrl;
import org.apache.james.rrt.jpa.model.JPARecipientRewrite;
import org.apache.james.server.core.configuration.Configuration;
import org.apache.james.user.jpa.model.JPAUser;
@@ -66,7 +67,7 @@ public class JPAJamesServerTest {
.overrideWith(
new TestJPAConfigurationModule(),
(binder) -> binder.bind(EntityManagerFactory.class)
- .toInstance(JpaTestCluster.create(JPAUser.class, JPADomain.class, JPARecipientRewrite.class)
+ .toInstance(JpaTestCluster.create(JPAUser.class, JPADomain.class, JPARecipientRewrite.class, JPAUrl.class)
.getEntityManagerFactory()));
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/data/data-jpa/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/pom.xml b/server/data/data-jpa/pom.xml
index eab6334..7bb4925 100644
--- a/server/data/data-jpa/pom.xml
+++ b/server/data/data-jpa/pom.xml
@@ -49,6 +49,12 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>james-server-data-api</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>james-server-data-library</artifactId>
</dependency>
<dependency>
@@ -109,13 +115,23 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-launcher</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@@ -137,7 +153,10 @@
<artifactId>openjpa-maven-plugin</artifactId>
<version>2.4.2</version>
<configuration>
- <includes>org/apache/james/user/jpa/model/JPAUser.class,org/apache/james/rrt/jpa/model/JPARecipientRewrite.class,org/apache/james/domainlist/jpa/model/JPADomain.class</includes>
+ <includes>org/apache/james/user/jpa/model/JPAUser.class,
+ org/apache/james/rrt/jpa/model/JPARecipientRewrite.class,
+ org/apache/james/domainlist/jpa/model/JPADomain.class,
+ org/apache/james/mailrepository/jpa/JPAUrl.class</includes>
<addDefaultConstructor>true</addDefaultConstructor>
<enforcePropertyRestrictions>true</enforcePropertyRestrictions>
<toolProperties>
@@ -147,7 +166,10 @@
</property>
<property>
<name>metaDataFactory</name>
- <value>jpa(Types=org.apache.james.user.jpa.model.JPAUser;org.apache.james.rrt.jpa.model.JPARecipientRewrite;org.apache.james.domainlist.jpa.model.JPADomain)</value>
+ <value>jpa(Types=org.apache.james.user.jpa.model.JPAUser;
+ org.apache.james.rrt.jpa.model.JPARecipientRewrite;
+ org.apache.james.domainlist.jpa.model.JPADomain;
+ org.apache.james.mailrepository.jpa.JPAUrl)</value>
</property>
</toolProperties>
</configuration>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStore.java b/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStore.java
new file mode 100644
index 0000000..576b774
--- /dev/null
+++ b/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStore.java
@@ -0,0 +1,67 @@
+/****************************************************************
+ * 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.mailrepository.jpa;
+
+import java.util.Set;
+
+import javax.inject.Inject;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.james.backends.jpa.TransactionRunner;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+
+import com.github.steveash.guavate.Guavate;
+
+public class JPAMailRepositoryUrlStore implements MailRepositoryUrlStore {
+ private final TransactionRunner transactionRunner;
+
+ @Inject
+ public JPAMailRepositoryUrlStore(EntityManagerFactory entityManagerFactory) {
+ this.transactionRunner = new TransactionRunner(entityManagerFactory);
+ }
+
+ @Override
+ public void add(MailRepositoryUrl url) {
+ transactionRunner.run(entityManager ->
+ entityManager.merge(JPAUrl.from(url)));
+ }
+
+ @Override
+ public Set<MailRepositoryUrl> list() {
+ return transactionRunner.runAndRetrieveResult(entityManager ->
+ entityManager
+ .createNamedQuery("listUrls", JPAUrl.class)
+ .getResultList()
+ .stream()
+ .map(JPAUrl::toMailRepositoryUrl)
+ .collect(Guavate.toImmutableSet()));
+ }
+
+ @Override
+ public boolean contains(MailRepositoryUrl url) {
+ return transactionRunner.runAndRetrieveResult(entityManager ->
+ ! entityManager.createNamedQuery("getUrl", JPAUrl.class)
+ .setParameter("value", url.asString())
+ .getResultList()
+ .isEmpty());
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAUrl.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAUrl.java b/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAUrl.java
new file mode 100644
index 0000000..c775ad7
--- /dev/null
+++ b/server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAUrl.java
@@ -0,0 +1,65 @@
+/****************************************************************
+ * 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.mailrepository.jpa;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+
+@Entity(name = "JamesMailRepos")
+@Table(name = "JAMES_MAIL_REPOS")
+@NamedQueries({
+ @NamedQuery(name = "listUrls", query = "SELECT url FROM JamesMailRepos url"),
+ @NamedQuery(name = "getUrl", query = "SELECT url FROM JamesMailRepos url WHERE url.value=:value")})
+public class JPAUrl {
+ public static JPAUrl from(MailRepositoryUrl url) {
+ return new JPAUrl(url.asString());
+ }
+
+ @Id
+ @Column(name = "MAIL_REPO_NAME", nullable = false, length = 1024)
+ private String value;
+
+ /**
+ * Default no-args constructor for JPA class enhancement.
+ * The constructor need to be public or protected to be used by JPA.
+ * See: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqa.html
+ * Do not us this constructor, it is for JPA only.
+ */
+ protected JPAUrl() {
+ }
+
+ public JPAUrl(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public MailRepositoryUrl toMailRepositoryUrl() {
+ return MailRepositoryUrl.from(value);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/data/data-jpa/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/main/resources/META-INF/persistence.xml b/server/data/data-jpa/src/main/resources/META-INF/persistence.xml
index 14a6a4f..0e43be9 100644
--- a/server/data/data-jpa/src/main/resources/META-INF/persistence.xml
+++ b/server/data/data-jpa/src/main/resources/META-INF/persistence.xml
@@ -29,6 +29,7 @@
<class>org.apache.james.domainlist.jpa.model.JPADomain</class>
<class>org.apache.james.user.jpa.model.JPAUser</class>
<class>org.apache.james.rrt.jpa.model.JPARecipientRewrite</class>
+ <class>org.apache.james.mailrepository.jpa.JPAUrl</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
new file mode 100644
index 0000000..402a5de
--- /dev/null
+++ b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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.mailrepository.jpa;
+
+import org.apache.james.backends.jpa.JpaTestCluster;
+import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.jupiter.api.extension.ParameterResolver;
+
+public class JPAMailRepositoryUrlStoreExtension implements ParameterResolver, AfterEachCallback{
+ private static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAUrl.class);
+
+ @Override
+ public void afterEach(ExtensionContext context) {
+ JPA_TEST_CLUSTER.clear("JAMES_MAIL_REPOS");
+ }
+
+ @Override
+ public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+ return (parameterContext.getParameter().getType() == MailRepositoryUrlStore.class);
+ }
+
+ @Override
+ public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+ return new JPAMailRepositoryUrlStore(JPA_TEST_CLUSTER.getEntityManagerFactory());
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f7ec3c1/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
new file mode 100644
index 0000000..5a58174
--- /dev/null
+++ b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
@@ -0,0 +1,28 @@
+/****************************************************************
+ * 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.mailrepository.jpa;
+
+import org.apache.james.mailrepository.api.MailRepositoryUrlStoreContract;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+@ExtendWith(JPAMailRepositoryUrlStoreExtension.class)
+public class JPAMailRepositoryUrlStoreTest implements MailRepositoryUrlStoreContract {
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org