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 ff244a9 SLING-7542 : Avoid shared session/resource resolver usage
SLING-7543 : Reduce reloading of bundles
ff244a9 is described below
commit ff244a977611b244bd2530b2e987b872c218a8fb
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Mar 16 12:07:56 2018 +0100
SLING-7542 : Avoid shared session/resource resolver usage
SLING-7543 : Reduce reloading of bundles
---
.../sling/i18n/impl/JcrResourceBundleProvider.java | 41 +++++++++++-----------
1 file changed, 21 insertions(+), 20 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 e7ddebb..512d491 100644
--- a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
+++ b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
@@ -150,9 +150,9 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
* Return root resource bundle as created on-demand by
* {@link #getRootResourceBundle()}.
*/
- private ResourceBundle rootResourceBundle;
+ private volatile ResourceBundle rootResourceBundle;
- private BundleContext bundleContext;
+ private volatile BundleContext bundleContext;
/**
* Each ResourceBundle is registered as a service. Each registration is
stored in this map with the locale & base name used as a key.
@@ -163,6 +163,10 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
private long invalidationDelay;
+ private ResourceResolver createResourceResolver() throws LoginException {
+ return resourceResolverFactory.getServiceResourceResolver(null);
+ }
+
// ---------- ResourceBundleProvider
---------------------------------------
/**
@@ -187,16 +191,12 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
* is not available to access the resources.
*/
@Override
- public ResourceBundle getResourceBundle(Locale locale) {
+ public ResourceBundle getResourceBundle(final Locale locale) {
return getResourceBundle(null, locale);
}
- private ResourceResolver createResourceResolver() throws LoginException {
- return resourceResolverFactory.getServiceResourceResolver(null);
- }
-
@Override
- public ResourceBundle getResourceBundle(String baseName, Locale locale) {
+ public ResourceBundle getResourceBundle(final String baseName, Locale
locale) {
if (locale == null) {
locale = defaultLocale;
}
@@ -343,7 +343,7 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
} else {
options = scheduler.NOW();
}
- options.name("JcrResourceBundleProvider: reload all resource bundles");
+ options.name("ResourceBundleProvider: reload all resource bundles");
scheduler.schedule(new Runnable() {
@Override
public void run() {
@@ -355,13 +355,11 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
}
private void scheduleReloadBundle(final JcrResourceBundle bundle) {
- String baseName = bundle.getBaseName();
- Locale locale = bundle.getLocale();
- final Key key = new Key(baseName, locale);
+ final Key key = new Key(bundle.getBaseName(), bundle.getLocale());
// defer this job
ScheduleOptions options = scheduler.AT(new
Date(System.currentTimeMillis() + invalidationDelay));
- final String jobName = "JcrResourceBundleProvider: reload bundle with
key " + key.toString();
+ final String jobName = "ResourceBundleProvider: reload bundle with key
" + key.toString();
scheduledJobNames.add(jobName);
options.name(jobName);
scheduler.schedule(new Runnable() {
@@ -434,6 +432,7 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
@Deactivate
protected void deactivate() {
clearCache();
+ this.bundleContext = null;
}
// ---------- internal
-----------------------------------------------------
@@ -568,12 +567,14 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
resourceBundleCache.clear();
languageRootPaths.clear();
+ final List<ServiceRegistration<ResourceBundle>> regs;
synchronized (this) {
- for (ServiceRegistration<ResourceBundle> serviceReg :
bundleServiceRegistrations.values()) {
- serviceReg.unregister();
- }
+ regs = new ArrayList<>(bundleServiceRegistrations.values());
bundleServiceRegistrations.clear();
}
+ for (final ServiceRegistration<ResourceBundle> serviceReg : regs) {
+ serviceReg.unregister();
+ }
}
private void preloadBundles() {
@@ -585,19 +586,19 @@ public class JcrResourceBundleProvider implements
ResourceBundleProvider, Resour
while (bundles.hasNext()) {
final Map<String,Object> bundle = bundles.next();
if (bundle.containsKey(PROP_LANGUAGE)) {
- Locale locale =
toLocale(bundle.get(PROP_LANGUAGE).toString());
+ final Locale locale =
toLocale(bundle.get(PROP_LANGUAGE).toString());
String baseName = null;
if (bundle.containsKey(PROP_BASENAME)) {
baseName = bundle.get(PROP_BASENAME).toString();
}
- Key key = new Key(baseName, locale);
+ final Key key = new Key(baseName, locale);
if (usedKeys.add(key)) {
- getResourceBundle(baseName, locale);
+ getResourceBundleInternal(resolver, baseName,
locale);
}
}
}
} catch ( final LoginException le) {
- log.error("Unable to login using service user", le);
+ log.error("Unable to create service user resource resolver.",
le);
}
}
}
--
To stop receiving notification emails like this one, please contact
[email protected].