Ard Schrijvers pushed to branch bugfix/HSTTWO-3853 at cms-community / hippo-site-toolkit
Commits: 4bd450ee by Ard Schrijvers at 2016-11-01T17:09:43+01:00 HSTTWO-3853 Make sure JcrHippoRepository#initHippoRepository is never concurrently executed - - - - - 2 changed files: - components/core/src/main/resources/org/hippoecm/hst/site/container/SpringComponentManager-observation.xml - components/session-pool/src/main/java/org/hippoecm/hst/core/jcr/pool/JcrHippoRepository.java Changes: ===================================== components/core/src/main/resources/org/hippoecm/hst/site/container/SpringComponentManager-observation.xml ===================================== --- a/components/core/src/main/resources/org/hippoecm/hst/site/container/SpringComponentManager-observation.xml +++ b/components/core/src/main/resources/org/hippoecm/hst/site/container/SpringComponentManager-observation.xml @@ -43,7 +43,7 @@ </constructor-arg> </bean> - <!-- Start EventListenersContainer on context stopped event --> + <!-- Stops EventListenersContainer on context stopped event --> <bean class="org.hippoecm.hst.site.container.ApplicationEventMethodsInvoker"> <constructor-arg> <map> ===================================== components/session-pool/src/main/java/org/hippoecm/hst/core/jcr/pool/JcrHippoRepository.java ===================================== --- a/components/session-pool/src/main/java/org/hippoecm/hst/core/jcr/pool/JcrHippoRepository.java +++ b/components/session-pool/src/main/java/org/hippoecm/hst/core/jcr/pool/JcrHippoRepository.java @@ -1,5 +1,5 @@ /* - * Copyright 2008-2015 Hippo B.V. (http://www.onehippo.com) + * Copyright 2008-2016 Hippo B.V. (http://www.onehippo.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -97,36 +97,38 @@ public class JcrHippoRepository implements Repository { this.hstJmvEnabledUsers = hstJmvEnabledUsers; } - private synchronized void initHippoRepository() throws RepositoryException { - if (repositoryInitialized) { - return; - } + private void initHippoRepository() throws RepositoryException { + synchronized (JcrHippoRepository.class) { + if (repositoryInitialized) { + return; + } - try { - log.info("Trying to get hippo repository from {}.", repositoryURI); - - if (StringUtils.isEmpty(repositoryURI)) { - hippoRepository = HippoRepositoryFactory.getHippoRepository(); - } else if (repositoryURI.startsWith("java:")) { - InitialContext ctx = new InitialContext(); - Object repositoryObject = ctx.lookup(repositoryURI); - - if (repositoryObject instanceof Repository) { - jcrDelegateeRepository = (Repository) repositoryObject; - } else if (repositoryObject instanceof HippoRepository) { - hippoRepository = (HippoRepository) repositoryObject; + try { + log.info("Trying to get hippo repository from {}.", repositoryURI); + + if (StringUtils.isEmpty(repositoryURI)) { + hippoRepository = HippoRepositoryFactory.getHippoRepository(); + } else if (repositoryURI.startsWith("java:")) { + InitialContext ctx = new InitialContext(); + Object repositoryObject = ctx.lookup(repositoryURI); + + if (repositoryObject instanceof Repository) { + jcrDelegateeRepository = (Repository)repositoryObject; + } else if (repositoryObject instanceof HippoRepository) { + hippoRepository = (HippoRepository)repositoryObject; + } else { + throw new RepositoryException("Unknown repository object from " + repositoryURI + ": " + repositoryObject); + } } else { - throw new RepositoryException("Unknown repository object from " + repositoryURI + ": " + repositoryObject); + hippoRepository = HippoRepositoryFactory.getHippoRepository(repositoryURI); } - } else { - hippoRepository = HippoRepositoryFactory.getHippoRepository(repositoryURI); - } - log.info("Has retrieved hippo repository from {}.", repositoryURI); - } catch (Exception e) { - throw new RepositoryException(e); - } finally { - repositoryInitialized = (jcrDelegateeRepository != null || hippoRepository != null); + log.info("Has retrieved hippo repository from {}.", repositoryURI); + } catch (Exception e) { + throw new RepositoryException(e); + } finally { + repositoryInitialized = (jcrDelegateeRepository != null || hippoRepository != null); + } } } View it on GitLab: https://code.onehippo.org/cms-community/hippo-site-toolkit/commit/4bd450ee1af9f21a20b78ecc0723cc3e200a31b2
_______________________________________________ Hippocms-svn mailing list Hippocms-svn@lists.onehippo.org https://lists.onehippo.org/mailman/listinfo/hippocms-svn