Author: cziegeler
Date: Mon Feb 1 18:30:21 2016
New Revision: 1727986
URL: http://svn.apache.org/viewvc?rev=1727986&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/ResourceProviderHandler.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/AuthenticatedResourceProvider.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/ResourceProviderAuthenticator.java
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java?rev=1727986&r1=1727985&r2=1727986&view=diff
==============================================================================
---
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
(original)
+++
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderHandler.java
Mon Feb 1 18:30:21 2016
@@ -32,10 +32,11 @@ public class ResourceProviderHandler imp
private final BundleContext bundleContext;
- private volatile ResourceProvider<?> provider;
-
private final ProviderContextImpl context = new ProviderContextImpl();
+ private volatile ResourceProvider<Object> provider;
+
+
public ResourceProviderHandler(final BundleContext bc, final
ResourceProviderInfo info) {
this.info = info;
this.bundleContext = bc;
@@ -45,15 +46,16 @@ public class ResourceProviderHandler imp
return this.info;
}
+ @SuppressWarnings("unchecked")
public boolean activate() {
- this.provider = (ResourceProvider<?>)
this.bundleContext.getService(this.info.getServiceReference());
+ this.provider = (ResourceProvider<Object>)
this.bundleContext.getService(this.info.getServiceReference());
if ( this.provider != null ) {
this.provider.start(context);
}
return this.provider != null;
}
- public ResourceProvider<?> getResourceProvider() {
+ public ResourceProvider<Object> getResourceProvider() {
return this.provider;
}
@@ -85,7 +87,7 @@ public class ResourceProviderHandler imp
public ProviderContextImpl getProviderContext() {
return this.context;
}
-
+
@Override
public String toString() {
return "[" + getClass().getSimpleName() +"# provider: " + provider + "
]";
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=1727986&r1=1727985&r2=1727986&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:30:21 2016
@@ -33,7 +33,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.runtime.dto.AuthType;
import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
-import org.apache.sling.resourceresolver.impl.providers.ResourceProviderInfo;
+import
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
import org.apache.sling.spi.resource.provider.QueryLanguageProvider;
import org.apache.sling.spi.resource.provider.ResolverContext;
import org.apache.sling.spi.resource.provider.ResourceContext;
@@ -53,9 +53,7 @@ public class AuthenticatedResourceProvid
private static final String FORBIDDEN_ATTRIBUTE =
ResourceResolverFactory.PASSWORD;
- private final ResourceProvider<Object> rp;
-
- private final ResourceProviderInfo info;
+ private final ResourceProviderHandler handler;
private final Map<String, Object> authInfo;
@@ -68,18 +66,15 @@ public class AuthenticatedResourceProvid
private volatile boolean authenticated;
- @SuppressWarnings("unchecked")
- public AuthenticatedResourceProvider(ResourceProvider<?> rp,
- ResourceProviderInfo info,
+ public AuthenticatedResourceProvider(final ResourceProviderHandler handler,
ResourceResolver resolver,
Map<String, Object> authInfo,
ResourceResolverContext resolverContext) throws LoginException {
- this.rp = (ResourceProvider<Object>) rp;
- this.info = info;
+ this.handler = handler;
this.authInfo = authInfo;
this.resolver = resolver;
this.resolverContext = resolverContext;
- if (info.getAuthType() == AuthType.required) {
+ if (handler.getInfo().getAuthType() == AuthType.required) {
authenticate();
}
}
@@ -87,17 +82,17 @@ public class AuthenticatedResourceProvid
private ResolverContext<Object> authenticate() throws LoginException {
if ( cachedContext == null ) {
Object contextData = null;
- if ( info.getAuthType() == AuthType.required || info.getAuthType()
== AuthType.lazy ) {
+ if ( (handler.getInfo().getAuthType() == AuthType.required ||
handler.getInfo().getAuthType() == AuthType.lazy) ) {
try {
- contextData = rp.authenticate(authInfo);
+ contextData =
handler.getResourceProvider().authenticate(authInfo);
} catch ( final LoginException le ) {
- logger.debug("Unable to login into resource provider " +
rp, le);
+ logger.debug("Unable to login into resource provider " +
handler.getResourceProvider(), le);
throw le;
}
authenticated = true;
}
- cachedContext = new BasicResolveContext<Object>(resolver,
contextData, ResourceUtil.getParent(info.getPath()), this.resolverContext);
+ cachedContext = new BasicResolveContext<Object>(resolver,
contextData, ResourceUtil.getParent(handler.getInfo().getPath()),
this.resolverContext);
}
return cachedContext;
@@ -112,7 +107,7 @@ public class AuthenticatedResourceProvid
public void logout() {
if (authenticated) {
try {
- rp.logout(getContext().getProviderState());
+
handler.getResourceProvider().logout(getContext().getProviderState());
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -124,7 +119,7 @@ public class AuthenticatedResourceProvid
@Override
public void refresh() {
try {
- rp.refresh(getContext());
+ handler.getResourceProvider().refresh(getContext());
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -133,7 +128,7 @@ public class AuthenticatedResourceProvid
@Override
public boolean isLive() {
try {
- return rp.isLive(getContext());
+ return handler.getResourceProvider().isLive(getContext());
} catch (LoginException e) {
logger.error("Can't create context", e);
return false;
@@ -143,7 +138,7 @@ public class AuthenticatedResourceProvid
@Override
public Resource getParent(Resource child) {
try {
- return rp.getParent(getContext(), child);
+ return handler.getResourceProvider().getParent(getContext(),
child);
} catch (LoginException e) {
logger.error("Can't create context", e);
return null;
@@ -163,7 +158,7 @@ public class AuthenticatedResourceProvid
};
}
try {
- return rp.getResource(getContext(), path, resourceContext, parent);
+ return handler.getResourceProvider().getResource(getContext(),
path, resourceContext, parent);
} catch (LoginException e) {
logger.error("Can't create context", e);
return null;
@@ -174,7 +169,7 @@ public class AuthenticatedResourceProvid
@Override
public Iterator<Resource> listChildren(Resource parent) {
try {
- return rp.listChildren(getContext(), parent);
+ return handler.getResourceProvider().listChildren(getContext(),
parent);
} catch (LoginException e) {
logger.error("Can't create context", e);
return null;
@@ -186,7 +181,7 @@ public class AuthenticatedResourceProvid
Set<String> attributeNames = new LinkedHashSet<String>();
Collection<String> rpAttributeNames = null;
try {
- rpAttributeNames = rp.getAttributeNames(getContext());
+ rpAttributeNames =
handler.getResourceProvider().getAttributeNames(getContext());
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -207,7 +202,7 @@ public class AuthenticatedResourceProvid
}
Object attribute = null;
try {
- attribute = rp.getAttribute(getContext(), name);
+ attribute =
handler.getResourceProvider().getAttribute(getContext(), name);
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -220,7 +215,7 @@ public class AuthenticatedResourceProvid
@Override
public Resource create(final ResourceResolver resolver, String path,
Map<String, Object> properties) throws PersistenceException {
try {
- return rp.create(getContext(), path, properties);
+ return handler.getResourceProvider().create(getContext(), path,
properties);
} catch (LoginException e) {
logger.error("Can't create context", e);
return null;
@@ -230,7 +225,7 @@ public class AuthenticatedResourceProvid
@Override
public void delete(Resource resource) throws PersistenceException {
try {
- rp.delete(getContext(), resource);
+ handler.getResourceProvider().delete(getContext(), resource);
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -239,7 +234,7 @@ public class AuthenticatedResourceProvid
@Override
public void revert() {
try {
- rp.revert(getContext());
+ handler.getResourceProvider().revert(getContext());
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -248,7 +243,7 @@ public class AuthenticatedResourceProvid
@Override
public void commit() throws PersistenceException {
try {
- rp.commit(getContext());
+ handler.getResourceProvider().commit(getContext());
} catch (LoginException e) {
logger.error("Can't create context", e);
}
@@ -257,7 +252,7 @@ public class AuthenticatedResourceProvid
@Override
public boolean hasChanges() {
try {
- return rp.hasChanges(getContext());
+ return handler.getResourceProvider().hasChanges(getContext());
} catch (LoginException e) {
logger.error("Can't create context", e);
return false;
@@ -265,7 +260,7 @@ public class AuthenticatedResourceProvid
}
private QueryLanguageProvider<Object> getQueryLanguageProvider() {
- return rp.getQueryLanguageProvider();
+ return handler.getResourceProvider().getQueryLanguageProvider();
}
@Override
@@ -314,7 +309,7 @@ public class AuthenticatedResourceProvid
@Override
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
try {
- return rp.adaptTo(getContext(), type);
+ return handler.getResourceProvider().adaptTo(getContext(), type);
} catch (LoginException e) {
logger.error("Can't create context", e);
return null;
@@ -324,7 +319,7 @@ public class AuthenticatedResourceProvid
@Override
public boolean copy(String srcAbsPath, String destAbsPath) throws
PersistenceException {
try {
- return rp.copy(getContext(), srcAbsPath, destAbsPath);
+ return handler.getResourceProvider().copy(getContext(),
srcAbsPath, destAbsPath);
} catch (LoginException e) {
throw new PersistenceException("Unable to create context.", e);
}
@@ -333,7 +328,7 @@ public class AuthenticatedResourceProvid
@Override
public boolean move(String srcAbsPath, String destAbsPath) throws
PersistenceException {
try {
- return rp.move(getContext(), srcAbsPath, destAbsPath);
+ return handler.getResourceProvider().move(getContext(),
srcAbsPath, destAbsPath);
} catch (LoginException e) {
throw new PersistenceException("Unable to create context.", e);
}
@@ -341,11 +336,11 @@ public class AuthenticatedResourceProvid
@Override
public ResourceProvider<Object> getResourceProvider() {
- return rp;
+ return handler.getResourceProvider();
}
@Override
public String toString() {
- return "[" + getClass().getSimpleName() + "# rp: " + rp + ",
authenticated: " + authenticated + "]";
+ return "[" + getClass().getSimpleName() + "# rp: " +
getResourceProvider() + ", authenticated: " + authenticated + "]";
}
}
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/ResourceProviderAuthenticator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/ResourceProviderAuthenticator.java?rev=1727986&r1=1727985&r2=1727986&view=diff
==============================================================================
---
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/ResourceProviderAuthenticator.java
(original)
+++
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/ResourceProviderAuthenticator.java
Mon Feb 1 18:30:21 2016
@@ -32,7 +32,6 @@ import org.apache.sling.api.resource.run
import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
import
org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
-import org.apache.sling.spi.resource.provider.ResourceProvider;
/**
* The authenticator is a per resource resolver instance.
@@ -70,16 +69,16 @@ public class ResourceProviderAuthenticat
/**
* Authenticate all handlers
* @param handlers
- * @param combinedProvider
+ * @param resolverContext
* @throws LoginException
*/
public void authenticateAll(final List<ResourceProviderHandler> handlers,
- final ResourceResolverContext combinedProvider)
+ final ResourceResolverContext resolverContext)
throws LoginException {
final List<StatefulResourceProvider> successfulHandlers = new
ArrayList<StatefulResourceProvider>();
for (final ResourceProviderHandler h : handlers) {
try {
- successfulHandlers.add(authenticate(h, combinedProvider));
+ successfulHandlers.add(authenticate(h, resolverContext));
} catch ( final LoginException le ) {
// logout from all successful handlers
for(final StatefulResourceProvider handler :
successfulHandlers) {
@@ -91,10 +90,10 @@ public class ResourceProviderAuthenticat
}
private @Nonnull StatefulResourceProvider authenticate(final
ResourceProviderHandler handler,
- ResourceResolverContext combinedProvider) throws LoginException {
+ ResourceResolverContext resolverContext) throws LoginException {
StatefulResourceProvider rp = stateful.get(handler);
if (rp == null) {
- rp = createStateful(handler, combinedProvider);
+ rp = createStateful(handler, resolverContext);
stateful.put(handler, rp);
if (handler.getInfo().getAuthType() != AuthType.no) {
authenticated.add(rp);
@@ -113,9 +112,9 @@ public class ResourceProviderAuthenticat
return stateful.values();
}
- public @Nonnull StatefulResourceProvider
getStateful(ResourceProviderHandler handler, ResourceResolverContext
combinedProvider)
+ public @Nonnull StatefulResourceProvider
getStateful(ResourceProviderHandler handler, ResourceResolverContext
resolverContext)
throws LoginException {
- return authenticate(handler, combinedProvider);
+ return authenticate(handler, resolverContext);
}
public Collection<StatefulResourceProvider> getAllUsedAuthenticated() {
@@ -131,11 +130,11 @@ public class ResourceProviderAuthenticat
}
public Collection<StatefulResourceProvider>
getAllBestEffort(List<ResourceProviderHandler> handlers,
- ResourceResolverContext combinedProvider) {
+ ResourceResolverContext resolverContext) {
List<StatefulResourceProvider> result = new
ArrayList<StatefulResourceProvider>(handlers.size());
for (ResourceProviderHandler h : handlers) {
try {
- result.add(getStateful(h, combinedProvider));
+ result.add(getStateful(h, resolverContext));
} catch ( final LoginException le) {
// ignore
}
@@ -146,17 +145,16 @@ public class ResourceProviderAuthenticat
/**
* Create a stateful resource provider
* @param handler Resource provider handler
- * @param combinedProvider Combined resource provider
+ * @param resolverContext Combined resource provider
* @return The stateful resource provider
* @throws LoginException
*/
private @Nonnull StatefulResourceProvider createStateful(
final ResourceProviderHandler handler,
- final ResourceResolverContext combinedProvider)
+ final ResourceResolverContext resolverContext)
throws LoginException {
- final ResourceProvider<?> rp = handler.getResourceProvider();
StatefulResourceProvider authenticated;
- authenticated = new AuthenticatedResourceProvider(rp,
handler.getInfo(), resolver, authInfo, combinedProvider);
+ authenticated = new AuthenticatedResourceProvider(handler, resolver,
authInfo, resolverContext);
if (handler.getInfo().getUseResourceAccessSecurity()) {
authenticated = new SecureResourceProviderDecorator(authenticated,
securityTracker);
}