X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=jcr%2Forg.argeo.cms.jcr%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjcr%2Facr%2FJcrContentProvider.java;h=eaa27b7fc631d806fde1f1590c0eca142f786cd7;hb=87351c5000313de237947d57d6c328d07bad0c40;hp=235e27d1a922139558d8e8c42da322199340dda5;hpb=da9d144b6b241e1526a3bd255dff905a7969a5bc;p=lgpl%2Fargeo-commons.git diff --git a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java index 235e27d1a..eaa27b7fc 100644 --- a/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java +++ b/jcr/org.argeo.cms.jcr/src/org/argeo/cms/jcr/acr/JcrContentProvider.java @@ -16,7 +16,7 @@ import org.argeo.api.acr.Content; import org.argeo.api.acr.spi.ContentProvider; import org.argeo.api.acr.spi.ProvidedContent; import org.argeo.api.acr.spi.ProvidedSession; -import org.argeo.cms.acr.CmsContentRepository; +import org.argeo.api.cms.CmsConstants; import org.argeo.cms.acr.ContentUtils; import org.argeo.cms.jcr.CmsJcrUtils; import org.argeo.jcr.JcrException; @@ -24,23 +24,29 @@ import org.argeo.jcr.JcrUtils; /** A JCR workspace accessed as an {@link ContentProvider}. */ public class JcrContentProvider implements ContentProvider, NamespaceContext { + private Repository jcrRepository; private Session adminSession; private String mountPath; + // cache + private String jcrWorkspace; + private Map sessionAdapters = Collections.synchronizedMap(new HashMap<>()); public void start(Map properties) { - mountPath = properties.get(CmsContentRepository.ACR_MOUNT_PATH_PROPERTY); + mountPath = properties.get(CmsConstants.ACR_MOUNT_PATH); if ("/".equals(mountPath)) throw new IllegalArgumentException("JCR content provider cannot be root /"); Objects.requireNonNull(mountPath); - adminSession = CmsJcrUtils.openDataAdminSession(jcrRepository, null); + jcrWorkspace = ContentUtils.getParentPath(mountPath)[1]; + adminSession = CmsJcrUtils.openDataAdminSession(jcrRepository, jcrWorkspace); } public void stop() { - JcrUtils.logoutQuietly(adminSession); + if (adminSession.isLive()) + JcrUtils.logoutQuietly(adminSession); } public void setJcrRepository(Repository jcrRepository) { @@ -49,7 +55,6 @@ public class JcrContentProvider implements ContentProvider, NamespaceContext { @Override public ProvidedContent get(ProvidedSession contentSession, String relativePath) { - String jcrWorkspace = ContentUtils.getParentPath(mountPath)[1]; String jcrPath = "/" + relativePath; return new JcrContent(contentSession, this, jcrWorkspace, jcrPath); }