Repository: james-project Updated Branches: refs/heads/master 45c3dfb55 -> a2f22af4c
MAILBOX-307 Replace Transaction<Void> by lambda when working with Mappers Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3b247fd8 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3b247fd8 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3b247fd8 Branch: refs/heads/master Commit: 3b247fd8adc546880220965a91ced10ea691be77 Parents: f388ff9 Author: benwa <btell...@linagora.com> Authored: Mon Sep 25 15:26:14 2017 +0700 Committer: Matthieu Baechler <matth...@apache.org> Committed: Fri Sep 29 09:20:39 2017 +0200 ---------------------------------------------------------------------- .../mailbox/hbase/HBaseMailboxManager.java | 18 +--- .../james/mailbox/jpa/JPAMailboxManager.java | 14 +-- .../jpa/mail/TransactionalAnnotationMapper.java | 15 +-- .../jpa/mail/TransactionalMailboxMapper.java | 12 +-- .../jpa/mail/TransactionalMessageMapper.java | 11 +- .../mailbox/store/StoreMailboxManager.java | 100 ++++++++----------- .../mailbox/store/StoreSubscriptionManager.java | 30 ++---- .../james/mailbox/store/transaction/Mapper.java | 18 ++-- 8 files changed, 77 insertions(+), 141 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java index 1540b7b..72889f1 100644 --- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java +++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java @@ -36,7 +36,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.transaction.TransactionalMapper; +import org.apache.james.mailbox.store.transaction.Mapper; /** * HBase implementation of {@link StoreMailboxManager} @@ -71,20 +71,8 @@ public class HBaseMailboxManager extends StoreMailboxManager { final HBaseMailboxMapper mapper = (HBaseMailboxMapper) getMapperFactory().getMailboxMapper(mailboxSession); - mapper.execute(new TransactionalMapper.VoidTransaction() { - - @Override - public void runVoid() throws MailboxException { - mapper.deleteAllMemberships(); - } - }); - mapper.execute(new TransactionalMapper.VoidTransaction() { - - @Override - public void runVoid() throws MailboxException { - mapper.deleteAllMailboxes(); - } - }); + mapper.execute(Mapper.toTransaction(mapper::deleteAllMemberships)); + mapper.execute(Mapper.toTransaction(mapper::deleteAllMailboxes)); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java index d8180c7..a3d4f16 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java @@ -34,7 +34,7 @@ import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.transaction.TransactionalMapper; +import org.apache.james.mailbox.store.transaction.Mapper; /** * JPA implementation of {@link StoreMailboxManager} @@ -74,16 +74,8 @@ public abstract class JPAMailboxManager extends StoreMailboxManager { */ public void deleteEverything(MailboxSession mailboxSession) throws MailboxException { final JPAMailboxMapper mapper = (JPAMailboxMapper) getMapperFactory().getMailboxMapper(mailboxSession); - mapper.execute(new TransactionalMapper.VoidTransaction() { - public void runVoid() throws MailboxException { - mapper.deleteAllMemberships(); - } - }); - mapper.execute(new TransactionalMapper.VoidTransaction() { - public void runVoid() throws MailboxException { - mapper.deleteAllMailboxes(); - } - }); + mapper.execute(Mapper.toTransaction(mapper::deleteAllMemberships)); + mapper.execute(Mapper.toTransaction(mapper::deleteAllMailboxes)); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java index 0cc48b0..5d22541 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java @@ -28,6 +28,7 @@ import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.store.mail.AnnotationMapper; +import org.apache.james.mailbox.store.transaction.Mapper; import com.google.common.base.Throwables; @@ -71,12 +72,7 @@ public class TransactionalAnnotationMapper implements AnnotationMapper { @Override public void deleteAnnotation(final MailboxId mailboxId, final MailboxAnnotationKey key) { try { - wrapped.execute(new VoidTransaction() { - @Override - public void runVoid() throws MailboxException { - wrapped.deleteAnnotation(mailboxId, key); - } - }); + wrapped.execute(Mapper.toTransaction(() -> wrapped.deleteAnnotation(mailboxId, key))); } catch (MailboxException e) { Throwables.propagate(e); } @@ -85,12 +81,7 @@ public class TransactionalAnnotationMapper implements AnnotationMapper { @Override public void insertAnnotation(final MailboxId mailboxId, final MailboxAnnotation mailboxAnnotation) { try { - wrapped.execute(new VoidTransaction() { - @Override - public void runVoid() throws MailboxException { - wrapped.insertAnnotation(mailboxId, mailboxAnnotation); - } - }); + wrapped.execute(Mapper.toTransaction(() -> wrapped.insertAnnotation(mailboxId, mailboxAnnotation))); } catch (MailboxException e) { Throwables.propagate(e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java index 6e8ba66..f828dfd 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java @@ -29,6 +29,7 @@ import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.model.Mailbox; +import org.apache.james.mailbox.store.transaction.Mapper; public class TransactionalMailboxMapper implements MailboxMapper { private final JPAMailboxMapper wrapped; @@ -48,18 +49,13 @@ public class TransactionalMailboxMapper implements MailboxMapper { } @Override - public MailboxId save(final Mailbox mailbox) throws MailboxException { + public MailboxId save(Mailbox mailbox) throws MailboxException { return wrapped.execute(() -> wrapped.save(mailbox)); } @Override - public void delete(final Mailbox mailbox) throws MailboxException { - wrapped.execute(new VoidTransaction() { - @Override - public void runVoid() throws MailboxException { - wrapped.delete(mailbox); - } - }); + public void delete(Mailbox mailbox) throws MailboxException { + wrapped.execute(Mapper.toTransaction(() -> wrapped.delete(mailbox))); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java index 0bfd7f5..8aec65a 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java @@ -23,8 +23,10 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; + import javax.mail.Flags; +import org.apache.commons.lang.NotImplementedException; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxCounters; @@ -35,7 +37,7 @@ import org.apache.james.mailbox.store.FlagsUpdateCalculator; import org.apache.james.mailbox.store.mail.MessageMapper; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.MailboxMessage; -import org.apache.commons.lang.NotImplementedException; +import org.apache.james.mailbox.store.transaction.Mapper; public class TransactionalMessageMapper implements MessageMapper { private final JPAMessageMapper messageMapper; @@ -92,12 +94,7 @@ public class TransactionalMessageMapper implements MessageMapper { @Override public void delete(final Mailbox mailbox, final MailboxMessage message) throws MailboxException { - messageMapper.execute(new VoidTransaction() { - @Override - public void runVoid() throws MailboxException { - messageMapper.delete(mailbox, message); - } - }); + messageMapper.execute(Mapper.toTransaction(() -> messageMapper.delete(mailbox, message))); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index 710790b..a9398df 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -82,7 +82,6 @@ import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex; import org.apache.james.mailbox.store.search.MessageSearchIndex; import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex; import org.apache.james.mailbox.store.transaction.Mapper; -import org.apache.james.mailbox.store.transaction.TransactionalMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -552,13 +551,7 @@ public class StoreMailboxManager implements MailboxManager { if (!mailboxExists(mailbox, mailboxSession)) { final Mailbox m = doCreateMailbox(mailbox, mailboxSession); final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession); - mapper.execute(new TransactionalMapper.VoidTransaction() { - - public void runVoid() throws MailboxException { - mailboxIds.add(mapper.save(m)); - } - - }); + mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m)))); // notify listeners dispatcher.mailboxAdded(mailboxSession, m); @@ -606,41 +599,38 @@ public class StoreMailboxManager implements MailboxManager { } final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - mapper.execute(new Mapper.VoidTransaction() { - - public void runVoid() throws MailboxException { - // TODO put this into a serilizable transaction - final Mailbox mailbox = mapper.findMailboxByPath(from); - if (mailbox == null) { - throw new MailboxNotFoundException(from); + mapper.execute(Mapper.toTransaction(() -> { + // TODO put this into a serilizable transaction + final Mailbox mailbox = mapper.findMailboxByPath(from); + if (mailbox == null) { + throw new MailboxNotFoundException(from); + } + mailbox.setNamespace(to.getNamespace()); + mailbox.setUser(to.getUser()); + mailbox.setName(to.getName()); + mapper.save(mailbox); + + dispatcher.mailboxRenamed(session, from, mailbox); + + // rename submailboxes + final MailboxPath children = new MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + getDelimiter() + "%"); + locker.executeWithLock(session, children, (LockAwareExecution<Void>) () -> { + final List<Mailbox> subMailboxes = mapper.findMailboxWithPathLike(children); + for (Mailbox sub : subMailboxes) { + final String subOriginalName = sub.getName(); + final String subNewName = to.getName() + subOriginalName.substring(from.getName().length()); + final MailboxPath fromPath = new MailboxPath(children, subOriginalName); + sub.setName(subNewName); + mapper.save(sub); + dispatcher.mailboxRenamed(session, fromPath, sub); + + if (log.isDebugEnabled()) + log.debug("Rename mailbox sub-mailbox " + subOriginalName + " to " + subNewName); } - mailbox.setNamespace(to.getNamespace()); - mailbox.setUser(to.getUser()); - mailbox.setName(to.getName()); - mapper.save(mailbox); - - dispatcher.mailboxRenamed(session, from, mailbox); - - // rename submailboxes - final MailboxPath children = new MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() + getDelimiter() + "%"); - locker.executeWithLock(session, children, (LockAwareExecution<Void>) () -> { - final List<Mailbox> subMailboxes = mapper.findMailboxWithPathLike(children); - for (Mailbox sub : subMailboxes) { - final String subOriginalName = sub.getName(); - final String subNewName = to.getName() + subOriginalName.substring(from.getName().length()); - final MailboxPath fromPath = new MailboxPath(children, subOriginalName); - sub.setName(subNewName); - mapper.save(sub); - dispatcher.mailboxRenamed(session, fromPath, sub); - - if (log.isDebugEnabled()) - log.debug("Rename mailbox sub-mailbox " + subOriginalName + " to " + subNewName); - } - return null; + return null; - }, true); - } - }); + }, true); + })); } @@ -827,17 +817,10 @@ public class StoreMailboxManager implements MailboxManager { } @Override - public void setRights(MailboxPath mailboxPath, final MailboxACL.MailboxACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { + public void setRights(MailboxPath mailboxPath, MailboxACL.MailboxACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); final Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); - mapper.execute( - new Mapper.VoidTransaction() { - @Override - public void runVoid() throws MailboxException { - mapper.updateACL(mailbox, mailboxACLCommand); - } - } - ); + mapper.execute(Mapper.toTransaction(() -> mapper.updateACL(mailbox, mailboxACLCommand))); } @Override @@ -865,18 +848,15 @@ public class StoreMailboxManager implements MailboxManager { final AnnotationMapper annotationMapper = mailboxSessionMapperFactory.getAnnotationMapper(session); final MailboxId mailboxId = getMailbox(mailboxPath, session).getId(); - annotationMapper.execute(new Mapper.VoidTransaction() { - @Override - public void runVoid() throws MailboxException { - for (MailboxAnnotation annotation : mailboxAnnotations) { - if (annotation.isNil()) { - annotationMapper.deleteAnnotation(mailboxId, annotation.getKey()); - } else if (canInsertOrUpdate(mailboxId, annotation, annotationMapper)) { - annotationMapper.insertAnnotation(mailboxId, annotation); - } + annotationMapper.execute(Mapper.toTransaction(() -> { + for (MailboxAnnotation annotation : mailboxAnnotations) { + if (annotation.isNil()) { + annotationMapper.deleteAnnotation(mailboxId, annotation.getKey()); + } else if (canInsertOrUpdate(mailboxId, annotation, annotationMapper)) { + annotationMapper.insertAnnotation(mailboxId, annotation); } } - }); + })); } private boolean canInsertOrUpdate(MailboxId mailboxId, MailboxAnnotation annotation, AnnotationMapper annotationMapper) throws AnnotationException { http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java index fb0c38c..b804ee3 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java @@ -55,17 +55,13 @@ public class StoreSubscriptionManager implements SubscriptionManager { public void subscribe(final MailboxSession session, final String mailbox) throws SubscriptionException { final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session); try { - mapper.execute(new Mapper.VoidTransaction() { - - public void runVoid() throws MailboxException { - final Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox); - if (subscription == null) { - final Subscription newSubscription = createSubscription(session, mailbox); - mapper.save(newSubscription); - } + mapper.execute(Mapper.toTransaction(() -> { + Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox); + if (subscription == null) { + Subscription newSubscription = createSubscription(session, mailbox); + mapper.save(newSubscription); } - - }); + })); } catch (MailboxException e) { throw new SubscriptionException(e); } @@ -101,16 +97,12 @@ public class StoreSubscriptionManager implements SubscriptionManager { public void unsubscribe(final MailboxSession session, final String mailbox) throws SubscriptionException { final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session); try { - mapper.execute(new Mapper.VoidTransaction() { - - public void runVoid() throws MailboxException { - final Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox); - if (subscription != null) { - mapper.delete(subscription); - } + mapper.execute(Mapper.toTransaction(() -> { + Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox); + if (subscription != null) { + mapper.delete(subscription); } - - }); + })); } catch (MailboxException e) { throw new SubscriptionException(e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/3b247fd8/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java index 8d41340..22485c0 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java @@ -53,15 +53,15 @@ public interface Mapper { */ T run() throws MailboxException; } - - - abstract class VoidTransaction implements Transaction<Void> { - - public final Void run() throws MailboxException { - runVoid(); - return null; - } - public abstract void runVoid() throws MailboxException; + interface Operation { + void run() throws MailboxException; + } + + static Transaction<Void> toTransaction(Operation operation) throws MailboxException { + return () -> { + operation.run(); + return null; + }; } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org