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();