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:30 UTC
svn commit: r1513521 - in
/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr:
ItemImpl.java delegate/SessionDelegate.java
delegate/UserManagerDelegator.java lock/LockImpl.java
operation/SessionOperation.java
Author: mduerig
Date: Tue Aug 13 14:53:30 2013
New Revision: 1513521
URL: http://svn.apache.org/r1513521
Log:
OAK-938 UserManager does not honour session refresh settings
Add and use SessionDelegate.safePerform
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/delegate/SessionDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/operation/SessionOperation.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=1513521&r1=1513520&r2=1513521&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 Aug 13 14:53:30 2013
@@ -107,12 +107,7 @@ abstract class ItemImpl<T extends ItemDe
*/
@CheckForNull
protected final <U> U safePerform(@Nonnull SessionOperation<U> op) {
- try {
- return sessionDelegate.perform(op);
- } catch (RepositoryException e) {
- throw new RuntimeException(
- "Unexpected exception thrown by operation " + op, e);
- }
+ return sessionDelegate.safePerform(op);
}
//---------------------------------------------------------------< Item >---
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=1513521&r1=1513520&r2=1513521&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:30 2013
@@ -97,6 +97,7 @@ public class SessionDelegate {
* @param <T> return type of {@code sessionOperation}
* @return the result of {@code sessionOperation.perform()}
* @throws RepositoryException
+ * @see #getRoot()
*/
public synchronized <T> T perform(SessionOperation<T> sessionOperation)
throws RepositoryException {
@@ -136,6 +137,26 @@ public class SessionDelegate {
}
}
+ /**
+ * Same as {@link #perform(SessionOperation)} unless this method expects
+ * {@link SessionOperation#perform} <em>not</em> to throw a {@code RepositoryException}.
+ * Such exceptions will be wrapped into a {@code RuntimeException} and rethrown as they
+ * are considered an internal error.
+ *
+ * @param sessionOperation the {@code SessionOperation} to perform
+ * @param <T> return type of {@code sessionOperation}
+ * @return the result of {@code sessionOperation.perform()}
+ * @see #getRoot()
+ */
+ public <T> T safePerform(SessionOperation<T> sessionOperation) {
+ try {
+ return perform(sessionOperation);
+ } catch (RepositoryException e) {
+ throw new RuntimeException("Unexpected exception thrown by operation " +
+ sessionOperation, e);
+ }
+ }
+
@Nonnull
public ContentSession getContentSession() {
return contentSession;
@@ -383,13 +404,21 @@ public class SessionDelegate {
return root.getQueryEngine();
}
- //-----------------------------------------------------------< internal >---
-
- @Nonnull // FIXME this should be package private. OAK-672
+ /**
+ * The current {@code Root} instance this session delegate instance operates on.
+ * To ensure the returned root reflects the correct repository revision access
+ * should only be done from within a {@link SessionOperation} closure through
+ * {@link #perform(SessionOperation)}.
+ *
+ * @return current root
+ */
+ @Nonnull
public Root getRoot() {
return root;
}
+ //-----------------------------------------------------------< internal >---
+
/**
* Wraps the given {@link CommitFailedException} instance using the
* appropriate {@link RepositoryException} subclass based on the
@@ -401,5 +430,4 @@ public class SessionDelegate {
private static RepositoryException newRepositoryException(CommitFailedException exception) {
return exception.asRepositoryException();
}
-
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java?rev=1513521&r1=1513520&r2=1513521&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserManagerDelegator.java Tue Aug 13 14:53:30 2013
@@ -170,17 +170,12 @@ public class UserManagerDelegator implem
@Override
public boolean isAutoSave() {
- try {
- return sessionDelegate.perform(new UserManagerOperation<Boolean>(sessionDelegate) {
- @Override
- public Boolean perform() {
- return userManagerDelegate.isAutoSave();
- }
- });
- } catch (RepositoryException e) {
- assert false : "Unexpected exception: " + e;
- return false;
- }
+ return sessionDelegate.safePerform(new UserManagerOperation<Boolean>(sessionDelegate) {
+ @Override
+ public Boolean perform() {
+ return userManagerDelegate.isAutoSave();
+ }
+ });
}
@Override
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockImpl.java?rev=1513521&r1=1513520&r2=1513521&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockImpl.java Tue Aug 13 14:53:30 2013
@@ -119,12 +119,7 @@ public final class LockImpl implements L
*/
@CheckForNull
private final <U> U safePerform(@Nonnull SessionOperation<U> op) {
- try {
- return context.getSessionDelegate().perform(op);
- } catch (RepositoryException e) {
- throw new RuntimeException(
- "Unexpected exception thrown by operation " + op, e);
- }
+ return context.getSessionDelegate().safePerform(op);
}
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/operation/SessionOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/operation/SessionOperation.java?rev=1513521&r1=1513520&r2=1513521&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/operation/SessionOperation.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/operation/SessionOperation.java Tue Aug 13 14:53:30 2013
@@ -22,6 +22,7 @@ import javax.jcr.RepositoryException;
/**
* A {@code SessionOperation} provides an execution context for executing session scoped operations.
+ * @see org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate#perform(SessionOperation)
*/
public abstract class SessionOperation<T> {