Author: cziegeler
Date: Fri Apr 28 07:54:10 2017
New Revision: 1792997
URL: http://svn.apache.org/viewvc?rev=1792997&view=rev
Log:
SLING-6591 : Improve cache updates
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
Modified:
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=1792997&r1=1792996&r2=1792997&view=diff
==============================================================================
---
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
(original)
+++
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
Fri Apr 28 07:54:10 2017
@@ -853,18 +853,19 @@ public class SlingServletResolver
// setup default servlet
this.getDefaultServlet();
- // and finally register as event listener
+ // and finally register as event listener if we need to flush the cache
+ if ( this.cache != null ) {
- final Dictionary<String, Object> props = new Hashtable<>();
- props.put("event.topics", new String[]
{"javax/script/ScriptEngineFactory/*",
-
"org/apache/sling/api/adapter/AdapterFactory/*","org/apache/sling/scripting/core/BindingsValuesProvider/*"
});
- props.put(ResourceChangeListener.PATHS, "/");
- props.put("service.description", "Apache Sling Servlet Resolver and
Error Handler");
- props.put("service.vendor","The Apache Software Foundation");
-
- this.eventHandlerReg = context
- .registerService(new String[]
{ResourceChangeListener.class.getName(), EventHandler.class.getName()}, this,
props);
+ final Dictionary<String, Object> props = new Hashtable<>();
+ props.put("event.topics", new String[]
{"javax/script/ScriptEngineFactory/*",
+
"org/apache/sling/api/adapter/AdapterFactory/*","org/apache/sling/scripting/core/BindingsValuesProvider/*"
});
+ props.put(ResourceChangeListener.PATHS, "/");
+ props.put("service.description", "Apache Sling Servlet Resolver
and Error Handler");
+ props.put("service.vendor","The Apache Software Foundation");
+ this.eventHandlerReg = context
+ .registerService(new String[]
{ResourceChangeListener.class.getName(), EventHandler.class.getName()}, this,
props);
+ }
this.plugin = new ServletResolverWebConsolePlugin(context);
if (this.cacheSize > 0) {
@@ -1068,25 +1069,7 @@ public class SlingServletResolver
*/
@Override
public void handleEvent(final Event event) {
- if (this.cache != null) {
- boolean flushCache = false;
- // we may receive different events
- final String topic = event.getTopic();
- if (topic.startsWith("javax/script/ScriptEngineFactory/")) {
- // script engine factory added or removed: we always flush
- flushCache = true;
- } else if
(topic.startsWith("org/apache/sling/api/adapter/AdapterFactory/")) {
- // adapter factory added or removed: we always flush
- // as adapting might be transitive
- flushCache = true;
- } else if
(topic.startsWith("org/apache/sling/scripting/core/BindingsValuesProvider/")) {
- // bindings values provide factory added or removed: we always
flush
- flushCache = true;
- }
- if (flushCache) {
- flushCache();
- }
- }
+ flushCache();
}
private void flushCache() {
@@ -1419,23 +1402,21 @@ public class SlingServletResolver
@Override
public void onChange(final List<ResourceChange> changes) {
- if (this.cache != null) {
- boolean flushCache = false;
- for(final ResourceChange change : changes){
- // if the path of the event is a sub path of a search path
- // we flush the whole cache
- final String path = change.getPath();
- int index = 0;
- while (!flushCache && index < searchPaths.length) {
- if (path.startsWith(this.searchPaths[index])) {
- flushCache = true;
- }
- index++;
- }
- if ( flushCache ) {
- flushCache();
- break; // we can stop looping
+ boolean flushCache = false;
+ for(final ResourceChange change : changes){
+ // if the path of the event is a sub path of a search path
+ // we flush the whole cache
+ final String path = change.getPath();
+ int index = 0;
+ while (!flushCache && index < searchPaths.length) {
+ if (path.startsWith(this.searchPaths[index])) {
+ flushCache = true;
}
+ index++;
+ }
+ if ( flushCache ) {
+ flushCache();
+ break; // we can stop looping
}
}
}