This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-i18n.git


The following commit(s) were added to refs/heads/master by this push:
     new 00fc752  SLING-7542 : Avoid shared session/resource resolver usage     
SLING-7543 : Reduce reloading of bundles
00fc752 is described below

commit 00fc7524ff3b936802b92dace38e9e7bae4fe5d6
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Mar 16 13:40:45 2018 +0100

    SLING-7542 : Avoid shared session/resource resolver usage
        SLING-7543 : Reduce reloading of bundles
---
 .../sling/i18n/impl/JcrResourceBundleProvider.java | 33 ++++++++++++++--------
 1 file changed, 21 insertions(+), 12 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java 
b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
index 512d491..c1d64c0 100644
--- a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
+++ b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
@@ -201,14 +201,7 @@ public class JcrResourceBundleProvider implements 
ResourceBundleProvider, Resour
             locale = defaultLocale;
         }
 
-        try ( final ResourceResolver resolver = createResourceResolver() ) {
-
-            return getResourceBundleInternal(resolver, baseName, locale);
-        } catch ( final LoginException le) {
-            throw (MissingResourceException)new 
MissingResourceException("Unable to create service resource resolver",
-                    baseName,
-                    locale.toString()).initCause(le);
-        }
+        return getResourceBundleInternal(null, baseName, locale);
     }
 
     // ---------- ResourceChangeListener 
------------------------------------------------
@@ -446,7 +439,7 @@ public class JcrResourceBundleProvider implements 
ResourceBundleProvider, Resour
      *             created and the <code>ResourceResolver</code> is not
      *             available to access the resources.
      */
-    private ResourceBundle getResourceBundleInternal(final ResourceResolver 
resolver, final String baseName, final Locale locale) {
+    private ResourceBundle getResourceBundleInternal(ResourceResolver 
optionalResolver, final String baseName, final Locale locale) {
         final Key key = new Key(baseName, locale);
         JcrResourceBundle resourceBundle = resourceBundleCache.get(key);
         if (resourceBundle != null) {
@@ -463,9 +456,25 @@ public class JcrResourceBundleProvider implements 
ResourceBundleProvider, Resour
                     log.debug("getResourceBundleInternal({}): got cache hit on 
second try", key);
                 } else {
                     log.debug("getResourceBundleInternal({}): reading from 
Repository", key);
-                    resourceBundle = createResourceBundle(resolver, 
key.baseName, key.locale);
-                    resourceBundleCache.put(key, resourceBundle);
-                    registerResourceBundle(key, resourceBundle);
+                    ResourceResolver localResolver = null;
+                    try  {
+                        if ( optionalResolver == null ) {
+                            localResolver = createResourceResolver();
+                            optionalResolver = localResolver;
+                        }
+
+                        resourceBundle = 
createResourceBundle(optionalResolver, key.baseName, key.locale);
+                        resourceBundleCache.put(key, resourceBundle);
+                        registerResourceBundle(key, resourceBundle);
+                    } catch ( final LoginException le) {
+                        throw (MissingResourceException)new 
MissingResourceException("Unable to create service resource resolver",
+                                baseName,
+                                locale.toString()).initCause(le);
+                    } finally {
+                        if ( localResolver != null ) {
+                            localResolver.close();
+                        }
+                    }
                 }
             } catch (InterruptedException e) {
                 Thread.interrupted();

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to