From d6c39dff84b6f323cb437360a29000393d959dbb Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 16 May 2022 10:45:06 +0200 Subject: [PATCH] Refresh JCR session --- .../org/argeo/cms/jcr/acr/JcrSessionAdapter.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrSessionAdapter.java b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrSessionAdapter.java index 896f30a9e..f02b8d213 100644 --- a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrSessionAdapter.java +++ b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrSessionAdapter.java @@ -10,6 +10,7 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.security.auth.Subject; +import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrUtils; /** Manages JCR {@link Session} in an ACR context. */ @@ -21,6 +22,8 @@ class JcrSessionAdapter { private boolean closed = false; + private Thread lastRetrievingThread = null; + public JcrSessionAdapter(Repository repository, Subject subject) { this.repository = repository; this.subject = subject; @@ -42,6 +45,8 @@ class JcrSessionAdapter { throw new IllegalStateException("JCR session adapter is closed."); Thread currentThread = Thread.currentThread(); + if (lastRetrievingThread == null) + lastRetrievingThread = currentThread; Map threadSession = threadSessions.get(currentThread); if (threadSession == null) { @@ -61,6 +66,15 @@ class JcrSessionAdapter { }); threadSession.put(workspace, session); } + + if (lastRetrievingThread != currentThread) { + try { + session.refresh(true); + } catch (RepositoryException e) { + throw new JcrException("Cannot refresh JCR session " + session, e); + } + } + lastRetrievingThread = currentThread; return session; } -- 2.39.2