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 2014/03/24 17:33:02 UTC

svn commit: r1580906 [1/2] - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: delegate/ lock/ query/ security/ session/ session/operation/ version/

Author: mduerig
Date: Mon Mar 24 16:33:01 2014
New Revision: 1580906

URL: http://svn.apache.org/r1580906
Log:
OAK-1601: Log warning on concurrent session access
Add names to operation for better logging

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AccessControlManagerDelegator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/JackrabbitAccessControlManagerDelegator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrincipalManagerDelegator.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrivilegeManagerDelegator.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/UserDelegator.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/lock/LockManagerImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/AccessManager.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/PropertyImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/ItemOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/NodeOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/PropertyOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/SessionOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/operation/UserManagerOperation.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/version/VersionManagerImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AccessControlManagerDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AccessControlManagerDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AccessControlManagerDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AccessControlManagerDelegator.java Mon Mar 24 16:33:01 2014
@@ -44,7 +44,7 @@ public class AccessControlManagerDelegat
 
     @Override
     public Privilege[] getSupportedPrivileges(final String absPath) throws RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege[]>() {
+        return delegate.perform(new SessionOperation<Privilege[]>("getSupportedPrivileges") {
             @Override
             public Privilege[] perform() throws RepositoryException {
                 return acManager.getSupportedPrivileges(absPath);
@@ -54,7 +54,7 @@ public class AccessControlManagerDelegat
 
     @Override
     public Privilege privilegeFromName(final String privilegeName) throws RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege>() {
+        return delegate.perform(new SessionOperation<Privilege>("privilegeFromName") {
             @Override
             public Privilege perform() throws RepositoryException {
                 return acManager.privilegeFromName(privilegeName);
@@ -65,7 +65,7 @@ public class AccessControlManagerDelegat
     @Override
     public boolean hasPrivileges(final String absPath, final Privilege[] privileges)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<Boolean>() {
+        return delegate.perform(new SessionOperation<Boolean>("hasPrivileges") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return acManager.hasPrivileges(absPath, privileges);
@@ -75,7 +75,7 @@ public class AccessControlManagerDelegat
 
     @Override
     public Privilege[] getPrivileges(final String absPath) throws RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege[]>() {
+        return delegate.perform(new SessionOperation<Privilege[]>("getPrivileges") {
             @Override
             public Privilege[] perform() throws RepositoryException {
                 return acManager.getPrivileges(absPath);
@@ -85,7 +85,7 @@ public class AccessControlManagerDelegat
 
     @Override
     public AccessControlPolicy[] getPolicies(final String absPath) throws RepositoryException {
-        return delegate.perform(new SessionOperation<AccessControlPolicy[]>() {
+        return delegate.perform(new SessionOperation<AccessControlPolicy[]>("getPolicies") {
             @Override
             public AccessControlPolicy[] perform() throws RepositoryException {
                 return acManager.getPolicies(absPath);
@@ -96,7 +96,7 @@ public class AccessControlManagerDelegat
     @Override
     public AccessControlPolicy[] getEffectivePolicies(final String absPath)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<AccessControlPolicy[]>() {
+        return delegate.perform(new SessionOperation<AccessControlPolicy[]>("getEffectivePolicies") {
             @Override
             public AccessControlPolicy[] perform() throws RepositoryException {
                 return acManager.getEffectivePolicies(absPath);
@@ -107,7 +107,7 @@ public class AccessControlManagerDelegat
     @Override
     public AccessControlPolicyIterator getApplicablePolicies(final String absPath)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<AccessControlPolicyIterator>() {
+        return delegate.perform(new SessionOperation<AccessControlPolicyIterator>("getApplicablePolicies") {
             @Override
             public AccessControlPolicyIterator perform() throws RepositoryException {
                 return acManager.getApplicablePolicies(absPath);
@@ -118,7 +118,7 @@ public class AccessControlManagerDelegat
     @Override
     public void setPolicy(final String absPath, final AccessControlPolicy policy)
             throws RepositoryException {
-        delegate.perform(new SessionOperation<Void>() {
+        delegate.perform(new SessionOperation<Void>("setPolicy") {
             @Override
             public Void perform() throws RepositoryException {
                 acManager.setPolicy(absPath, policy);
@@ -130,7 +130,7 @@ public class AccessControlManagerDelegat
     @Override
     public void removePolicy(final String absPath, final AccessControlPolicy policy)
             throws RepositoryException {
-        delegate.perform(new SessionOperation<Void>() {
+        delegate.perform(new SessionOperation<Void>("removePolicy") {
             @Override
             public Void perform() throws RepositoryException {
                 acManager.removePolicy(absPath, policy);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/AuthorizableDelegator.java Mon Mar 24 16:33:01 2014
@@ -19,8 +19,11 @@
 
 package org.apache.jackrabbit.oak.jcr.delegate;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import java.security.Principal;
 import java.util.Iterator;
+
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
@@ -33,8 +36,6 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
 /**
  * Base class for {@link GroupDelegator} and {@link UserDelegator}.
  */
@@ -71,7 +72,7 @@ abstract class AuthorizableDelegator imp
     //-------------------------------------------------------< Authorizable >---
     @Override
     public boolean isGroup() {
-        return sessionDelegate.safePerform(new SessionOperation<Boolean>() {
+        return sessionDelegate.safePerform(new SessionOperation<Boolean>("isGroup") {
             @Override
             public Boolean perform() {
                 return delegate.isGroup();
@@ -81,7 +82,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public String getID() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<String>() {
+        return sessionDelegate.perform(new SessionOperation<String>("getID") {
             @Override
             public String perform() throws RepositoryException {
                 return delegate.getID();
@@ -93,7 +94,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public Principal getPrincipal() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Principal>() {
+        return sessionDelegate.perform(new SessionOperation<Principal>("getPrincipal") {
             @Override
             public Principal perform() throws RepositoryException {
                 return delegate.getPrincipal();
@@ -103,7 +104,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public Iterator<Group> declaredMemberOf() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Iterator<Group>>() {
+        return sessionDelegate.perform(new SessionOperation<Iterator<Group>>("declaredMemberOf") {
             @Override
             public Iterator<Group> perform() throws RepositoryException {
                 Iterator<Group> groups = delegate.declaredMemberOf();
@@ -120,7 +121,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public Iterator<Group> memberOf() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Iterator<Group>>() {
+        return sessionDelegate.perform(new SessionOperation<Iterator<Group>>("memberOf") {
             @Override
             public Iterator<Group> perform() throws RepositoryException {
                 Iterator<Group> groups = delegate.memberOf();
@@ -137,7 +138,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public void remove() throws RepositoryException {
-        sessionDelegate.perform(new SessionOperation<Void>() {
+        sessionDelegate.perform(new SessionOperation<Void>("remove") {
             @Override
             public Void perform() throws RepositoryException {
                 delegate.remove();
@@ -148,7 +149,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public Iterator<String> getPropertyNames() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Iterator<String>>() {
+        return sessionDelegate.perform(new SessionOperation<Iterator<String>>("getPropertyNames") {
             @Override
             public Iterator<String> perform() throws RepositoryException {
                 return delegate.getPropertyNames();
@@ -158,7 +159,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public Iterator<String> getPropertyNames(final String relPath) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Iterator<String>>() {
+        return sessionDelegate.perform(new SessionOperation<Iterator<String>>("getPropertyNames") {
             @Override
             public Iterator<String> perform() throws RepositoryException {
                 return delegate.getPropertyNames(relPath);
@@ -168,7 +169,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public boolean hasProperty(final String relPath) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("hasProperty") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return delegate.hasProperty(relPath);
@@ -178,7 +179,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public void setProperty(final String relPath, final Value value) throws RepositoryException {
-        sessionDelegate.perform(new SessionOperation<Void>() {
+        sessionDelegate.perform(new SessionOperation<Void>("setProperty") {
             @Override
             public Void perform() throws RepositoryException {
                 delegate.setProperty(relPath, value);
@@ -189,7 +190,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public void setProperty(final String relPath, final Value[] value) throws RepositoryException {
-        sessionDelegate.perform(new SessionOperation<Void>() {
+        sessionDelegate.perform(new SessionOperation<Void>("setProperty") {
             @Override
             public Void perform() throws RepositoryException {
                 delegate.setProperty(relPath, value);
@@ -200,7 +201,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public Value[] getProperty(final String relPath) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Value[]>() {
+        return sessionDelegate.perform(new SessionOperation<Value[]>("getProperty") {
             @Override
             public Value[] perform() throws RepositoryException {
                 return delegate.getProperty(relPath);
@@ -210,7 +211,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public boolean removeProperty(final String relPath) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("removeProperty") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return delegate.removeProperty(relPath);
@@ -220,7 +221,7 @@ abstract class AuthorizableDelegator imp
 
     @Override
     public String getPath() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<String>() {
+        return sessionDelegate.perform(new SessionOperation<String>("getPath") {
             @Override
             public String perform() throws RepositoryException {
                 return delegate.getPath();

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/GroupDelegator.java Mon Mar 24 16:33:01 2014
@@ -66,7 +66,7 @@ final class GroupDelegator extends Autho
     //--------------------------------------------------------------< Group >---
     @Override
     public Iterator<Authorizable> getDeclaredMembers() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Iterator<Authorizable>>() {
+        return sessionDelegate.perform(new SessionOperation<Iterator<Authorizable>>("getDeclaredMembers") {
             @Override
             public Iterator<Authorizable> perform() throws RepositoryException {
                 Iterator<Authorizable> authorizables = getDelegate().getDeclaredMembers();
@@ -83,7 +83,7 @@ final class GroupDelegator extends Autho
 
     @Override
     public Iterator<Authorizable> getMembers() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Iterator<Authorizable>>() {
+        return sessionDelegate.perform(new SessionOperation<Iterator<Authorizable>>("getMembers") {
             @Override
             public Iterator<Authorizable> perform() throws RepositoryException {
                 Iterator<Authorizable> authorizables = getDelegate().getMembers();
@@ -100,7 +100,7 @@ final class GroupDelegator extends Autho
 
     @Override
     public boolean isDeclaredMember(final Authorizable authorizable) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("isDeclaredMember") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return getDelegate().isDeclaredMember(unwrap(authorizable));
@@ -110,7 +110,7 @@ final class GroupDelegator extends Autho
 
     @Override
     public boolean isMember(final Authorizable authorizable) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("isMember") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return getDelegate().isMember(unwrap(authorizable));
@@ -120,7 +120,7 @@ final class GroupDelegator extends Autho
 
     @Override
     public boolean addMember(final Authorizable authorizable) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("addMember") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return getDelegate().addMember(unwrap(authorizable));
@@ -130,7 +130,7 @@ final class GroupDelegator extends Autho
 
     @Override
     public boolean removeMember(final Authorizable authorizable) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("removeMember") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return getDelegate().removeMember(unwrap(authorizable));

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/ImpersonationDelegator.java Mon Mar 24 16:33:01 2014
@@ -19,7 +19,10 @@
 
 package org.apache.jackrabbit.oak.jcr.delegate;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 import java.security.Principal;
+
 import javax.jcr.RepositoryException;
 import javax.security.auth.Subject;
 
@@ -27,8 +30,6 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.Impersonation;
 import org.apache.jackrabbit.oak.jcr.session.operation.SessionOperation;
 
-import static com.google.common.base.Preconditions.checkArgument;
-
 /**
  * This implementation of {@code Impersonation} delegates back to a
  * delegatee wrapping each call into a {@link SessionOperation} closure.
@@ -55,7 +56,7 @@ final class ImpersonationDelegator imple
 
     @Override
     public PrincipalIterator getImpersonators() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<PrincipalIterator>() {
+        return sessionDelegate.perform(new SessionOperation<PrincipalIterator>("getImpersonators") {
             @Override
             public PrincipalIterator perform() throws RepositoryException {
                 return impersonationDelegate.getImpersonators();
@@ -65,7 +66,7 @@ final class ImpersonationDelegator imple
 
     @Override
     public boolean grantImpersonation(final Principal principal) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("grantImpersonation") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return impersonationDelegate.grantImpersonation(principal);
@@ -75,7 +76,7 @@ final class ImpersonationDelegator imple
 
     @Override
     public boolean revokeImpersonation(final Principal principal) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("revokeImpersonation") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return impersonationDelegate.revokeImpersonation(principal);
@@ -85,7 +86,7 @@ final class ImpersonationDelegator imple
 
     @Override
     public boolean allows(final Subject subject) throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("allows") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return impersonationDelegate.allows(subject);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/JackrabbitAccessControlManagerDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/JackrabbitAccessControlManagerDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/JackrabbitAccessControlManagerDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/JackrabbitAccessControlManagerDelegator.java Mon Mar 24 16:33:01 2014
@@ -52,7 +52,8 @@ public class JackrabbitAccessControlMana
     @Override
     public JackrabbitAccessControlPolicy[] getApplicablePolicies(final Principal principal)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<JackrabbitAccessControlPolicy[]>() {
+        return delegate.perform(
+                new SessionOperation<JackrabbitAccessControlPolicy[]>("getApplicablePolicies") {
             @Override
             public JackrabbitAccessControlPolicy[] perform() throws RepositoryException {
                 return jackrabbitACManager.getApplicablePolicies(principal);
@@ -63,7 +64,8 @@ public class JackrabbitAccessControlMana
     @Override
     public JackrabbitAccessControlPolicy[] getPolicies(final Principal principal)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<JackrabbitAccessControlPolicy[]>() {
+        return delegate.perform(
+                new SessionOperation<JackrabbitAccessControlPolicy[]>("getPolicies") {
             @Override
             public JackrabbitAccessControlPolicy[] perform() throws RepositoryException {
                 return jackrabbitACManager.getPolicies(principal);
@@ -74,7 +76,8 @@ public class JackrabbitAccessControlMana
     @Override
     public AccessControlPolicy[] getEffectivePolicies(final Set<Principal> principals)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<AccessControlPolicy[]>() {
+        return delegate.perform(
+                new SessionOperation<AccessControlPolicy[]>("getEffectivePolicies") {
             @Override
             public AccessControlPolicy[] perform() throws RepositoryException {
                 return jackrabbitACManager.getEffectivePolicies(principals);
@@ -85,7 +88,8 @@ public class JackrabbitAccessControlMana
     @Override
     public boolean hasPrivileges(final String absPath, final Set<Principal> principals,
             final Privilege[] privileges) throws RepositoryException {
-        return delegate.perform(new SessionOperation<Boolean>() {
+        return delegate.perform(
+                new SessionOperation<Boolean>("hasPrivileges") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return jackrabbitACManager.hasPrivileges(absPath, principals, privileges);
@@ -96,7 +100,8 @@ public class JackrabbitAccessControlMana
     @Override
     public Privilege[] getPrivileges(final String absPath, final Set<Principal> principals)
             throws RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege[]>() {
+        return delegate.perform(
+                new SessionOperation<Privilege[]>("getPrivileges") {
             @Override
             public Privilege[] perform() throws RepositoryException {
                 return jackrabbitACManager.getPrivileges(absPath, principals);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrincipalManagerDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrincipalManagerDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrincipalManagerDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrincipalManagerDelegator.java Mon Mar 24 16:33:01 2014
@@ -43,7 +43,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public boolean hasPrincipal(final String principalName) {
-        return delegate.safePerform(new SessionOperation<Boolean>() {
+        return delegate.safePerform(new SessionOperation<Boolean>("hasPrincipal") {
             @Override
             public Boolean perform() {
                 return principalManager.hasPrincipal(principalName);
@@ -53,7 +53,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public Principal getPrincipal(final String principalName) {
-        return delegate.safePerform(new SessionOperation<Principal>() {
+        return delegate.safePerform(new SessionOperation<Principal>("getPrincipal") {
             @Override
             public Principal perform() {
                 return principalManager.getPrincipal(principalName);
@@ -63,7 +63,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public PrincipalIterator findPrincipals(final String simpleFilter) {
-        return delegate.safePerform(new SessionOperation<PrincipalIterator>() {
+        return delegate.safePerform(new SessionOperation<PrincipalIterator>("findPrincipals") {
             @Override
             public PrincipalIterator perform() {
                 return principalManager.findPrincipals(simpleFilter);
@@ -73,7 +73,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public PrincipalIterator findPrincipals(final String simpleFilter, final int searchType) {
-        return delegate.safePerform(new SessionOperation<PrincipalIterator>() {
+        return delegate.safePerform(new SessionOperation<PrincipalIterator>("findPrincipals") {
             @Override
             public PrincipalIterator perform() {
                 return principalManager.findPrincipals(simpleFilter, searchType);
@@ -83,7 +83,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public PrincipalIterator getPrincipals(final int searchType) {
-        return delegate.safePerform(new SessionOperation<PrincipalIterator>() {
+        return delegate.safePerform(new SessionOperation<PrincipalIterator>("getPrincipals") {
             @Override
             public PrincipalIterator perform() {
                 return principalManager.getPrincipals(searchType);
@@ -93,7 +93,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public PrincipalIterator getGroupMembership(final Principal principal) {
-        return delegate.safePerform(new SessionOperation<PrincipalIterator>() {
+        return delegate.safePerform(new SessionOperation<PrincipalIterator>("getGroupMembership") {
             @Override
             public PrincipalIterator perform() {
                 return principalManager.getGroupMembership(principal);
@@ -103,7 +103,7 @@ public class PrincipalManagerDelegator i
 
     @Override
     public Principal getEveryone() {
-        return delegate.safePerform(new SessionOperation<Principal>() {
+        return delegate.safePerform(new SessionOperation<Principal>("getEveryone") {
             @Override
             public Principal perform() {
                 return principalManager.getEveryone();

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrivilegeManagerDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrivilegeManagerDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrivilegeManagerDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/PrivilegeManagerDelegator.java Mon Mar 24 16:33:01 2014
@@ -45,7 +45,7 @@ public class PrivilegeManagerDelegator i
 
     @Override
     public Privilege[] getRegisteredPrivileges() throws RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege[]>() {
+        return delegate.perform(new SessionOperation<Privilege[]>("getRegisteredPrivileges") {
             @Override
             public Privilege[] perform() throws RepositoryException {
                 return pm.getRegisteredPrivileges();
@@ -55,7 +55,7 @@ public class PrivilegeManagerDelegator i
 
     @Override
     public Privilege getPrivilege(final String privilegeName) throws AccessControlException, RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege>() {
+        return delegate.perform(new SessionOperation<Privilege>("getPrivilege") {
             @Override
             public Privilege perform() throws RepositoryException {
                 return pm.getPrivilege(privilegeName);
@@ -65,7 +65,7 @@ public class PrivilegeManagerDelegator i
 
     @Override
     public Privilege registerPrivilege(final String privilegeName, final boolean isAbstract, final String[] declaredAggregateNames) throws AccessDeniedException, NamespaceException, RepositoryException {
-        return delegate.perform(new SessionOperation<Privilege>() {
+        return delegate.perform(new SessionOperation<Privilege>("registerPrivilege") {
             @Override
             public Privilege perform() throws RepositoryException {
                 return pm.registerPrivilege(privilegeName, isAbstract, declaredAggregateNames);

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=1580906&r1=1580905&r2=1580906&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 Mon Mar 24 16:33:01 2014
@@ -261,21 +261,17 @@ public class SessionDelegate {
             if (sessionOperation.isUpdate()) {
                 Exception trace = new Exception(
                         "Stack trace of concurrent access to " + contentSession);
-                log.warn("Attempt to perform " + sessionOperation.description()
-                        + " while another thread is concurrently writing"
-                        + " to " + contentSession + ". Blocking until the other"
-                        + " thread is finished using this session. Please"
-                        + " review your code to avoid concurrent use of"
-                        + " a session.", trace);
+                log.warn("Attempt to perform " + sessionOperation + " while another thread is " +
+                        "concurrently writing to " + contentSession + ". Blocking until the " +
+                        "other thread is finished using this session. Please review your code " +
+                        "to avoid concurrent use of a session.", trace);
             } else if (log.isDebugEnabled()) {
                 Exception trace = new Exception(
                         "Stack trace of concurrent access to " + contentSession);
-                log.warn("Attempt to perform " + sessionOperation.description()
-                        + " while another thread is concurrently reading from "
-                        + contentSession + ". Blocking until the other thread"
-                        + " is finished using this session. Please"
-                        + " review your code to avoid concurrent use of"
-                        + " a session.", trace);
+                log.warn("Attempt to perform " + sessionOperation + " while another thread is " +
+                        "concurrently reading from " + contentSession + ". Blocking until the " +
+                        "other thread is finished using this session. Please review your code " +
+                        "to avoid concurrent use of a session.", trace);
             }
             lock.lock();
         }
@@ -639,15 +635,11 @@ public class SessionDelegate {
 
     //------------------------------------------------------------< internal >---
 
-    private static <T> void logOperationDetails(ContentSession session, SessionOperation<T> ops)
-            throws RepositoryException {
+    private static <T> void logOperationDetails(ContentSession session, SessionOperation<T> ops) {
         if (operationLogger.isDebugEnabled()){
-            String desc = ops.description();
-            if (desc != null){
-                Marker sessionMarker = MarkerFactory.getMarker(session.toString());
-                String sessionId = session.toString();
-                operationLogger.debug(sessionMarker,String.format("[%s] %s", sessionId, desc));
-            }
+            Marker sessionMarker = MarkerFactory.getMarker(session.toString());
+            String sessionId = session.toString();
+            operationLogger.debug(sessionMarker, String.format("[%s] %s", sessionId, ops));
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/UserDelegator.java Mon Mar 24 16:33:01 2014
@@ -63,7 +63,7 @@ final class UserDelegator extends Author
     //---------------------------------------------------------------< User >---
     @Override
     public boolean isAdmin() {
-        return sessionDelegate.safePerform(new SessionOperation<Boolean>() {
+        return sessionDelegate.safePerform(new SessionOperation<Boolean>("isAdmin") {
             @Override
             public Boolean perform() {
                 return getDelegate().isAdmin();
@@ -73,7 +73,7 @@ final class UserDelegator extends Author
 
     @Override
     public Credentials getCredentials() {
-        return sessionDelegate.safePerform(new SessionOperation<Credentials>() {
+        return sessionDelegate.safePerform(new SessionOperation<Credentials>("getCredentials") {
             @Override
             public Credentials perform() throws RepositoryException {
                 return getDelegate().getCredentials();
@@ -83,7 +83,7 @@ final class UserDelegator extends Author
 
     @Override
     public Impersonation getImpersonation() {
-        return sessionDelegate.safePerform(new SessionOperation<Impersonation>() {
+        return sessionDelegate.safePerform(new SessionOperation<Impersonation>("getImpersonation") {
             @Override
             public Impersonation perform() throws RepositoryException {
                 Impersonation impersonation = getDelegate().getImpersonation();
@@ -94,7 +94,7 @@ final class UserDelegator extends Author
 
     @Override
     public void changePassword(final String password) throws RepositoryException {
-        sessionDelegate.perform(new SessionOperation<Void>() {
+        sessionDelegate.perform(new SessionOperation<Void>("changePassword") {
             @Override
             public Void perform() throws RepositoryException {
                 getDelegate().changePassword(password);
@@ -105,7 +105,7 @@ final class UserDelegator extends Author
 
     @Override
     public void changePassword(final String password, final String oldPassword) throws RepositoryException {
-        sessionDelegate.perform(new SessionOperation<Void>() {
+        sessionDelegate.perform(new SessionOperation<Void>("changePassword") {
             @Override
             public Void perform() throws RepositoryException {
                 getDelegate().changePassword(password, oldPassword);
@@ -116,7 +116,7 @@ final class UserDelegator extends Author
 
     @Override
     public void disable(final String reason) throws RepositoryException {
-        sessionDelegate.perform(new SessionOperation<Void>() {
+        sessionDelegate.perform(new SessionOperation<Void>("disable") {
             @Override
             public Void perform() throws RepositoryException {
                 getDelegate().disable(reason);
@@ -127,7 +127,7 @@ final class UserDelegator extends Author
 
     @Override
     public boolean isDisabled() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<Boolean>() {
+        return sessionDelegate.perform(new SessionOperation<Boolean>("isDisabled") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return getDelegate().isDisabled();
@@ -137,7 +137,7 @@ final class UserDelegator extends Author
 
     @Override
     public String getDisabledReason() throws RepositoryException {
-        return sessionDelegate.perform(new SessionOperation<String>() {
+        return sessionDelegate.perform(new SessionOperation<String>("getDisabledReason") {
             @Override
             public String perform() throws RepositoryException {
                 return getDelegate().getDisabledReason();

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=1580906&r1=1580905&r2=1580906&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 Mon Mar 24 16:33:01 2014
@@ -19,8 +19,11 @@
 
 package org.apache.jackrabbit.oak.jcr.delegate;
 
+import static com.google.common.base.Preconditions.checkState;
+
 import java.security.Principal;
 import java.util.Iterator;
+
 import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
@@ -35,8 +38,6 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.oak.jcr.session.operation.UserManagerOperation;
 
-import static com.google.common.base.Preconditions.checkState;
-
 /**
  * This implementation of {@code UserManager} delegates back to a
  * delegatee wrapping each call into a {@link UserManager} closure.
@@ -56,7 +57,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Authorizable getAuthorizable(final String id) throws RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Authorizable>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Authorizable>(sessionDelegate, "getAuthorizable") {
             @Override
             public Authorizable perform() throws RepositoryException {
                 Authorizable authorizable = userManagerDelegate.getAuthorizable(id);
@@ -67,7 +69,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Authorizable getAuthorizable(final Principal principal) throws RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Authorizable>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Authorizable>(sessionDelegate, "getAuthorizable") {
             @Override
             public Authorizable perform() throws RepositoryException {
                 Authorizable authorizable = userManagerDelegate.getAuthorizable(principal);
@@ -78,7 +81,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Authorizable getAuthorizableByPath(final String path) throws UnsupportedRepositoryOperationException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Authorizable>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Authorizable>(sessionDelegate, "getAuthorizableByPath") {
             @Override
             public Authorizable perform() throws RepositoryException {
                 Authorizable authorizable = userManagerDelegate.getAuthorizableByPath(path);
@@ -89,7 +93,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Iterator<Authorizable> findAuthorizables(final String relPath, final String value) throws RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate, "findAuthorizables") {
             @Override
             public Iterator<Authorizable> perform() throws RepositoryException {
                 Iterator<Authorizable> authorizables = userManagerDelegate.findAuthorizables(relPath, value);
@@ -106,7 +111,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Iterator<Authorizable> findAuthorizables(final String relPath, final String value, final int searchType) throws RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate, "findAuthorizables") {
             @Override
             public Iterator<Authorizable> perform() throws RepositoryException {
                 Iterator<Authorizable> authorizables = userManagerDelegate.findAuthorizables(relPath, value, searchType);
@@ -123,7 +129,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Iterator<Authorizable> findAuthorizables(final Query query) throws RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Iterator<Authorizable>>(sessionDelegate, "findAuthorizables") {
             @Override
             public Iterator<Authorizable> perform() throws RepositoryException {
                 Iterator<Authorizable> authorizables = userManagerDelegate.findAuthorizables(query);
@@ -140,7 +147,8 @@ public class UserManagerDelegator implem
 
     @Override
     public User createUser(final String userID, final String password) throws AuthorizableExistsException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<User>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<User>(sessionDelegate, "createUser") {
             @Override
             public User perform() throws RepositoryException {
                 User user = userManagerDelegate.createUser(userID, password);
@@ -151,7 +159,8 @@ public class UserManagerDelegator implem
 
     @Override
     public User createUser(final String userID, final String password, final Principal principal, final String intermediatePath) throws AuthorizableExistsException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<User>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<User>(sessionDelegate, "createUser") {
             @Override
             public User perform() throws RepositoryException {
                 User user = userManagerDelegate.createUser(userID, password, principal, intermediatePath);
@@ -162,7 +171,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Group createGroup(final String groupID) throws AuthorizableExistsException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Group>(sessionDelegate, "createGroup") {
             @Override
             public Group perform() throws RepositoryException {
                 Group group = userManagerDelegate.createGroup(groupID);
@@ -173,7 +183,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Group createGroup(final Principal principal) throws AuthorizableExistsException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Group>(sessionDelegate, "createGroup") {
             @Override
             public Group perform() throws RepositoryException {
                 Group group = userManagerDelegate.createGroup(principal);
@@ -184,7 +195,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Group createGroup(final Principal principal, final String intermediatePath) throws AuthorizableExistsException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Group>(sessionDelegate, "createGroup") {
             @Override
             public Group perform() throws RepositoryException {
                 Group group = userManagerDelegate.createGroup(principal, intermediatePath);
@@ -195,7 +207,8 @@ public class UserManagerDelegator implem
 
     @Override
     public Group createGroup(final String groupID, final Principal principal, final String intermediatePath) throws AuthorizableExistsException, RepositoryException {
-        return sessionDelegate.perform(new UserManagerOperation<Group>(sessionDelegate) {
+        return sessionDelegate.perform(
+                new UserManagerOperation<Group>(sessionDelegate, "createGroup") {
             @Override
             public Group perform() throws RepositoryException {
                 Group group = userManagerDelegate.createGroup(groupID, principal, intermediatePath);
@@ -206,7 +219,8 @@ public class UserManagerDelegator implem
 
     @Override
     public boolean isAutoSave() {
-        return sessionDelegate.safePerform(new UserManagerOperation<Boolean>(sessionDelegate) {
+        return sessionDelegate.safePerform(
+                new UserManagerOperation<Boolean>(sessionDelegate, "isAutoSave") {
             @Override
             public Boolean perform() {
                 return userManagerDelegate.isAutoSave();
@@ -216,7 +230,8 @@ public class UserManagerDelegator implem
 
     @Override
     public void autoSave(final boolean enable) throws UnsupportedRepositoryOperationException, RepositoryException {
-        sessionDelegate.perform(new UserManagerOperation<Void>(sessionDelegate) {
+        sessionDelegate.perform(
+                new UserManagerOperation<Void>(sessionDelegate, "autoSave") {
             @Override
             public Void perform() throws RepositoryException {
                 userManagerDelegate.autoSave(enable);

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=1580906&r1=1580905&r2=1580906&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 Mon Mar 24 16:33:01 2014
@@ -54,9 +54,9 @@ public final class LockImpl implements L
 
     @Override
     public String getLockOwner() {
-        return safePerform(new NodeOperation<String>(delegate) {
+        return safePerform(new NodeOperation<String>(delegate, "getLockOwner") {
             @Override
-            public String perform() throws RepositoryException {
+            public String perform() {
                 return node.getLockOwner();
             }
         });
@@ -64,9 +64,9 @@ public final class LockImpl implements L
 
     @Override
     public boolean isDeep() {
-        return safePerform(new NodeOperation<Boolean>(delegate) {
+        return safePerform(new NodeOperation<Boolean>(delegate, "isDeep") {
             @Override
-            public Boolean perform() throws RepositoryException {
+            public Boolean perform() {
                 return node.holdsLock(true);
             }
         });
@@ -75,9 +75,9 @@ public final class LockImpl implements L
     @Override
     public boolean isLive() {
         return context.getSession().isLive() && safePerform(
-                new NodeOperation<Boolean>(delegate) {
+                new NodeOperation<Boolean>(delegate, "isLive") {
                     @Override
-                    public Boolean perform() throws RepositoryException {
+                    public Boolean perform() {
                         return node.holdsLock(false);
                     }
                 });
@@ -86,9 +86,9 @@ public final class LockImpl implements L
 
     @Override
     public String getLockToken() {
-        return safePerform(new NodeOperation<String>(delegate) {
+        return safePerform(new NodeOperation<String>(delegate, "getLockToken") {
             @Override
-            public String perform() throws RepositoryException {
+            public String perform() {
                 String token = node.getPath();
                 if (context.getOpenScopedLocks().contains(token)) {
                     return token;
@@ -125,9 +125,9 @@ public final class LockImpl implements L
 
     @Override
     public boolean isSessionScoped() {
-        return safePerform(new NodeOperation<Boolean>(delegate) {
+        return safePerform(new NodeOperation<Boolean>(delegate, "isSessionScoped") {
             @Override
-            public Boolean perform() throws RepositoryException {
+            public Boolean perform() {
                 String path = node.getPath();
                 return context.getSessionScopedLocks().contains(path);
             }
@@ -136,9 +136,9 @@ public final class LockImpl implements L
 
     @Override
     public boolean isLockOwningSession() {
-        return safePerform(new NodeOperation<Boolean>(delegate) {
+        return safePerform(new NodeOperation<Boolean>(delegate, "isLockOwningSessions") {
             @Override
-            public Boolean perform() throws RepositoryException {
+            public Boolean perform() {
                 String path = node.getPath();
                 return context.getSessionScopedLocks().contains(path)
                         || context.getOpenScopedLocks().contains(path);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockManagerImpl.java Mon Mar 24 16:33:01 2014
@@ -51,7 +51,7 @@ public class LockManagerImpl implements 
 
     @Override @Nonnull
     public String[] getLockTokens() throws RepositoryException {
-        return perform(new SessionOperation<String[]>() {
+        return perform(new SessionOperation<String[]>("getLockTokens") {
             @Override @Nonnull
             public String[] perform() {
                 Set<String> tokens = sessionContext.getOpenScopedLocks();
@@ -64,7 +64,7 @@ public class LockManagerImpl implements 
     public void addLockToken(final String lockToken)
             throws RepositoryException {
         try {
-            perform(new LockOperation<String>(sessionContext, lockToken) {
+            perform(new LockOperation<String>(sessionContext, lockToken, "addLockToken") {
                 @Override
                 protected String perform(NodeDelegate node)
                         throws LockException {
@@ -86,7 +86,7 @@ public class LockManagerImpl implements 
     @Override
     public void removeLockToken(final String lockToken)
             throws RepositoryException {
-        if (!perform(new SessionOperation<Boolean>() {
+        if (!perform(new SessionOperation<Boolean>("removeLockToken") {
             @Override @Nonnull
             public Boolean perform() {
                 // TODO: name mapping?
@@ -100,7 +100,7 @@ public class LockManagerImpl implements 
 
     @Override
     public boolean isLocked(String absPath) throws RepositoryException {
-        return perform(new LockOperation<Boolean>(sessionContext, absPath) {
+        return perform(new LockOperation<Boolean>(sessionContext, absPath, "isLocked") {
             @Override
             protected Boolean perform(NodeDelegate node) {
                 return node.isLocked();
@@ -110,7 +110,7 @@ public class LockManagerImpl implements 
 
     @Override
     public boolean holdsLock(String absPath) throws RepositoryException {
-        return perform(new LockOperation<Boolean>(sessionContext, absPath) {
+        return perform(new LockOperation<Boolean>(sessionContext, absPath, "holdsLock") {
             @Override
             protected Boolean perform(NodeDelegate node) {
                 return node.holdsLock(false);
@@ -121,7 +121,7 @@ public class LockManagerImpl implements 
     @Override @Nonnull
     public Lock getLock(String absPath) throws RepositoryException {
         NodeDelegate lock = perform(
-                new LockOperation<NodeDelegate>(sessionContext, absPath) {
+                new LockOperation<NodeDelegate>(sessionContext, absPath, "getLock") {
                     @Override
                     protected NodeDelegate perform(NodeDelegate node) {
                         return node.getLock();
@@ -139,7 +139,7 @@ public class LockManagerImpl implements 
             String absPath, final boolean isDeep, final boolean isSessionScoped,
             long timeoutHint, String ownerInfo) throws RepositoryException {
         return new LockImpl(sessionContext, perform(
-                new LockOperation<NodeDelegate>(sessionContext, absPath) {
+                new LockOperation<NodeDelegate>(sessionContext, absPath, "lock") {
                     @Override
                     protected NodeDelegate perform(NodeDelegate node)
                             throws RepositoryException {
@@ -162,7 +162,7 @@ public class LockManagerImpl implements 
 
     @Override
     public void unlock(String absPath) throws RepositoryException {
-        perform(new LockOperation<Void>(sessionContext, absPath) {
+        perform(new LockOperation<Void>(sessionContext, absPath, "unlock") {
             @Override
             protected Void perform(NodeDelegate node)
                     throws RepositoryException {

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockOperation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockOperation.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockOperation.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/lock/LockOperation.java Mon Mar 24 16:33:01 2014
@@ -37,15 +37,16 @@ public abstract class LockOperation<T> e
 
     private final String path;
 
-    public LockOperation(SessionDelegate session, NodeDelegate node)
-            throws PathNotFoundException {
+    protected LockOperation(SessionDelegate session, NodeDelegate node, String name) {
+        super(name);
         this.session = session;
         this.path = null;
         this.node = node;
     }
 
-    public LockOperation(SessionContext context, String absPath)
+    protected LockOperation(SessionContext context, String absPath, String name)
             throws PathNotFoundException {
+        super(name);
         this.session = context.getSessionDelegate();
         this.path = context.getOakPathOrThrowNotFound(absPath);
         this.node = null;

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java Mon Mar 24 16:33:01 2014
@@ -79,7 +79,7 @@ public class QueryImpl implements Query 
             return;
         }
         List<String> names = sessionContext.getSessionDelegate().perform(
-                new SessionOperation<List<String>>() {
+                new SessionOperation<List<String>>("parse") {
                     @Override
                     public List<String> perform() throws RepositoryException {
                         return manager.parse(statement, language);
@@ -95,7 +95,7 @@ public class QueryImpl implements Query 
     @Override
     public QueryResult execute() throws RepositoryException {
         return sessionContext.getSessionDelegate().perform(
-                new SessionOperation<QueryResult>() {
+                new SessionOperation<QueryResult>("execute") {
                     @Override
                     public QueryResult perform() throws RepositoryException {
                         return manager.executeQuery(statement, language, limit,

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/AccessManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/AccessManager.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/AccessManager.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/AccessManager.java Mon Mar 24 16:33:01 2014
@@ -41,7 +41,7 @@ public class AccessManager {
     }
 
     public boolean hasPermissions(@Nonnull final String oakPath, @Nonnull final String actions) {
-        return delegate.safePerform(new SessionOperation<Boolean>() {
+        return delegate.safePerform(new SessionOperation<Boolean>("hasPermissions") {
             @Override
             public Boolean perform() {
                 permissionProvider.refresh();
@@ -51,7 +51,7 @@ public class AccessManager {
     }
 
     public boolean hasPermissions(@Nonnull final Tree tree, @Nullable final PropertyState property, final long permissions) throws RepositoryException {
-        return delegate.safePerform(new SessionOperation<Boolean>() {
+        return delegate.safePerform(new SessionOperation<Boolean>("hasPermissions") {
             @Override
             public Boolean perform() {
                 permissionProvider.refresh();

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java Mon Mar 24 16:33:01 2014
@@ -89,8 +89,8 @@ abstract class ItemImpl<T extends ItemDe
     }
 
     protected abstract class ItemWriteOperation<U> extends SessionOperation<U> {
-        protected ItemWriteOperation() {
-            super(true);
+        protected ItemWriteOperation(String name) {
+            super(name, true);
         }
         @Override
         public void checkPreconditions() throws RepositoryException {
@@ -134,7 +134,7 @@ abstract class ItemImpl<T extends ItemDe
     @Override
     @Nonnull
     public String getName() throws RepositoryException {
-        String oakName = perform(new ItemOperation<String>(dlg) {
+        String oakName = perform(new ItemOperation<String>(dlg, "getName") {
             @Override
             public String perform() {
                 return item.getName();
@@ -150,7 +150,7 @@ abstract class ItemImpl<T extends ItemDe
     @Override
     @Nonnull
     public String getPath() throws RepositoryException {
-        return toJcrPath(perform(new ItemOperation<String>(dlg) {
+        return toJcrPath(perform(new ItemOperation<String>(dlg, "getPath") {
             @Override
             public String perform() {
                 return item.getPath();
@@ -172,7 +172,7 @@ abstract class ItemImpl<T extends ItemDe
             return sessionContext.getSession().getRootNode();
         }
 
-        ItemDelegate ancestor = perform(new ItemOperation<ItemDelegate>(dlg) {
+        ItemDelegate ancestor = perform(new ItemOperation<ItemDelegate>(dlg, "getAncestor") {
             @Override
             public ItemDelegate perform() throws RepositoryException {
                 String path = item.getPath();
@@ -256,7 +256,7 @@ abstract class ItemImpl<T extends ItemDe
     @Override
     public void save() throws RepositoryException {
         try {
-            perform(new ItemWriteOperation<Void>() {
+            perform(new ItemWriteOperation<Void>("save") {
                 @Override
                 public Void perform() throws RepositoryException {
                     dlg.save();
@@ -292,7 +292,7 @@ abstract class ItemImpl<T extends ItemDe
         if (!keepChanges) {
             log.warn("Item#refresh invokes Session#refresh!");
         }
-        perform(new SessionOperation<Void>() {
+        perform(new SessionOperation<Void>("refresh") {
             @Override
             public Void perform() throws InvalidItemStateException {
                 sessionDelegate.refresh(keepChanges);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1580906&r1=1580905&r2=1580906&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java Mon Mar 24 16:33:01 2014
@@ -159,7 +159,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public Node getParent() throws RepositoryException {
-        return perform(new NodeOperation<Node>(dlg) {
+        return perform(new NodeOperation<Node>(dlg, "getParent") {
             @Override
             public Node perform() throws RepositoryException {
                 if (node.isRoot()) {
@@ -169,7 +169,7 @@ public class NodeImpl<T extends NodeDele
                     if (parent == null) {
                         throw new AccessDeniedException();
                     }
-                    return NodeImpl.createNode(parent, sessionContext);
+                    return createNode(parent, sessionContext);
                 }
             }
         });
@@ -180,7 +180,7 @@ public class NodeImpl<T extends NodeDele
      */
     @Override
     public boolean isNew() {
-        return safePerform(new NodeOperation<Boolean>(dlg) {
+        return safePerform(new NodeOperation<Boolean>(dlg, "isNew") {
             @Override
             public Boolean perform() {
                 return node.exists() && node.getStatus() == Status.NEW;
@@ -193,7 +193,7 @@ public class NodeImpl<T extends NodeDele
      */
     @Override
     public boolean isModified() {
-        return safePerform(new NodeOperation<Boolean>(dlg) {
+        return safePerform(new NodeOperation<Boolean>(dlg, "isModified") {
             @Override
             public Boolean perform() {
                 return node.exists() && node.getStatus() == Status.MODIFIED;
@@ -206,7 +206,7 @@ public class NodeImpl<T extends NodeDele
      */
     @Override
     public void remove() throws RepositoryException {
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("remove") {
             @Override
             public Void perform() throws RepositoryException {
                 if (dlg.isRoot()) {
@@ -218,8 +218,8 @@ public class NodeImpl<T extends NodeDele
             }
 
             @Override
-            public String description() throws RepositoryException {
-                return String.format("Removing node [%s]",dlg.getPath());
+            public String toString() {
+                return String.format("Removing node [%s]", dlg.getPath());
             }
         });
     }
@@ -252,7 +252,7 @@ public class NodeImpl<T extends NodeDele
         }
 
         SessionImpl.checkIndexOnName(sessionContext, relPath);
-        return perform(new ItemWriteOperation<Node>() {
+        return perform(new ItemWriteOperation<Node>("addNode") {
             private NodeDelegate nodeAdded;
 
             @Override
@@ -293,19 +293,19 @@ public class NodeImpl<T extends NodeDele
                 }
                 nodeAdded = added;
 
-                return NodeImpl.createNode(added, sessionContext);
+                return createNode(added, sessionContext);
             }
 
             @Override
-            public String description() {
-                return String.format("Adding node [%s]",nodeAdded.getPath());
+            public String toString() {
+                return String.format("Adding node [%s]", nodeAdded.getPath());
             }
         });
     }
 
     @Override
     public void orderBefore(final String srcChildRelPath, final String destChildRelPath) throws RepositoryException {
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("orderBefore") {
             @Override
             public Void perform() throws RepositoryException {
                 getEffectiveNodeType().checkOrderableChildNodes();
@@ -355,7 +355,6 @@ public class NodeImpl<T extends NodeDele
         if (value != null) {
             boolean exactTypeMatch = true;
             if (type == PropertyType.UNDEFINED) {
-                type = value.getType();
                 exactTypeMatch = false;
             } else {
                 value = ValueHelper.convert(value, type, getValueFactory());
@@ -528,7 +527,7 @@ public class NodeImpl<T extends NodeDele
     @Nonnull
     public Node getNode(String relPath) throws RepositoryException {
         final String oakPath = getOakPathOrThrowNotFound(relPath);
-        return perform(new NodeOperation<Node>(dlg) {
+        return perform(new NodeOperation<Node>(dlg, "getNode") {
             @Override
             public Node perform() throws RepositoryException {
                 NodeDelegate nd = node.getChild(oakPath);
@@ -544,7 +543,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public NodeIterator getNodes() throws RepositoryException {
-        return perform(new NodeOperation<NodeIterator>(dlg) {
+        return perform(new NodeOperation<NodeIterator>(dlg, "getNodes") {
             @Override
             public NodeIterator perform() throws RepositoryException {
                 Iterator<NodeDelegate> children = node.getChildren();
@@ -574,7 +573,7 @@ public class NodeImpl<T extends NodeDele
     @Nonnull
     public NodeIterator getNodes(final String namePattern)
             throws RepositoryException {
-        return perform(new NodeOperation<NodeIterator>(dlg) {
+        return perform(new NodeOperation<NodeIterator>(dlg, "getNodes") {
             @Override
             public NodeIterator perform() throws RepositoryException {
                 Iterator<NodeDelegate> children = Iterators.filter(
@@ -594,7 +593,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public NodeIterator getNodes(final String[] nameGlobs) throws RepositoryException {
-        return perform(new NodeOperation<NodeIterator>(dlg) {
+        return perform(new NodeOperation<NodeIterator>(dlg, "getNodes") {
             @Override
             public NodeIterator perform() throws RepositoryException {
                 Iterator<NodeDelegate> children = Iterators.filter(
@@ -615,7 +614,7 @@ public class NodeImpl<T extends NodeDele
     @Nonnull
     public Property getProperty(String relPath) throws RepositoryException {
         final String oakPath = getOakPathOrThrowNotFound(relPath);
-        return perform(new NodeOperation<PropertyImpl>(dlg) {
+        return perform(new NodeOperation<PropertyImpl>(dlg, "getProperty") {
             @Override
             public PropertyImpl perform() throws RepositoryException {
                 PropertyDelegate pd = node.getPropertyOrNull(oakPath);
@@ -632,7 +631,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public PropertyIterator getProperties() throws RepositoryException {
-        return perform(new NodeOperation<PropertyIterator>(dlg) {
+        return perform(new NodeOperation<PropertyIterator>(dlg, "getProperties") {
             @Override
             public PropertyIterator perform() throws RepositoryException {
                 Iterator<PropertyDelegate> properties = node.getProperties();
@@ -646,7 +645,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public PropertyIterator getProperties(final String namePattern) throws RepositoryException {
-        return perform(new NodeOperation<PropertyIterator>(dlg) {
+        return perform(new NodeOperation<PropertyIterator>(dlg, "getProperties") {
             @Override
             public PropertyIterator perform() throws RepositoryException {
                 Iterator<PropertyDelegate> properties = Iterators.filter(
@@ -666,7 +665,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public PropertyIterator getProperties(final String[] nameGlobs) throws RepositoryException {
-        return perform(new NodeOperation<PropertyIterator>(dlg) {
+        return perform(new NodeOperation<PropertyIterator>(dlg, "getProperties") {
             @Override
             public PropertyIterator perform() throws RepositoryException {
                 Iterator<PropertyDelegate> propertyNames = Iterators.filter(
@@ -689,7 +688,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public Item getPrimaryItem() throws RepositoryException {
-        return perform(new NodeOperation<Item>(dlg) {
+        return perform(new NodeOperation<Item>(dlg, "getPrimaryItem") {
             @Override
             public Item perform() throws RepositoryException {
                 // TODO: avoid nested calls
@@ -714,7 +713,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public String getUUID() throws RepositoryException {
-        return perform(new NodeOperation<String>(dlg) {
+        return perform(new NodeOperation<String>(dlg, "getUUID") {
             @Override
             public String perform() throws RepositoryException {
                 // TODO: avoid nested calls
@@ -730,7 +729,7 @@ public class NodeImpl<T extends NodeDele
     @Nonnull
     public String getIdentifier() throws RepositoryException {
         // TODO: name mapping for path identifiers
-        return perform(new NodeOperation<String>(dlg) {
+        return perform(new NodeOperation<String>(dlg, "getIdentifier") {
             @Override
             public String perform() throws RepositoryException {
                 return node.getIdentifier();
@@ -745,7 +744,7 @@ public class NodeImpl<T extends NodeDele
     }
 
     private PropertyIterator internalGetReferences(final String name, final boolean weak) throws RepositoryException {
-        return perform(new NodeOperation<PropertyIterator>(dlg) {
+        return perform(new NodeOperation<PropertyIterator>(dlg, "internalGetReferences") {
             @Override
             public PropertyIterator perform() throws InvalidItemStateException {
                 IdentifierManager idManager = sessionDelegate.getIdManager();
@@ -801,7 +800,7 @@ public class NodeImpl<T extends NodeDele
     public boolean hasNode(String relPath) throws RepositoryException {
         try {
             final String oakPath = getOakPathOrThrow(relPath);
-            return perform(new NodeOperation<Boolean>(dlg) {
+            return perform(new NodeOperation<Boolean>(dlg, "hasNode") {
                 @Override
                 public Boolean perform() throws RepositoryException {
                     return node.getChild(oakPath) != null;
@@ -816,7 +815,7 @@ public class NodeImpl<T extends NodeDele
     public boolean hasProperty(String relPath) throws RepositoryException {
         try {
             final String oakPath = getOakPathOrThrow(relPath);
-            return perform(new NodeOperation<Boolean>(dlg) {
+            return perform(new NodeOperation<Boolean>(dlg, "hasProperty") {
                 @Override
                 public Boolean perform() throws RepositoryException {
                     return node.getPropertyOrNull(oakPath) != null;
@@ -834,7 +833,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public boolean hasProperties() throws RepositoryException {
-        return perform(new NodeOperation<Boolean>(dlg) {
+        return perform(new NodeOperation<Boolean>(dlg, "hasProperties") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return node.getPropertyCount() != 0;
@@ -848,7 +847,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public NodeType getPrimaryNodeType() throws RepositoryException {
-        return perform(new NodeOperation<NodeType>(dlg) {
+        return perform(new NodeOperation<NodeType>(dlg, "getPrimaryNodeType") {
             @Override
             public NodeType perform() throws RepositoryException {
                 // TODO: avoid nested calls
@@ -869,7 +868,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public NodeType[] getMixinNodeTypes() throws RepositoryException {
-        return perform(new NodeOperation<NodeType[]>(dlg) {
+        return perform(new NodeOperation<NodeType[]>(dlg, "getMixinNodeTypes") {
             @Override
             public NodeType[] perform() throws RepositoryException {
                 // TODO: avoid nested calls
@@ -892,7 +891,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     public boolean isNodeType(String nodeTypeName) throws RepositoryException {
         final String oakName = getOakName(nodeTypeName);
-        return perform(new NodeOperation<Boolean>(dlg) {
+        return perform(new NodeOperation<Boolean>(dlg, "isNodeType") {
             @Override
             public Boolean perform() throws RepositoryException {
                 return getNodeTypeManager().isNodeType(node.getTree(), oakName);
@@ -902,7 +901,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public void setPrimaryType(final String nodeTypeName) throws RepositoryException {
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("setPrimaryType") {
             @Override
             public void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();
@@ -922,7 +921,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     public void addMixin(String mixinName) throws RepositoryException {
         final String oakTypeName = getOakName(checkNotNull(mixinName));
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("addMixin") {
             @Override
             public void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();
@@ -942,7 +941,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     public void removeMixin(final String mixinName) throws RepositoryException {
         final String oakTypeName = getOakName(checkNotNull(mixinName));
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("removeMixin") {
             @Override
             public void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();
@@ -972,7 +971,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     public boolean canAddMixin(String mixinName) throws RepositoryException {
         final String oakTypeName = getOakName(mixinName);
-        return perform(new NodeOperation<Boolean>(dlg) {
+        return perform(new NodeOperation<Boolean>(dlg, "canAddMixin") {
             @Override
             public Boolean perform() throws RepositoryException {
                 PropertyState prop = PropertyStates.createProperty(JCR_MIXINTYPES, singleton(oakTypeName), NAMES);
@@ -988,7 +987,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public NodeDefinition getDefinition() throws RepositoryException {
-        return perform(new NodeOperation<NodeDefinition>(dlg) {
+        return perform(new NodeOperation<NodeDefinition>(dlg, "getDefinition") {
             @Override
             public NodeDefinition perform() throws RepositoryException {
                 NodeDelegate parent = node.getParent();
@@ -1005,7 +1004,7 @@ public class NodeImpl<T extends NodeDele
     @Override
     @Nonnull
     public String getCorrespondingNodePath(final String workspaceName) throws RepositoryException {
-        return toJcrPath(perform(new ItemOperation<String>(dlg) {
+        return toJcrPath(perform(new ItemOperation<String>(dlg, "getCorrespondingNodePath") {
             @Override
             public String perform() throws RepositoryException {
                 checkValidWorkspace(workspaceName);
@@ -1021,7 +1020,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public void update(final String srcWorkspace) throws RepositoryException {
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("update") {
             @Override
             public Void perform() throws RepositoryException {
                 checkValidWorkspace(srcWorkspace);
@@ -1168,7 +1167,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public boolean isLocked() throws RepositoryException {
-        return perform(new LockOperation<Boolean>(sessionDelegate, dlg) {
+        return perform(new LockOperation<Boolean>(sessionDelegate, dlg, "isLocked") {
             @Override
             public Boolean perform(NodeDelegate node) {
                 return node.isLocked();
@@ -1178,7 +1177,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public boolean holdsLock() throws RepositoryException {
-        return perform(new LockOperation<Boolean>(sessionDelegate, dlg) {
+        return perform(new LockOperation<Boolean>(sessionDelegate, dlg, "holdsLock") {
             @Override
             public Boolean perform(NodeDelegate node) {
                 return node.holdsLock(false);
@@ -1189,7 +1188,7 @@ public class NodeImpl<T extends NodeDele
     @Override @Nonnull
     public Lock getLock() throws RepositoryException {
         NodeDelegate lock = perform(
-                new LockOperation<NodeDelegate>(sessionDelegate, dlg) {
+                new LockOperation<NodeDelegate>(sessionDelegate, dlg, "getLock") {
                     @Override
                     public NodeDelegate perform(NodeDelegate node) {
                         return node.getLock();
@@ -1205,7 +1204,7 @@ public class NodeImpl<T extends NodeDele
     @Override @Nonnull
     public Lock lock(final boolean isDeep, final boolean isSessionScoped)
             throws RepositoryException {
-        perform(new LockOperation<Void>(sessionDelegate, dlg) {
+        perform(new LockOperation<Void>(sessionDelegate, dlg, "lock") {
             @Override
             public Void perform(NodeDelegate node) throws RepositoryException {
                 if (node.getStatus() != Status.UNCHANGED) {
@@ -1228,7 +1227,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public void unlock() throws RepositoryException {
-        perform(new LockOperation<Void>(sessionDelegate, dlg) {
+        perform(new LockOperation<Void>(sessionDelegate, dlg, "unlock") {
             @Override
             public Void perform(NodeDelegate node) throws RepositoryException {
                 String path = node.getPath();
@@ -1253,7 +1252,7 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public void removeSharedSet() throws RepositoryException {
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("removeSharedSet") {
             @Override
             public Void perform() throws RepositoryException {
                 // TODO: avoid nested calls
@@ -1347,7 +1346,7 @@ public class NodeImpl<T extends NodeDele
         final String oakName = getOakPathOrThrow(checkNotNull(jcrName));
         final PropertyState state = createSingleState(
                 oakName, value, Type.fromTag(value.getType(), false));
-        return perform(new ItemWriteOperation<Property>() {
+        return perform(new ItemWriteOperation<Property>("internalSetProperty") {
             @Override
             public void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();
@@ -1364,8 +1363,8 @@ public class NodeImpl<T extends NodeDele
             }
 
             @Override
-            public String description() throws RepositoryException {
-                return String.format("Setting property [%s/%s]",dlg.getPath(),jcrName);
+            public String toString() {
+                return String.format("Setting property [%s/%s]", dlg.getPath(), jcrName);
             }
         });
     }
@@ -1382,7 +1381,7 @@ public class NodeImpl<T extends NodeDele
             LOG.warn("Large multi valued property detected ({} values).", values.length);
         }
 
-        return perform(new ItemWriteOperation<Property>() {
+        return perform(new ItemWriteOperation<Property>("internalSetProperty") {
             @Override
             public void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();
@@ -1399,8 +1398,8 @@ public class NodeImpl<T extends NodeDele
             }
 
             @Override
-            public String description() throws RepositoryException {
-                return String.format("Setting property [%s/%s]",dlg.getPath(),jcrName);
+            public String toString() {
+                return String.format("Setting property [%s/%s]", dlg.getPath(), jcrName);
             }
         });
     }
@@ -1425,7 +1424,7 @@ public class NodeImpl<T extends NodeDele
     private Property internalRemoveProperty(final String jcrName)
             throws RepositoryException {
         final String oakName = getOakName(checkNotNull(jcrName));
-        return perform(new ItemWriteOperation<Property>() {
+        return perform(new ItemWriteOperation<Property>("internalRemoveProperty") {
             @Override
             public Property perform() throws RepositoryException {
                 PropertyDelegate property = dlg.getPropertyOrNull(oakName);
@@ -1439,8 +1438,8 @@ public class NodeImpl<T extends NodeDele
             }
 
             @Override
-            public String description() throws RepositoryException {
-                return String.format("Removing property [%s]",jcrName);
+            public String toString() {
+                return String.format("Removing property [%s]", jcrName);
             }
         });
     }
@@ -1475,7 +1474,7 @@ public class NodeImpl<T extends NodeDele
             return;
         }
 
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("rename") {
             @Override
             public Void perform() throws RepositoryException {
                 Node parent = getParent();
@@ -1543,7 +1542,7 @@ public class NodeImpl<T extends NodeDele
         for (String mixinName : mixinNames) {
             oakTypeNames.add(getOakName(checkNotNull(mixinName)));
         }
-        perform(new ItemWriteOperation<Void>() {
+        perform(new ItemWriteOperation<Void>("setMixins") {
             @Override
             public void checkPreconditions() throws RepositoryException {
                 super.checkPreconditions();