You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/02/12 07:43:24 UTC
svn commit: r1729940 -
/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/BasicResolveContext.java
Author: cziegeler
Date: Fri Feb 12 06:43:24 2016
New Revision: 1729940
URL: http://svn.apache.org/viewvc?rev=1729940&view=rev
Log:
SLING-5510 : Resource resolver should always use most current set of providers. Apply patch from Justin Edelson
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/BasicResolveContext.java
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/BasicResolveContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/BasicResolveContext.java?rev=1729940&r1=1729939&r2=1729940&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/BasicResolveContext.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/BasicResolveContext.java Fri Feb 12 06:43:24 2016
@@ -47,12 +47,6 @@ public class BasicResolveContext<T> impl
private final String parentPath;
- private volatile boolean parentLookupDone = false;
-
- private volatile ResourceProviderHandler parentProviderHandler;
-
- private volatile ResolveContext<Object> parentResolveContext;
-
public BasicResolveContext(@Nonnull final ResourceResolver resolver,
@Nonnull final ProviderManager resolveContextManager,
@Nonnull final ResourceResolverControl control,
@@ -77,40 +71,42 @@ public class BasicResolveContext<T> impl
@Override
public ResolveContext<?> getParentResolveContext() {
- this.getParentResourceProvider();
- return parentResolveContext;
+ final Object[] providerAndContext = getParentProviderAndContext();
+ return (ResolveContext<?>) (providerAndContext != null ? providerAndContext[1] : null);
}
@Override
public ResourceProvider<?> getParentResourceProvider() {
- if ( ! parentLookupDone ) {
- synchronized ( this ) {
- if ( this.parentPath != null ) {
- String path = this.parentPath;
- while ( path != null && this.parentProviderHandler == null ) {
- final Node<ResourceProviderHandler> node = this.control.getResourceProviderStorage().getTree().getBestMatchingNode(this.parentPath);
- if ( node != null ) {
- final ResourceProviderHandler handler = node.getValue();
- try {
- this.parentResolveContext = this.resolveContextManager.getOrCreateResolveContext(handler, this.control);
- if ( this.parentResolveContext != null ) {
- this.parentProviderHandler = handler;
- }
- } catch ( final LoginException se) {
- // skip this, try next
- }
- if ( this.parentProviderHandler == null ) {
- path = ResourceUtil.getParent(path);
- }
- } else {
- path = null;
+ final Object[] providerAndContext = getParentProviderAndContext();
+ return (ResourceProvider<?>) (providerAndContext != null ? providerAndContext[0] : null);
+ }
+
+ private Object[] getParentProviderAndContext() {
+ ResourceProvider<?> parentProvider = null;
+ ResolveContext<?> parentResolveContext = null;
+ if ( this.parentPath != null ) {
+ String path = this.parentPath;
+ while ( path != null && parentProvider == null ) {
+ final Node<ResourceProviderHandler> node = this.control.getResourceProviderStorage().getTree().getBestMatchingNode(path);
+ if ( node != null ) {
+ final ResourceProviderHandler handler = node.getValue();
+ try {
+ parentResolveContext = this.resolveContextManager.getOrCreateResolveContext(handler, this.control);
+ if ( parentResolveContext != null ) {
+ parentProvider = handler.getResourceProvider();
}
+ } catch ( final LoginException se) {
+ // skip this, try next
+ }
+ if ( parentProvider == null ) {
+ parentResolveContext = null;
+ path = ResourceUtil.getParent(path);
}
+ } else {
+ path = null;
}
- parentLookupDone = true;
}
}
- return this.parentProviderHandler != null ? this.parentProviderHandler.getResourceProvider() : null;
+ return parentProvider != null ? new Object[] {parentProvider, parentResolveContext} : null;
}
-
}