You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/08/13 16:53:45 UTC

svn commit: r1513522 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: RepositoryImpl.java SessionContext.java SessionImpl.java delegate/SessionDelegate.java xml/ImportHandler.java

Author: mduerig
Date: Tue Aug 13 14:53:45 2013
New Revision: 1513522

URL: http://svn.apache.org/r1513522
Log:
OAK-958: Session related entities do not honour session refresh settings
push permission provider refresh logic down to SessionDelegate

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java?rev=1513522&r1=1513521&r2=1513522&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java Tue Aug 13 14:53:45 2013
@@ -57,7 +57,7 @@ public class RepositoryImpl implements J
      * Name of the session attribute value determining the session refresh
      * behaviour.
      *
-     * @see SessionDelegate#SessionDelegate(ContentSession, long)
+     * @see SessionDelegate#SessionDelegate(ContentSession, SecurityProvider, long)
      */
     public static final String REFRESH_INTERVAL = "oak.refresh-interval";
 
@@ -205,7 +205,7 @@ public class RepositoryImpl implements J
             ContentSession contentSession = contentRepository.login(credentials, workspaceName);
             SessionContext context = createSessionContext(
                     Collections.<String, Object>singletonMap(REFRESH_INTERVAL, refreshInterval),
-                    new SessionDelegate(contentSession, refreshInterval));
+                    new SessionDelegate(contentSession, securityProvider, refreshInterval));
             return context.getSession();
         } catch (LoginException e) {
             throw new javax.jcr.LoginException(e.getMessage(), e);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java?rev=1513522&r1=1513521&r2=1513522&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java Tue Aug 13 14:53:45 2013
@@ -52,7 +52,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
 import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
-import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration;
 import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
@@ -80,7 +79,6 @@ public class SessionContext implements N
     private WorkspaceImpl workspace = null;
 
     private AccessControlManager accessControlManager;
-    private PermissionProvider permissionProvider;
     private PrincipalManager principalManager;
     private UserManager userManager;
     private PrivilegeManager privilegeManager;
@@ -309,18 +307,9 @@ public class SessionContext implements N
         }
     }
 
-    public void refresh(boolean includeRoot) {
-        if (includeRoot) {
-            getSessionDelegate().getRoot().refresh();
-        }
-        if (permissionProvider != null) {
-            permissionProvider.refresh();
-        }
-    }
-
     @Nonnull
     public AccessManager getAccessManager() throws RepositoryException {
-        return new AccessManager(getPermissionProvider());
+        return new AccessManager(delegate.getPermissionProvider());
     }
 
     @Nonnull
@@ -337,15 +326,6 @@ public class SessionContext implements N
         namespaces.clear();
     }
 
-    //------------------------------------------------------------< private >---
-    @Nonnull
-    private PermissionProvider getPermissionProvider() {
-        if (permissionProvider == null) {
-            permissionProvider = getConfig(AuthorizationConfiguration.class).getPermissionProvider(delegate.getRoot(), delegate.getAuthInfo().getPrincipals());
-        }
-        return permissionProvider;
-    }
-
     @Nonnull
     private <T> T getConfig(Class<T> clss) {
         return repository.getSecurityProvider().getConfiguration(clss);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1513522&r1=1513521&r2=1513522&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java Tue Aug 13 14:53:45 2013
@@ -392,7 +392,6 @@ public class SessionImpl implements Jack
             @Override
             public Void perform() throws RepositoryException {
                 sd.save();
-                sessionContext.refresh(false);
                 return null;
             }
         });
@@ -404,7 +403,6 @@ public class SessionImpl implements Jack
             @Override
             public Void perform() throws RepositoryException {
                 sd.refresh(keepChanges);
-                sessionContext.refresh(false);
                 return null;
             }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java?rev=1513522&r1=1513521&r2=1513522&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java Tue Aug 13 14:53:45 2013
@@ -40,6 +40,9 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.core.IdentifierManager;
 import org.apache.jackrabbit.oak.jcr.operation.SessionOperation;
 import org.apache.jackrabbit.oak.jcr.security.AccessManager;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,6 +58,7 @@ public class SessionDelegate {
     private final Root root;
     private final IdentifierManager idManager;
     private final Exception initStackTrace;
+    private final PermissionProvider permissionProvider;
 
     private boolean isAlive = true;
     private int sessionOpCount;
@@ -73,14 +77,18 @@ public class SessionDelegate {
      * dispatcher in order.
      *
      * @param contentSession  the content session
+     * @param securityProvider the security provider
      * @param refreshInterval  refresh interval in seconds.
      */
-    public SessionDelegate(@Nonnull ContentSession contentSession, long refreshInterval) {
+    public SessionDelegate(@Nonnull ContentSession contentSession, SecurityProvider securityProvider, long refreshInterval) {
         this.contentSession = checkNotNull(contentSession);
         this.refreshInterval = MILLISECONDS.convert(refreshInterval, SECONDS);
         this.root = contentSession.getLatestRoot();
         this.idManager = new IdentifierManager(root);
         this.initStackTrace = new Exception("The session was created here:");
+        this.permissionProvider = securityProvider.getConfiguration(AuthorizationConfiguration.class)
+                .getPermissionProvider(root, contentSession.getAuthInfo().getPrincipals());
+
     }
 
     public synchronized void refreshAtNextAccess() {
@@ -296,6 +304,7 @@ public class SessionDelegate {
         } catch (CommitFailedException e) {
             throw newRepositoryException(e);
         }
+        permissionProvider.refresh();
     }
 
     public void refresh(boolean keepChanges) {
@@ -304,6 +313,7 @@ public class SessionDelegate {
         } else {
             root.refresh();
         }
+        permissionProvider.refresh();
     }
 
     //----------------------------------------------------------< Workspace >---
@@ -404,6 +414,11 @@ public class SessionDelegate {
         return root.getQueryEngine();
     }
 
+    @Nonnull
+    public PermissionProvider getPermissionProvider() {
+        return permissionProvider;
+    }
+
     /**
      * The current {@code Root} instance this session delegate instance operates on.
      * To ensure the returned root reflects the correct repository revision access

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java?rev=1513522&r1=1513521&r2=1513522&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java Tue Aug 13 14:53:45 2013
@@ -115,9 +115,11 @@ public class ImportHandler extends Defau
         if (isWorkspaceImport) {
             try {
                 root.commit();
-                sessionContext.refresh(true);
+                sessionContext.getSession().refresh(false);
             } catch (CommitFailedException e) {
                 throw new SAXException(e);
+            } catch (RepositoryException e) {
+                throw new SAXException(e);
             }
         }
     }