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/03/26 13:36:56 UTC

svn commit: r1461088 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: ItemImpl.java SessionImpl.java delegate/SessionDelegate.java

Author: mduerig
Date: Tue Mar 26 12:36:56 2013
New Revision: 1461088

URL: http://svn.apache.org/r1461088
Log:
OAK-672: Avoid JCR APIs calling other JCR APIs
- consolidate pre condition checks
- avoid duplicate path resolution in move method
- remove unused members from SessionDelegate

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.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

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java?rev=1461088&r1=1461087&r2=1461088&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java Tue Mar 26 12:36:56 2013
@@ -245,7 +245,7 @@ abstract class ItemImpl<T extends ItemDe
 
     protected abstract ItemDefinition getDefinition() throws RepositoryException;
 
-    public void checkProtected() throws RepositoryException {
+    void checkProtected() throws RepositoryException {
         ItemDefinition definition;
         try {
             definition = getDefinition();

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=1461088&r1=1461087&r2=1461088&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 Mar 26 12:36:56 2013
@@ -105,10 +105,6 @@ public class SessionImpl implements Jack
         }
     }
 
-    public void checkProtectedNodes(String... absJcrPaths) throws RepositoryException {
-        checkProtectedNodes(this, absJcrPaths);
-    }
-
     //------------------------------------------------------------< Session >---
 
     @Override
@@ -141,7 +137,7 @@ public class SessionImpl implements Jack
     @Override
     @Nonnull
     public Session impersonate(Credentials credentials) throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
 
         ImpersonationCredentials impCreds = new ImpersonationCredentials(credentials, dlg.getAuthInfo());
         return getRepository().login(impCreds, dlg.getWorkspaceName());
@@ -150,7 +146,7 @@ public class SessionImpl implements Jack
     @Override
     @Nonnull
     public ValueFactory getValueFactory() throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
         return sessionContext.getValueFactory();
     }
 
