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