You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/04/19 04:04:31 UTC

[james-project] 40/49: JAMES-3737 Fix JPA EntityManager lifecycle

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 79cb58c8f97db298cbd750b2e1e197d451b062ce
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Apr 6 17:25:33 2022 +0700

    JAMES-3737 Fix JPA EntityManager lifecycle
---
 .../james/mailbox/store/StoreMessageManager.java   |  4 ++--
 .../imap/processor/AbstractMailboxProcessor.java   | 28 ++++++++++++----------
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 15d54828cd..18f665552d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -571,12 +571,12 @@ public class StoreMessageManager implements MessageManager {
         UidValidity uidValidity = getMailboxEntity().getUidValidity();
         MessageMapper messageMapper = mapperFactory.getMessageMapper(mailboxSession);
 
-        return Mono.zip(messageMapper.getLastUidReactive(mailbox)
+        return messageMapper.executeReactive(Mono.zip(messageMapper.getLastUidReactive(mailbox)
                 .map(optional -> optional
                     .map(MessageUid::next)
                     .orElse(MessageUid.MIN_VALUE)),
             messageMapper.getHighestModSeqReactive(mailbox))
-            .flatMap(t2 -> toMetadata(messageMapper, resetRecent, mailboxSession, fetchGroup, resolvedAcl, permanentFlags, uidValidity, t2.getT1(), t2.getT2()));
+            .flatMap(t2 -> toMetadata(messageMapper, resetRecent, mailboxSession, fetchGroup, resolvedAcl, permanentFlags, uidValidity, t2.getT1(), t2.getT2())));
     }
 
     @Override
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
index dac94c1a4b..63bb8f90b5 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
@@ -89,20 +89,24 @@ public abstract class AbstractMailboxProcessor<R extends ImapRequest> extends Ab
     protected final Mono<Void> doProcess(R acceptableMessage, Responder responder, ImapSession session) {
         if (acceptableMessage.getCommand().validForState(session.getState())) {
             MailboxSession mailboxSession = session.getMailboxSession();
-            getMailboxManager().startProcessingRequest(mailboxSession);
 
             return Mono.from(metricFactory.decoratePublisherWithTimerMetric(IMAP_PREFIX + acceptableMessage.getCommand().getName(),
-                processRequestReactive(acceptableMessage, session, responder)))
-                .doFinally(type -> getMailboxManager().endProcessingRequest(mailboxSession))
-                .onErrorResume(DeniedAccessOnSharedMailboxException.class, e -> {
-                    no(acceptableMessage, responder, HumanReadableText.DENIED_SHARED_MAILBOX);
-                    return Mono.empty();
-                })
-                .onErrorResume(e -> {
-                    LOGGER.error("Unexpected error during IMAP processing", e);
-                    no(acceptableMessage, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
-                    return Mono.empty();
-                });
+                Mono.<Void, Runnable>using(
+                    () -> {
+                        getMailboxManager().startProcessingRequest(mailboxSession);
+                        return () -> getMailboxManager().endProcessingRequest(mailboxSession);
+                    },
+                    c -> processRequestReactive(acceptableMessage, session, responder)
+                    .onErrorResume(DeniedAccessOnSharedMailboxException.class, e -> {
+                        no(acceptableMessage, responder, HumanReadableText.DENIED_SHARED_MAILBOX);
+                        return Mono.empty();
+                    })
+                    .onErrorResume(e -> {
+                        LOGGER.error("Unexpected error during IMAP processing", e);
+                        no(acceptableMessage, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
+                        return Mono.empty();
+                    }),
+                    Runnable::run)));
         } else {
             ImapResponseMessage response = factory.taggedNo(acceptableMessage.getTag(), acceptableMessage.getCommand(), HumanReadableText.INVALID_COMMAND);
             responder.respond(response);


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org