@@ -160,7 +156,7 @@ public class SessionImpl implements Jack
         return dlg.perform(new SessionOperation<NodeImpl<?>>() {
             @Override
             protected void checkPreconditions() throws RepositoryException {
-                ensureIsAlive();
+                dlg.checkAlive();
             }
 
             @Override
@@ -187,7 +183,7 @@ public class SessionImpl implements Jack
         return dlg.perform(new SessionOperation<NodeImpl<?>>() {
             @Override
             protected void checkPreconditions() throws RepositoryException {
-                ensureIsAlive();
+                dlg.checkAlive();
             }
 
             @Override
@@ -224,7 +220,7 @@ public class SessionImpl implements Jack
         return dlg.perform(new SessionOperation<NodeImpl<?>>() {
             @Override
             protected void checkPreconditions() throws RepositoryException {
-                ensureIsAlive();
+                dlg.checkAlive();
             }
 
             @Override
@@ -244,7 +240,7 @@ public class SessionImpl implements Jack
         return dlg.perform(new SessionOperation<Boolean>() {
             @Override
             protected void checkPreconditions() throws RepositoryException {
-                ensureIsAlive();
+                dlg.checkAlive();
             }
 
             @Override
@@ -300,24 +296,20 @@ public class SessionImpl implements Jack
         dlg.perform(new SessionOperation<Void>() {
             @Override
             protected void checkPreconditions() throws RepositoryException {
-                ensureIsAlive();
-                checkProtectedNodes(Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
+                dlg.checkAlive();
+                checkProtectedNodes(SessionImpl.this,
+                        Text.getRelativeParent(srcAbsPath, 1), Text.getRelativeParent(destAbsPath, 1));
             }
 
             @Override
             public Void perform() throws RepositoryException {
-                String oakPath = sessionContext.getOakPathKeepIndexOrThrowNotFound(destAbsPath);
-                String oakName = PathUtils.getName(oakPath);
+                String oakDestPath = sessionContext.getOakPathKeepIndexOrThrowNotFound(destAbsPath);
                 // handle index
-                if (oakName.contains("[")) {
+                if (PathUtils.getName(oakDestPath).contains("[")) {
                     throw new RepositoryException("Cannot create a new node using a name including an index");
                 }
 
-                dlg.move(
-                        getOakPathOrThrowNotFound(srcAbsPath),
-                        getOakPathOrThrowNotFound(oakPath),
-                        true);
-
+                dlg.move(getOakPathOrThrowNotFound(srcAbsPath), oakDestPath, true);
                 return null;
             }
         });
@@ -330,21 +322,21 @@ public class SessionImpl implements Jack
 
     @Override
     public void save() throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
         dlg.save();
         sessionContext.refresh();
     }
 
     @Override
     public void refresh(boolean keepChanges) throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
         dlg.refresh(keepChanges);
         sessionContext.refresh();
     }
 
     @Override
     public boolean hasPendingChanges() throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
         return dlg.hasPendingChanges();
     }
 
@@ -504,7 +496,7 @@ public class SessionImpl implements Jack
 
     @Override
     public boolean hasPermission(String absPath, String actions) throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
 
         String oakPath = sessionContext.getOakPathKeepIndex(absPath);
         if (oakPath == null) {
@@ -524,7 +516,7 @@ public class SessionImpl implements Jack
 
     @Override
     public boolean hasCapability(String methodName, Object target, Object[] arguments) throws RepositoryException {
-        ensureIsAlive();
+        dlg.checkAlive();
 
         // TODO
         return TODO.unimplemented().returnValue(false);
@@ -665,18 +657,4 @@ public class SessionImpl implements Jack
         return sessionContext.getUserManager();
     }
 
-    //------------------------------------------------------------< private >---
-
-    /**
-     * Ensure that this session is alive and throw an exception otherwise.
-     *
-     * @throws RepositoryException if this session has been rendered invalid
-     *                             for some reason (e.g. if this session has been closed explicitly by logout)
-     */
-    private void ensureIsAlive() throws RepositoryException {
-        // check session status
-        if (!dlg.isAlive()) {
-            throw new RepositoryException("This session has been closed.");
-        }
-    }
 }
\ No newline at end of file

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=1461088&r1=1461087&r2=1461088&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 Mar 26 12:36:56 2013
@@ -52,23 +52,6 @@ public class SessionDelegate {
     private int sessionOpCount;
     private int revision;
 
-    private abstract class SessionReadOperation<T> extends SessionOperation<T> {
-        @Override
-        protected void checkPreconditions() throws RepositoryException {
-            checkAlive();
-        }
-    }
-
-    private abstract class SessionWriteOperation<T> extends SessionReadOperation<T> {
-        @Override
-        protected void checkPreconditions() throws RepositoryException {
-            super.checkPreconditions();
-            if (isReadOnly()) {
-                throw new RepositoryException("This session is read only");
-            }
-        }
-    }
-
     public SessionDelegate(@Nonnull ContentSession contentSession) {
         this.contentSession = checkNotNull(contentSession);
         this.root = contentSession.getLatestRoot();
@@ -104,16 +87,6 @@ public class SessionDelegate {
         }
     }
 
-    public <T> T safePerform(SessionOperation<T> sessionOperation) {
-        try {
-            return perform(sessionOperation);
-        } catch (RepositoryException e) {
-            String msg = sessionOperation + "threw an unexpected exception";
-            log.error(msg, e);
-            throw new IllegalArgumentException(msg, e);
-        }
-    }
-
     @Nonnull  // FIXME this should be package private
     public Root getRoot() {
         return root;
@@ -124,20 +97,26 @@ public class SessionDelegate {
         return contentSession;
     }
 
+    /**
+     * Determine whether this session is alive and has not been logged
+     * out or become stale by other means.
+     * @return {@code true} if this session is alive, {@code false} otherwise.
+     */
     public boolean isAlive() {
         return isAlive;
     }
 
+    /**
+     * Check that this session is alive.
+     * @throws RepositoryException if this session is not alive
+     * @see #isAlive()
+     */
     public void checkAlive() throws RepositoryException {
         if (!isAlive()) {
             throw new RepositoryException("This session has been closed.");
         }
     }
 
-    public boolean isReadOnly() {
-        return false;
-    }
-
     @Nonnull
     public AuthInfo getAuthInfo() {
         return contentSession.getAuthInfo();