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