JAMES-2008 Solve various JPA troubbles
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e9e1f557 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e9e1f557 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e9e1f557 Branch: refs/heads/master Commit: e9e1f557945f4297028a43e18c3fd619b2b6b147 Parents: 8f0df01 Author: benwa <btell...@linagora.com> Authored: Fri Apr 21 15:38:40 2017 +0700 Committer: Antoine Duprat <adup...@linagora.com> Committed: Wed Apr 26 13:50:11 2017 +0200 ---------------------------------------------------------------------- .../james/backends/jpa/JpaTestCluster.java | 4 +- mailbox/jpa/pom.xml | 26 +-------- .../mailbox/jpa/mail/JPAAnnotationMapper.java | 7 ++- .../mailbox/jpa/mail/JPAMailboxMapper.java | 2 +- .../jpa/mail/model/JPAMailboxAnnotation.java | 37 +----------- .../jpa/mail/model/JPAMailboxAnnotationId.java | 60 ++++++++++++++++++++ .../openjpa/AbstractJPAMailboxMessage.java | 2 + .../james/mailbox/jpa/JPAMailboxFixture.java | 9 ++- .../mailbox/jpa/mail/JPAMapperProvider.java | 2 + 9 files changed, 79 insertions(+), 70 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/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 59c66d1..018d492 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 @@ -41,7 +41,7 @@ public class JpaTestCluster { public static JpaTestCluster create(List<Class<?>> clazz) { HashMap<String, String> properties = new HashMap<String, String>(); properties.put("openjpa.ConnectionDriverName", org.h2.Driver.class.getName()); - properties.put("openjpa.ConnectionURL", "jdbc:h2:mem:mailboxintegration;DB_CLOSE_DELAY=-1"); // Memory H2 database + properties.put("openjpa.ConnectionURL", "jdbc:h2:mem:mailboxintegrationtesting;DB_CLOSE_DELAY=-1"); // Memory H2 database properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)"); // Create Foreign Keys properties.put("openjpa.jdbc.MappingDefaults", "ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"); properties.put("openjpa.jdbc.SchemaFactory", "native(ForeignKeys=true)"); @@ -84,7 +84,7 @@ public class JpaTestCluster { EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); for(String tableName: tables) { - entityManager.createNativeQuery("TRUNCATE table " + tableName).executeUpdate(); + entityManager.createNativeQuery("DELETE FROM " + tableName).executeUpdate(); } entityManager.getTransaction().commit(); entityManager.close(); http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/jpa/pom.xml b/mailbox/jpa/pom.xml index f5b7111..321d46e 100644 --- a/mailbox/jpa/pom.xml +++ b/mailbox/jpa/pom.xml @@ -112,36 +112,12 @@ <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>openjpa-maven-plugin</artifactId> - <version>1.1</version> + <version>1.2</version> <configuration> <includes>org/apache/james/mailbox/jpa/*/model/**/*.class</includes> <excludes>org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.class</excludes> <addDefaultConstructor>true</addDefaultConstructor> <enforcePropertyRestrictions>true</enforcePropertyRestrictions> - <toolProperties> - <property> - <name>log</name> - <value>TOOL=TRACE</value> - </property> - <property> - <name>metaDataFactory</name> - <value> - jpa(Types=org.apache.james.mailbox.jpa.mail.model.JPAUserFlag; - org.apache.james.mailbox.jpa.mail.model.JPAMailbox; - org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage; - org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMessage; - org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage; - org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage; - org.apache.james.mailbox.jpa.mail.model.JPAProperty; - org.apache.james.mailbox.jpa.user.model.JPASubscription; - org.apache.james.mailbox.jpa.quota.model.MaxDefaultMessageCount; - org.apache.james.mailbox.jpa.quota.model.MaxDefaultStorage - org.apache.james.mailbox.jpa.quota.model.MaxUserMessageCount - org.apache.james.mailbox.jpa.quota.model.MaxUserStorage - org.apache.james.mailbox.jpa.quota.model.JpaCurrentQuota) - </value> - </property> - </toolProperties> </configuration> <executions> <execution> http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java index bf802c7..9aba4c6 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java @@ -32,6 +32,7 @@ import com.google.common.base.Throwables; import org.apache.james.mailbox.jpa.JPAId; import org.apache.james.mailbox.jpa.JPATransactionalMapper; import org.apache.james.mailbox.jpa.mail.model.JPAMailboxAnnotation; +import org.apache.james.mailbox.jpa.mail.model.JPAMailboxAnnotationId; import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxId; @@ -159,7 +160,7 @@ public class JPAAnnotationMapper extends JPATransactionalMapper implements Annot try { JPAId jpaId = (JPAId) mailboxId; JPAMailboxAnnotation jpaMailboxAnnotation = getEntityManager() - .find(JPAMailboxAnnotation.class, new JPAMailboxAnnotation.JPAMailboxAnnotationId(jpaId.getRawId(), key.asString())); + .find(JPAMailboxAnnotation.class, new JPAMailboxAnnotationId(jpaId.getRawId(), key.asString())); getEntityManager().remove(jpaMailboxAnnotation); } catch (NoResultException e) { LOGGER.debug("Mailbox annotation not found for ID {} and key {}", mailboxId.serialize(), key.asString()); @@ -179,7 +180,7 @@ public class JPAAnnotationMapper extends JPATransactionalMapper implements Annot mailboxAnnotation.getValue().orNull())); } else { getEntityManager().find(JPAMailboxAnnotation.class, - new JPAMailboxAnnotation.JPAMailboxAnnotationId(jpaId.getRawId(), mailboxAnnotation.getKey().asString())) + new JPAMailboxAnnotationId(jpaId.getRawId(), mailboxAnnotation.getKey().asString())) .setValue(mailboxAnnotation.getValue().orNull()); } } @@ -188,7 +189,7 @@ public class JPAAnnotationMapper extends JPATransactionalMapper implements Annot public boolean exist(MailboxId mailboxId, MailboxAnnotation mailboxAnnotation) { JPAId jpaId = (JPAId) mailboxId; Optional<JPAMailboxAnnotation> row = Optional.fromNullable(getEntityManager().find(JPAMailboxAnnotation.class, - new JPAMailboxAnnotation.JPAMailboxAnnotationId(jpaId.getRawId(), mailboxAnnotation.getKey().asString()))); + new JPAMailboxAnnotationId(jpaId.getRawId(), mailboxAnnotation.getKey().asString()))); return row.isPresent(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java index 0183789..4a120d2 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java @@ -78,7 +78,7 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM try { this.lastMailboxName = mailbox.getName(); JPAMailbox persistedMailbox = JPAMailbox.from(mailbox); - getEntityManager().persist(mailbox); + getEntityManager().persist(persistedMailbox); if (!(mailbox instanceof JPAMailbox)) { mailbox.setMailboxId(persistedMailbox.getMailboxId()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java index 2fdec88..0945e48 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java @@ -37,44 +37,9 @@ import com.google.common.base.Objects; @NamedQuery(name = "retrieveByKey", query = "SELECT annotation FROM MailboxAnnotation annotation WHERE annotation.mailboxId = :idParam AND annotation.key = :keyParam"), @NamedQuery(name= "countAnnotationsInMailbox", query = "SELECT COUNT(annotation) FROM MailboxAnnotation annotation WHERE annotation.mailboxId = :idParam"), @NamedQuery(name = "retrieveByKeyLike", query = "SELECT annotation FROM MailboxAnnotation annotation WHERE annotation.mailboxId = :idParam AND annotation.key LIKE :keyParam")}) -@IdClass(JPAMailboxAnnotation.JPAMailboxAnnotationId.class) +@IdClass(JPAMailboxAnnotationId.class) public class JPAMailboxAnnotation { - public static final class JPAMailboxAnnotationId { - private long mailboxId; - private String key; - - public JPAMailboxAnnotationId(long mailboxId, String key) { - this.mailboxId = mailboxId; - this.key = key; - } - - public JPAMailboxAnnotationId() { - } - - public long getMailboxId() { - return mailboxId; - } - - public String getKey() { - return key; - } - - @Override - public boolean equals(Object o) { - if (o instanceof JPAMailboxAnnotationId) { - JPAMailboxAnnotationId that = (JPAMailboxAnnotationId) o; - return Objects.equal(this.mailboxId, that.mailboxId) && Objects.equal(this.key, that.key); - } - return false; - } - - @Override - public int hashCode() { - return Objects.hashCode(mailboxId, key); - } - } - public static final String MAILBOX_ID = "MAILBOX_ID"; public static final String KEY = "KEY"; public static final String VALUE = "VALUE"; http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotationId.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotationId.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotationId.java new file mode 100644 index 0000000..74ce438 --- /dev/null +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotationId.java @@ -0,0 +1,60 @@ +/**************************************************************** + * 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.mailbox.jpa.mail.model; + +import com.google.common.base.Objects; + +import javax.persistence.Embeddable; + +@Embeddable +public final class JPAMailboxAnnotationId { + private long mailboxId; + private String key; + + public JPAMailboxAnnotationId(long mailboxId, String key) { + this.mailboxId = mailboxId; + this.key = key; + } + + public JPAMailboxAnnotationId() { + } + + public long getMailboxId() { + return mailboxId; + } + + public String getKey() { + return key; + } + + @Override + public boolean equals(Object o) { + if (o instanceof JPAMailboxAnnotationId) { + JPAMailboxAnnotationId that = (JPAMailboxAnnotationId) o; + return Objects.equal(this.mailboxId, that.mailboxId) && Objects.equal(this.key, that.key); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hashCode(mailboxId, key); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java index 8df5a47..69f5f11 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java @@ -31,6 +31,7 @@ import javax.mail.Flags; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; +import javax.persistence.Embeddable; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.IdClass; @@ -98,6 +99,7 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage { private static final String TOSTRING_SEPARATOR = " "; /** Identifies composite key */ + @Embeddable public static class MailboxIdUidKey implements Serializable { private static final long serialVersionUID = 7847632032426660997L; http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java index 154da10..c0f955a 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java @@ -38,7 +38,8 @@ import com.google.common.collect.ImmutableList; public interface JPAMailboxFixture { - List<Class<?>> MAILBOX_PERSISTANCE_CLASSES = ImmutableList.<Class<?>>of(JPAMailbox.class, + List<Class<?>> MAILBOX_PERSISTANCE_CLASSES = ImmutableList.<Class<?>>of( + JPAMailbox.class, AbstractJPAMailboxMessage.class, JPAMailboxMessage.class, JPAProperty.class, @@ -55,11 +56,13 @@ public interface JPAMailboxFixture { JpaCurrentQuota.class ); - List<String> MAILBOX_TABLE_NAMES = ImmutableList.<String>of("JAMES_MAIL_USERFLAG", + List<String> MAILBOX_TABLE_NAMES = ImmutableList.<String>of( + "JAMES_MAIL_USERFLAG", "JAMES_MAIL_PROPERTY", "JAMES_MAILBOX_ANNOTATION", "JAMES_MAILBOX", - "JAMES_MAIL"); + "JAMES_MAIL", + "JAMES_SUBSCRIPTION"); List<String> QUOTA_TABLES_NAMES = ImmutableList.<String>of( "JAMES_MAX_DEFAULT_MESSAGE_COUNT", http://git-wip-us.apache.org/repos/asf/james-project/blob/e9e1f557/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java index 4a742a6..74b1713 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java @@ -22,8 +22,10 @@ package org.apache.james.mailbox.jpa.mail; import java.util.List; import java.util.Random; +import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; +import com.google.common.base.Preconditions; import org.apache.commons.lang.NotImplementedException; import org.apache.james.backends.jpa.JpaTestCluster; import org.apache.james.mailbox.MessageUid; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org