Author: cziegeler
Date: Mon Feb 1 18:21:25 2016
New Revision: 1727984
URL: http://svn.apache.org/viewvc?rev=1727984&view=rev
Log:
SLING-5470 : Resource providers might not be closed
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/AuthenticatedResourceProvider.java
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/AuthenticatedResourceProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/AuthenticatedResourceProvider.java?rev=1727984&r1=1727983&r2=1727984&view=diff
==============================================================================
---
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/AuthenticatedResourceProvider.java
(original)
+++
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/AuthenticatedResourceProvider.java
Mon Feb 1 18:21:25 2016
@@ -61,49 +61,51 @@ public class AuthenticatedResourceProvid
private final ResourceResolver resolver;
- private boolean authenticated;
+ private final ResourceResolverContext resolverContext;
- private Object contextData;
+ private volatile ResolverContext<Object> cachedContext;
- private ResolverContext<Object> cachedContext;
+ private volatile boolean authenticated;
- private final ResourceResolverContext combinedProvider;
@SuppressWarnings("unchecked")
public AuthenticatedResourceProvider(ResourceProvider<?> rp,
ResourceProviderInfo info,
ResourceResolver resolver,
Map<String, Object> authInfo,
- ResourceResolverContext combinedProvider) throws LoginException {
+ ResourceResolverContext resolverContext) throws LoginException {
this.rp = (ResourceProvider<Object>) rp;
this.info = info;
this.authInfo = authInfo;
this.resolver = resolver;
- this.combinedProvider = combinedProvider;
+ this.resolverContext = resolverContext;
if (info.getAuthType() == AuthType.required) {
authenticate();
}
}
- private Object authenticate() throws LoginException {
- if (!authenticated && (info.getAuthType() == AuthType.required ||
info.getAuthType() == AuthType.lazy)) {
- try {
- contextData = rp.authenticate(authInfo);
- } catch ( final LoginException le ) {
- logger.debug("Unable to login into resource provider " + rp,
le);
- throw le;
+ private ResolverContext<Object> authenticate() throws LoginException {
+ if ( cachedContext == null ) {
+ Object contextData = null;
+ if ( info.getAuthType() == AuthType.required || info.getAuthType()
== AuthType.lazy ) {
+ try {
+ contextData = rp.authenticate(authInfo);
+ } catch ( final LoginException le ) {
+ logger.debug("Unable to login into resource provider " +
rp, le);
+ throw le;
+ }
+ authenticated = true;
}
- authenticated = true;
+
+ cachedContext = new BasicResolveContext<Object>(resolver,
contextData, ResourceUtil.getParent(info.getPath()), this.resolverContext);
}
- return contextData;
+
+ return cachedContext;
}
@Override
public ResolverContext<Object> getContext() throws LoginException {
- if (cachedContext == null) {
- cachedContext = new BasicResolveContext<Object>(resolver,
authenticate(), ResourceUtil.getParent(info.getPath()), this.combinedProvider);
- }
- return cachedContext;
+ return authenticate();
}
@Override
@@ -115,8 +117,8 @@ public class AuthenticatedResourceProvid
logger.error("Can't create context", e);
}
authenticated = false;
- cachedContext = null;
}
+ cachedContext = null;
}
@Override