in src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheInvalidator.java [116:147]
private void configureListener() {
this.scriptCache.clear();
if (extensions.isEmpty()) {
if (resourceChangeListener != null) {
resourceChangeListener.unregister();
resourceChangeListener = null;
}
} else {
final List<String> globPatterns = new ArrayList<>(extensions.size());
for (final String extension : extensions) {
globPatterns.add("glob:**/*.".concat(extension));
}
final String[] paths = globPatterns.toArray(new String[globPatterns.size()]);
if (resourceChangeListener != null) {
final Dictionary<String, Object> resourceChangeListenerProperties =
resourceChangeListener.getReference().getProperties();
if (!Arrays.equals(
paths, (String[]) resourceChangeListenerProperties.get(ResourceChangeListener.PATHS))) {
resourceChangeListenerProperties.put(ResourceChangeListener.PATHS, paths);
resourceChangeListener.setProperties(resourceChangeListenerProperties);
}
} else {
final Dictionary<String, Object> resourceChangeListenerProperties = new Hashtable<>();
resourceChangeListenerProperties.put(ResourceChangeListener.PATHS, paths);
resourceChangeListenerProperties.put(ResourceChangeListener.CHANGES, new String[] {
ResourceChange.ChangeType.CHANGED.name(), ResourceChange.ChangeType.REMOVED.name()
});
resourceChangeListener = bundleContext.registerService(
ResourceChangeListener.class, this, resourceChangeListenerProperties);
}
}
}