SLING-7542 : Avoid shared session/resource resolver usage
    SLING-7543 : Reduce reloading of bundles
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 @@
             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 @@
      *             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 @@
                     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();