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);
         }


Reply via email to