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 ad...@apache.org on 2017/04/26 11:51:17 UTC

[08/12] james-project git commit: JAMES-2008 Solve various JPA troubbles

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 <bt...@linagora.com>
Authored: Fri Apr 21 15:38:40 2017 +0700
Committer: Antoine Duprat <ad...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org