SLING-6395 : Reduce cost of JcrResourceBundleProvider.onChange(). Apply patch from Marcel Reutegger
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/i18n@1774128 13f79535-47bb-0310-9956-ffa450edef68
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 abd5e0d..d0a45e8 100644
--- a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
+++ b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
@@ -182,6 +182,7 @@
@Override
public void onChange(List<ResourceChange> changes) {
+ boolean refreshed = false;
for(final ResourceChange change : changes) {
log.trace("handleEvent: Detecting event {} for path '{}'", change.getType(), change.getPath());
@@ -211,6 +212,11 @@
}
}
// may be a completely new dictionary
+ if (!refreshed) {
+ // refresh at most once per onChange()
+ resourceResolver.refresh();
+ refreshed = true;
+ }
if (isDictionaryResource(change)) {
scheduleReloadBundles(true);
}
@@ -223,7 +229,6 @@
// therefore only consider changes either for sling:MessageEntry's
// or for JSON dictionaries
// get valuemap
- resourceResolver.refresh();
final Resource resource = resourceResolver.getResource(change.getPath());
if (resource == null) {
log.trace("Could not get resource for '{}' for event {}", change.getPath(), change.getType());