From 4f6de892b50455d9fe828f0a5245bef6209a143e Mon Sep 17 00:00:00 2001 From: Benjamin Gamard Date: Mon, 5 Mar 2018 11:57:56 +0100 Subject: [PATCH] #189: fire async event after transactionutil.handle --- .../async/TemporaryFileCleanupAsyncListener.java | 2 +- .../com/sismics/docs/core/util/TransactionUtil.java | 8 ++++++-- .../com/sismics/util/context/ThreadLocalContext.java | 10 ++++++++-- .../src/main/webapp/src/partial/docs/document.html | 6 +++--- .../java/com/sismics/docs/rest/TestAppResource.java | 4 ++-- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/docs-core/src/main/java/com/sismics/docs/core/listener/async/TemporaryFileCleanupAsyncListener.java b/docs-core/src/main/java/com/sismics/docs/core/listener/async/TemporaryFileCleanupAsyncListener.java index 378afb27..9bb6bfd3 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/listener/async/TemporaryFileCleanupAsyncListener.java +++ b/docs-core/src/main/java/com/sismics/docs/core/listener/async/TemporaryFileCleanupAsyncListener.java @@ -23,7 +23,7 @@ public class TemporaryFileCleanupAsyncListener { * Cleanup temporary files. * * @param event Temporary file cleanup event - * @throws Exception + * @throws Exception e */ @Subscribe public void on(final TemporaryFileCleanupAsyncEvent event) throws Exception { diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/TransactionUtil.java b/docs-core/src/main/java/com/sismics/docs/core/util/TransactionUtil.java index f92b4b2d..20a12f0d 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/TransactionUtil.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/TransactionUtil.java @@ -65,8 +65,6 @@ public class TransactionUtil { return; } - ThreadLocalContext.cleanup(); - // No error in the current request : commit the transaction if (em.isOpen()) { if (em.getTransaction() != null && em.getTransaction().isActive()) { @@ -79,6 +77,12 @@ public class TransactionUtil { } } } + + // Fire all pending async events after request transaction commit. + // This way, all modifications done during this request are available in the listeners. + context.fireAllAsyncEvents(); + + ThreadLocalContext.cleanup(); } /** diff --git a/docs-core/src/main/java/com/sismics/util/context/ThreadLocalContext.java b/docs-core/src/main/java/com/sismics/util/context/ThreadLocalContext.java index 2201f176..cc612250 100644 --- a/docs-core/src/main/java/com/sismics/util/context/ThreadLocalContext.java +++ b/docs-core/src/main/java/com/sismics/util/context/ThreadLocalContext.java @@ -8,6 +8,7 @@ import javax.persistence.EntityManager; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Iterator; import java.util.List; /** @@ -112,14 +113,19 @@ public class ThreadLocalContext { * Fire all pending async events. */ public void fireAllAsyncEvents() { - for (Object asyncEvent : asyncEventList) { + Iterator iterator = asyncEventList.iterator(); + while (iterator.hasNext()) { + Object asyncEvent = iterator.next(); + iterator.remove(); AppContext.getInstance().getAsyncEventBus().post(asyncEvent); } if (!temporaryFileList.isEmpty()) { // Some files were created during this request, add a cleanup event to the queue // It works because we are using a one thread executor - AppContext.getInstance().getAsyncEventBus().post(new TemporaryFileCleanupAsyncEvent(temporaryFileList)); + AppContext.getInstance().getAsyncEventBus().post( + new TemporaryFileCleanupAsyncEvent(Lists.newArrayList(temporaryFileList))); + temporaryFileList.clear(); } } } diff --git a/docs-web/src/main/webapp/src/partial/docs/document.html b/docs-web/src/main/webapp/src/partial/docs/document.html index 42f07e83..da3136f8 100644 --- a/docs-web/src/main/webapp/src/partial/docs/document.html +++ b/docs-web/src/main/webapp/src/partial/docs/document.html @@ -188,14 +188,14 @@ - Add this search query on the home + -
-
+
 
diff --git a/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java b/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java index c25a3649..5092e9fb 100644 --- a/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java +++ b/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java @@ -297,7 +297,7 @@ public class TestAppResource extends BaseJerseyTest { // Search for added documents json = target().path("/document/list") - .queryParam("search", "tag:Inbox") + .queryParam("search", "tag:Inbox full:content") .request() .cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken) .get(JsonObject.class); @@ -317,7 +317,7 @@ public class TestAppResource extends BaseJerseyTest { // Search for added documents json = target().path("/document/list") - .queryParam("search", "tag:Inbox") + .queryParam("search", "tag:Inbox full:content") .request() .cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken) .get(JsonObject.class);