You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2016/11/29 11:19:05 UTC
svn commit: r1771884 - in /sling/trunk/bundles/jcr/resource: ./
src/main/java/org/apache/sling/jcr/resource/internal/
src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/
src/test/java/org/apache/sling/jcr/resource/internal/
Author: stefanegli
Date: Tue Nov 29 11:19:04 2016
New Revision: 1771884
URL: http://svn.apache.org/viewvc?rev=1771884&view=rev
Log:
SLING-6174 : Use Jackrabbit/Oak globbing support : applying patch from Carsten
Modified:
sling/trunk/bundles/jcr/resource/pom.xml
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderState.java
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java
Modified: sling/trunk/bundles/jcr/resource/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/pom.xml?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/pom.xml (original)
+++ sling/trunk/bundles/jcr/resource/pom.xml Tue Nov 29 11:19:04 2016
@@ -50,8 +50,8 @@
<properties>
<site.jira.version.id>12314286</site.jira.version.id>
<site.javadoc.exclude>**.internal.**</site.javadoc.exclude>
- <oak.version>1.3.10</oak.version>
- <jackrabbit.version>2.11.2</jackrabbit.version>
+ <oak.version>1.5.13</oak.version>
+ <jackrabbit.version>2.13.4</jackrabbit.version>
</properties>
<build>
@@ -135,6 +135,13 @@
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-jcr</artifactId>
+ <version>${oak.version}</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
<artifactId>oak-core</artifactId>
<version>${oak.version}</version>
<scope>test</scope>
@@ -247,12 +254,6 @@
<version>1.4</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>oak-jcr</artifactId>
- <version>${oak.version}</version>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrListenerBaseConfig.java Tue Nov 29 11:19:04 2016
@@ -25,13 +25,13 @@ import java.util.Set;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
import org.apache.jackrabbit.api.observation.JackrabbitEventFilter;
import org.apache.jackrabbit.api.observation.JackrabbitObservationManager;
-import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.jackrabbit.oak.jcr.observation.filter.FilterFactory;
+import org.apache.jackrabbit.oak.jcr.observation.filter.OakEventFilter;
import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
import org.apache.sling.api.resource.path.Path;
import org.apache.sling.jcr.api.SlingRepository;
@@ -63,6 +63,7 @@ public class JcrListenerBaseConfig imple
throws RepositoryException {
this.pathMapper = pathMapper;
this.reporter = reporter;
+ // The session should have read access on the whole repository
this.session = repository.loginAdministrative(repository.getDefaultWorkspace());
}
@@ -75,107 +76,47 @@ public class JcrListenerBaseConfig imple
this.session.logout();
}
- public void register(final JcrResourceListener listener, final ObserverConfiguration config)
+ /**
+ * Register a JCR event listener
+ * @param listener The listener
+ * @param config The configuration
+ * @throws RepositoryException If registration fails.
+ */
+ public void register(final EventListener listener, final ObserverConfiguration config)
throws RepositoryException {
final ObservationManager mgr = this.session.getWorkspace().getObservationManager();
if ( mgr instanceof JackrabbitObservationManager ) {
- final JackrabbitEventFilter filter = new JackrabbitEventFilter();
-
+ final OakEventFilter filter = FilterFactory.wrap(new JackrabbitEventFilter());
// paths
final Set<String> paths = config.getPaths().toStringSet();
- final String[] pathArray = new String[paths.size()];
- int i=0;
- // remove global prefix
- boolean hasGlob = false;
+ int globCount = 0, pathCount = 0;
for(final String p : paths) {
if ( p.startsWith(Path.GLOB_PREFIX )) {
- hasGlob = true;
+ globCount++;
+ } else {
+ pathCount++;
}
- pathArray[i] = (p.startsWith(Path.GLOB_PREFIX) ? p.substring(Path.GLOB_PREFIX.length()) : p);
- i++;
}
- final EventListener regListener;
- if ( hasGlob ) {
- // TODO we can't use glob patterns directly here
- filter.setAbsPath("/");
- regListener = new EventListener() {
-
- @Override
- public void onEvent(final EventIterator events) {
- listener.onEvent(new EventIterator() {
-
- Event next = seek();
-
- private Event seek() {
- while ( events.hasNext() ) {
- final Event e = events.nextEvent();
- String path = null;
- try {
- path = e.getPath();
- if ( e.getType() == Event.PROPERTY_ADDED
- || e.getType() == Event.PROPERTY_CHANGED
- || e.getType() == Event.PROPERTY_REMOVED ) {
- path = ResourceUtil.getParent(path);
- }
- if ( config.getPaths().matches(path) != null ) {
- return e;
- }
- if ( path.endsWith("/jcr:content") && config.getPaths().matches(path.substring(0, path.length() - 12)) != null ) {
- return e;
-
- }
- } catch (RepositoryException e1) {
- // ignore
- }
- }
- return null;
- }
-
- @Override
- public void remove() {
- // we don't support this -> NOP
- }
-
- @Override
- public Object next() {
- return nextEvent();
- }
-
- @Override
- public boolean hasNext() {
- return next != null;
- }
-
- @Override
- public void skip(long skipNum) {
- // we don't support this -> NOP
- }
-
- @Override
- public long getSize() {
- // we don't support this -> 0
- return 0;
- }
-
- @Override
- public long getPosition() {
- // we don't support this -> 0
- return 0;
- }
-
- @Override
- public Event nextEvent() {
- final Event result = next;
- next = seek();
- return result;
- }
- });
- }
- };
+ final String[] pathArray = pathCount > 0 ? new String[pathCount] : null;
+ final String[] globArray = globCount > 0 ? new String[globCount] : null;
+ pathCount = 0;
+ globCount = 0;
- } else {
+ // create arrays and remove global prefix
+ for(final String p : paths) {
+ if ( p.startsWith(Path.GLOB_PREFIX )) {
+ globArray[globCount] = p.substring(Path.GLOB_PREFIX.length());
+ globCount++;
+ } else {
+ pathArray[pathCount] = p;
+ pathCount++;
+ }
+ }
+ if ( globArray != null ) {
+ filter.withIncludeGlobPaths(globArray);
+ }
+ if ( pathArray != null ) {
filter.setAdditionalPaths(pathArray);
- regListener = listener;
}
filter.setIsDeep(true);
@@ -191,13 +132,24 @@ public class JcrListenerBaseConfig imple
// types
filter.setEventTypes(this.getTypes(config));
- ((JackrabbitObservationManager)mgr).addEventListener(regListener, filter);
+ // nt:file handling
+ filter.withNodeTypeAggregate(new String[] {"nt:file"}, new String[] {"", "jcr:content"});
+
+ // anchestor removes
+ filter.withIncludeAncestorsRemove();
+
+ ((JackrabbitObservationManager)mgr).addEventListener(listener, filter);
} else {
throw new RepositoryException("Observation manager is not a JackrabbitObservationManager");
}
}
+ /**
+ * Get the event types based on the configuraiton
+ * @param c The configuration
+ * @return The event type mask
+ */
private int getTypes(final ObserverConfiguration c) {
int result = 0;
for (ChangeType t : c.getChangeTypes()) {
@@ -220,18 +172,22 @@ public class JcrListenerBaseConfig imple
return result;
}
- public void unregister(final JcrResourceListener listener) {
+ /**
+ * Unregister the listener.
+ * @param listener The listener
+ */
+ public void unregister(final EventListener listener) {
try {
this.session.getWorkspace().getObservationManager().removeEventListener(listener);
- } catch (RepositoryException e) {
+ } catch (final RepositoryException e) {
logger.warn("Unable to remove session listener: " + this, e);
}
}
- public Logger getLogger() {
- return this.logger;
- }
-
+ /**
+ * The observation reporter
+ * @return The observation reporter.
+ */
public ObservationReporter getReporter() {
return this.reporter;
}
@@ -239,8 +195,4 @@ public class JcrListenerBaseConfig imple
public PathMapper getPathMapper() {
return this.pathMapper;
}
-
- public Session getSession() {
- return this.session;
- }
}
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java Tue Nov 29 11:19:04 2016
@@ -30,15 +30,12 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
-import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.observation.JackrabbitEvent;
import org.apache.sling.api.resource.observation.ResourceChange;
import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
@@ -64,11 +61,24 @@ public class JcrResourceListener impleme
this.baseConfig.register(this, config);
}
+ /**
+ * Update the observation configuration.
+ *
+ * @param cfg The updated config
+ */
public void update(final ObserverConfiguration cfg) {
this.config = cfg;
}
/**
+ * Get the observation configuration
+ * @return The observation configuration
+ */
+ public ObserverConfiguration getConfig() {
+ return this.config;
+ }
+
+ /**
* Dispose this listener.
*/
@Override
@@ -86,39 +96,55 @@ public class JcrResourceListener impleme
final Map<String, ResourceChange> changedEvents = new HashMap<String, ResourceChange>();
final Map<String, ResourceChange> removedEvents = new HashMap<String, ResourceChange>();
- AtomicBoolean refreshedSession = new AtomicBoolean(false);
while ( events.hasNext() ) {
final Event event = events.nextEvent();
+ final String identifier;
+ final String path;
try {
- final String eventPath = event.getPath();
- final int type = event.getType();
+ identifier = event.getIdentifier();
+ path = event.getPath();
+ } catch (final RepositoryException e) {
+ // event.getPath or event.getIdentifier threw an exception
+ // there is nothing we can do about it anyway
+ continue;
+ }
+
+ final String eventPath = (identifier != null && identifier.startsWith("/") ? identifier : path);
+ final int type = event.getType();
- if ( type == PROPERTY_ADDED
+ if ( type == PROPERTY_ADDED && path.endsWith("/jcr:primaryType") ) {
+ final int lastSlash = path.lastIndexOf('/');
+ final String rsrcPath = path.substring(0, lastSlash);
+
+ // add is stronger than update
+ changedEvents.remove(rsrcPath);
+ addedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.ADDED));
+ } else if ( type == PROPERTY_ADDED
|| type == PROPERTY_REMOVED
|| type == PROPERTY_CHANGED ) {
+ final String rsrcPath;
+ if ( identifier == null || !identifier.startsWith("/") ) {
final int lastSlash = eventPath.lastIndexOf('/');
- final String rsrcPath = stripNtFilePath(eventPath.substring(0, lastSlash), refreshedSession);
- if ( !addedEvents.containsKey(rsrcPath)
- && !removedEvents.containsKey(rsrcPath)
- && !changedEvents.containsKey(rsrcPath) ) {
-
- changedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.CHANGED));
- }
+ rsrcPath = eventPath.substring(0, lastSlash);
} else {
- if ( type == NODE_ADDED ) {
- // add is stronger than update
- changedEvents.remove(eventPath);
- addedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.ADDED));
- } else if ( type == NODE_REMOVED) {
- // remove is stronger than add and change
- addedEvents.remove(eventPath);
- changedEvents.remove(eventPath);
- removedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.REMOVED));
- }
+ rsrcPath = eventPath;
}
- } catch (final RepositoryException e) {
- this.baseConfig.getLogger().error("Error during modification: {}", e);
+ if ( !addedEvents.containsKey(rsrcPath)
+ && !removedEvents.containsKey(rsrcPath)
+ && !changedEvents.containsKey(rsrcPath) ) {
+
+ changedEvents.put(rsrcPath, createResourceChange(event, rsrcPath, ChangeType.CHANGED));
+ }
+ } else if ( type == NODE_ADDED ) {
+ // add is stronger than update
+ changedEvents.remove(eventPath);
+ addedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.ADDED));
+ } else if ( type == NODE_REMOVED) {
+ // remove is stronger than add and change
+ addedEvents.remove(eventPath);
+ changedEvents.remove(eventPath);
+ removedEvents.put(eventPath, createResourceChange(event, eventPath, ChangeType.REMOVED));
}
}
@@ -152,31 +178,8 @@ public class JcrResourceListener impleme
return false;
}
- private static final String JCR_CONTENT_POSTFIX = "/" + JcrConstants.JCR_CONTENT;
-
- private String stripNtFilePath(final String path, final AtomicBoolean refreshedSession) {
- if (!path.endsWith(JCR_CONTENT_POSTFIX)) {
- return path;
- }
- try {
- if ( refreshedSession.compareAndSet(false, true) ) {
- baseConfig.getSession().refresh(false);
- }
- final Node node = baseConfig.getSession().getNode(path);
- final Node parent = node.getParent();
- if (parent.isNodeType(JcrConstants.NT_FILE)) {
- return parent.getPath();
- } else {
- return path;
- }
- } catch (final RepositoryException e) {
- return path;
- }
- }
-
@Override
public String toString() {
return "JcrResourceListener [" + config + "]";
}
-
}
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderState.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderState.java?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderState.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderState.java Tue Nov 29 11:19:04 2016
@@ -23,6 +23,7 @@ import java.io.IOException;
import javax.jcr.Session;
+import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.resource.internal.HelperData;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -33,7 +34,7 @@ class JcrProviderState implements Closea
private final BundleContext bundleContext;
- private final ServiceReference repositoryRef;
+ private final ServiceReference<SlingRepository> repositoryRef;
private final boolean logout;
@@ -41,11 +42,15 @@ class JcrProviderState implements Closea
private final HelperData helperData;
- JcrProviderState(Session session, HelperData helperData, boolean logout) {
+ JcrProviderState(final Session session, final HelperData helperData, final boolean logout) {
this(session, helperData, logout, null, null);
}
- JcrProviderState(Session session, HelperData helperData, boolean logout, BundleContext bundleContext, ServiceReference repositoryRef) {
+ JcrProviderState(final Session session,
+ final HelperData helperData,
+ final boolean logout,
+ final BundleContext bundleContext,
+ final ServiceReference<SlingRepository> repositoryRef) {
this.session = session;
this.bundleContext = bundleContext;
this.repositoryRef = repositoryRef;
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrProviderStateFactory.java Tue Nov 29 11:19:04 2016
@@ -50,7 +50,7 @@ public class JcrProviderStateFactory {
private final Logger logger = LoggerFactory.getLogger(JcrProviderStateFactory.class);
- private final ServiceReference repositoryReference;
+ private final ServiceReference<SlingRepository> repositoryReference;
private final SlingRepository repository;
@@ -58,7 +58,7 @@ public class JcrProviderStateFactory {
private final PathMapper pathMapper;
- public JcrProviderStateFactory(final ServiceReference repositoryReference,
+ public JcrProviderStateFactory(final ServiceReference<SlingRepository> repositoryReference,
final SlingRepository repository,
final AtomicReference<DynamicClassLoaderManager> dynamicClassLoaderManagerReference,
final PathMapper pathMapper) {
@@ -67,8 +67,8 @@ public class JcrProviderStateFactory {
this.dynamicClassLoaderManagerReference = dynamicClassLoaderManagerReference;
this.pathMapper = pathMapper;
}
-
- /** Get the calling Bundle from auth info, fail if not provided
+
+ /** Get the calling Bundle from auth info, fail if not provided
* @throws LoginException if no calling bundle info provided
*/
@CheckForNull
@@ -98,7 +98,7 @@ public class JcrProviderStateFactory {
final Bundle bundle = extractCallingBundle(authenticationInfo);
if (bundle != null) {
bc = bundle.getBundleContext();
- final SlingRepository repo = (SlingRepository) bc.getService(repositoryReference);
+ final SlingRepository repo = bc.getService(repositoryReference);
if (repo == null) {
logger.warn("Cannot login {} because cannot get SlingRepository on behalf of bundle {} ({})",
isLoginAdministrative ? "admin" : "service",
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java Tue Nov 29 11:19:04 2016
@@ -60,6 +60,7 @@ import org.apache.sling.spi.resource.pro
import org.apache.sling.spi.resource.provider.ResolveContext;
import org.apache.sling.spi.resource.provider.ResourceContext;
import org.apache.sling.spi.resource.provider.ResourceProvider;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
@@ -80,7 +81,8 @@ import org.slf4j.LoggerFactory;
ResourceProvider.PROPERTY_ADAPTABLE + ":Boolean=true",
ResourceProvider.PROPERTY_ATTRIBUTABLE + ":Boolean=true",
ResourceProvider.PROPERTY_REFRESHABLE + ":Boolean=true",
- ResourceProvider.PROPERTY_AUTHENTICATE + "=" + ResourceProvider.AUTHENTICATE_REQUIRED
+ ResourceProvider.PROPERTY_AUTHENTICATE + "=" + ResourceProvider.AUTHENTICATE_REQUIRED,
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
})
public class JcrResourceProvider extends ResourceProvider<JcrProviderState> {
@@ -111,7 +113,7 @@ public class JcrResourceProvider extends
private volatile JcrListenerBaseConfig listenerConfig;
/** The JCR observation listeners. */
- private volatile Map<ObserverConfiguration, Closeable> listeners = new HashMap<>();
+ private final Map<ObserverConfiguration, Closeable> listeners = new HashMap<>();
private volatile SlingRepository repository;
@@ -190,11 +192,13 @@ public class JcrResourceProvider extends
*/
private void registerListeners() {
if ( this.repository != null ) {
+ logger.debug("Registering resource listeners...");
try {
this.listenerConfig = new JcrListenerBaseConfig(this.getProviderContext().getObservationReporter(),
this.pathMapper,
this.repository);
for(final ObserverConfiguration config : this.getProviderContext().getObservationReporter().getObserverConfigurations()) {
+ logger.debug("Registering listener for {}", config.getPaths());
final Closeable listener = new JcrResourceListener(this.listenerConfig,
config);
this.listeners.put(config, listener);
@@ -202,6 +206,7 @@ public class JcrResourceProvider extends
} catch (final RepositoryException e) {
throw new SlingException("Can't create the JCR event listener.", e);
}
+ logger.debug("Registered resource listeners");
}
}
@@ -209,8 +214,10 @@ public class JcrResourceProvider extends
* Unregister all observation listeners.
*/
private void unregisterListeners() {
+ logger.debug("Unregistering resource listeners...");
for(final Closeable c : this.listeners.values()) {
try {
+ logger.debug("Removing listener for {}", ((JcrResourceListener)c).getConfig().getPaths());
c.close();
} catch (final IOException e) {
// ignore this as the method above does not throw it
@@ -225,6 +232,7 @@ public class JcrResourceProvider extends
}
this.listenerConfig = null;
}
+ logger.debug("Unregistered resource listeners");
}
/**
@@ -235,6 +243,7 @@ public class JcrResourceProvider extends
this.unregisterListeners();
this.registerListeners();
} else {
+ logger.debug("Updating resource listeners...");
final Map<ObserverConfiguration, Closeable> oldMap = new HashMap<>(this.listeners);
this.listeners.clear();
try {
@@ -242,8 +251,10 @@ public class JcrResourceProvider extends
// check if such a listener already exists
Closeable listener = oldMap.remove(config);
if ( listener == null ) {
+ logger.debug("Registering listener for {}", config.getPaths());
listener = new JcrResourceListener(this.listenerConfig, config);
} else {
+ logger.debug("Updating listener for {}", config.getPaths());
((JcrResourceListener)listener).update(config);
}
this.listeners.put(config, listener);
@@ -253,11 +264,13 @@ public class JcrResourceProvider extends
}
for(final Closeable c : oldMap.values()) {
try {
+ logger.debug("Removing listener for {}", ((JcrResourceListener)c).getConfig().getPaths());
c.close();
} catch (final IOException e) {
// ignore this as the method above does not throw it
}
}
+ logger.debug("Updated resource listeners");
}
}
Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java?rev=1771884&r1=1771883&r2=1771884&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/JcrResourceListenerTest.java Tue Nov 29 11:19:04 2016
@@ -160,7 +160,7 @@ public class JcrResourceListenerTest {
};
this.config.unregister(this.listener);
this.listener = null;
- final Session session = this.config.getSession();
+ final Session session = this.adminSession;
if ( !session.nodeExists("/libs") ) {
createNode(session, "/libs");
}