Ard Schrijvers pushed to branch master 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

Reply via email to