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