You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2011/11/11 16:31:38 UTC

svn commit: r1200918 - in /directory/apacheds/trunk: core-api/src/main/java/org/apache/directory/server/core/api/invocation/ core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java

Author: kayyagari
Date: Fri Nov 11 15:31:37 2011
New Revision: 1200918

URL: http://svn.apache.org/viewvc?rev=1200918&view=rev
Log:
o removed the InvocationStack and updated the operation manager

Removed:
    directory/apacheds/trunk/core-api/src/main/java/org/apache/directory/server/core/api/invocation/
Modified:
    directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java?rev=1200918&r1=1200917&r2=1200918&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java Fri Nov 11 15:31:37 2011
@@ -44,7 +44,6 @@ import org.apache.directory.server.core.
 import org.apache.directory.server.core.api.interceptor.context.RenameOperationContext;
 import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
 import org.apache.directory.server.core.api.interceptor.context.UnbindOperationContext;
-import org.apache.directory.server.core.api.invocation.InvocationStack;
 import org.apache.directory.server.i18n.I18n;
 import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.model.entry.Attribute;
@@ -280,54 +279,46 @@ public class DefaultOperationManager imp
         LOG_CHANGES.debug( ">> AddOperation : {}", addContext );
 
         ensureStarted();
-        push( addContext );
 
-        try
+        // Normalize the addContext Dn
+        Dn dn = addContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        if ( directoryService.getReferralManager().hasParentReferral( dn ) )
         {
-            // Normalize the addContext Dn
-            Dn dn = addContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
-
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
-
-            if ( directoryService.getReferralManager().hasParentReferral( dn ) )
+            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            // Depending on the Context.REFERRAL property value, we will throw
+            // a different exception.
+            if ( addContext.isReferralIgnored() )
             {
-                Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                // Depending on the Context.REFERRAL property value, we will throw
-                // a different exception.
-                if ( addContext.isReferralIgnored() )
-                {
-                    directoryService.getReferralManager().unlock();
-
-                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                    throw exception;
-                }
-                else
-                {
-                    // Unlock the referral manager
-                    directoryService.getReferralManager().unlock();
-
-                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                    throw exception;
-                }
+                directoryService.getReferralManager().unlock();
+                
+                LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                throw exception;
             }
             else
             {
-                // Unlock the ReferralManager
+                // Unlock the referral manager
                 directoryService.getReferralManager().unlock();
-
-                // Call the Add method
-                Interceptor head = directoryService.getInterceptor( addContext.getNextInterceptor() );
-
-                head.add( addContext );
+                
+                LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                throw exception;
             }
         }
-        finally
+        else
         {
-            pop();
+            // Unlock the ReferralManager
+            directoryService.getReferralManager().unlock();
+            
+            // Call the Add method
+            Interceptor head = directoryService.getInterceptor( addContext.getNextInterceptor() );
+            
+            head.add( addContext );
         }
 
         LOG.debug( "<< AddOperation successful" );
@@ -343,21 +334,13 @@ public class DefaultOperationManager imp
         LOG.debug( ">> BindOperation : {}", bindContext );
 
         ensureStarted();
-        push( bindContext );
-
-        try
-        {
-            // Call the Delete method
-            Interceptor head = directoryService.getInterceptor( bindContext.getNextInterceptor() );
 
-            head.bind( bindContext );
-        }
-        finally
-        {
-            pop();
+        // Call the Delete method
+        Interceptor head = directoryService.getInterceptor( bindContext.getNextInterceptor() );
+        
+        head.bind( bindContext );
 
-            LOG.debug( "<< BindOperation successful" );
-        }
+        LOG.debug( "<< BindOperation successful" );
     }
 
 
@@ -369,78 +352,71 @@ public class DefaultOperationManager imp
         LOG.debug( ">> CompareOperation : {}", compareContext );
 
         ensureStarted();
-        push( compareContext );
-
-        try
-        {
-            // Normalize the compareContext Dn
-            Dn dn = compareContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
-
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
-
-            // Check if we have an ancestor for this Dn
-            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
-
-            if ( parentEntry != null )
+        // Normalize the compareContext Dn
+        Dn dn = compareContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        // Check if we have an ancestor for this Dn
+        Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            // We have found a parent referral for the current Dn
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            if ( directoryService.getReferralManager().isReferral( dn ) )
+            {
+                // This is a referral. We can delete it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !compareContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
+                }
+            }
+            else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
             {
-                // We have found a parent referral for the current Dn
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                if ( directoryService.getReferralManager().isReferral( dn ) )
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( compareContext.isReferralIgnored() )
                 {
-                    // This is a referral. We can delete it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !compareContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
-                }
-                else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
-                {
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( compareContext.isReferralIgnored() )
-                    {
-                        directoryService.getReferralManager().unlock();
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
+                }
+                else
+                {
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
                 }
             }
-
-            // Unlock the ReferralManager
-            directoryService.getReferralManager().unlock();
-
-            // populate the context with the old entry
-            compareContext.setOriginalEntry( getOriginalEntry( compareContext ) );
-
-            // Call the Compare method
-            Interceptor head = directoryService.getInterceptor( compareContext.getNextInterceptor() );
-
-            return head.compare( compareContext );
-        }
-        finally
-        {
-            pop();
-
-            LOG.debug( "<< CompareOperation successful" );
         }
+        
+        // Unlock the ReferralManager
+        directoryService.getReferralManager().unlock();
+        
+        // populate the context with the old entry
+        compareContext.setOriginalEntry( getOriginalEntry( compareContext ) );
+        
+        // Call the Compare method
+        Interceptor head = directoryService.getInterceptor( compareContext.getNextInterceptor() );
+        
+        boolean result = head.compare( compareContext );
+
+        LOG.debug( "<< CompareOperation successful" );
+        
+        return result;
     }
 
 
@@ -453,77 +429,69 @@ public class DefaultOperationManager imp
         LOG_CHANGES.debug( ">> DeleteOperation : {}", deleteContext );
 
         ensureStarted();
-        push( deleteContext );
-
-        try
-        {
-            // Normalize the deleteContext Dn
-            Dn dn = deleteContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
-
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
-
-            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
 
-            if ( parentEntry != null )
+        // Normalize the deleteContext Dn
+        Dn dn = deleteContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            // We have found a parent referral for the current Dn
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            if ( directoryService.getReferralManager().isReferral( dn ) )
+            {
+                // This is a referral. We can delete it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !deleteContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
+                }
+            }
+            else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
             {
-                // We have found a parent referral for the current Dn
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                if ( directoryService.getReferralManager().isReferral( dn ) )
+                // We can't delete an entry which has an ancestor referral
+                
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( deleteContext.isReferralIgnored() )
                 {
-                    // This is a referral. We can delete it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !deleteContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
-                }
-                else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
-                {
-                    // We can't delete an entry which has an ancestor referral
-
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( deleteContext.isReferralIgnored() )
-                    {
-                        directoryService.getReferralManager().unlock();
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
+                }
+                else
+                {
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
                 }
             }
-
-            // Unlock the ReferralManager
-            directoryService.getReferralManager().unlock();
-
-            // populate the context with the old entry
-            eagerlyPopulateFields( deleteContext );
-
-            // Call the Delete method
-            Interceptor head = directoryService.getInterceptor( deleteContext.getNextInterceptor() );
-
-            head.delete( deleteContext );
-        }
-        finally
-        {
-            pop();
         }
+        
+        // Unlock the ReferralManager
+        directoryService.getReferralManager().unlock();
+        
+        // populate the context with the old entry
+        eagerlyPopulateFields( deleteContext );
+        
+        // Call the Delete method
+        Interceptor head = directoryService.getInterceptor( deleteContext.getNextInterceptor() );
+        
+        head.delete( deleteContext );
 
         LOG.debug( "<< DeleteOperation successful" );
         LOG_CHANGES.debug( "<< DeleteOperation successful" );
@@ -538,20 +506,14 @@ public class DefaultOperationManager imp
         LOG.debug( ">> GetRootDSEOperation : {}", getRootDseContext );
 
         ensureStarted();
-        push( getRootDseContext );
 
-        try
-        {
-            Interceptor head = directoryService.getInterceptor( getRootDseContext.getNextInterceptor() );
-
-            return head.getRootDSE( getRootDseContext );
-        }
-        finally
-        {
-            pop();
-
-            LOG.debug( "<< getRootDSEOperation successful" );
-        }
+        Interceptor head = directoryService.getInterceptor( getRootDseContext.getNextInterceptor() );
+        
+        Entry root = head.getRootDSE( getRootDseContext );
+        
+        LOG.debug( "<< getRootDSEOperation successful" );
+        
+        return root;
     }
 
 
@@ -563,20 +525,14 @@ public class DefaultOperationManager imp
         LOG.debug( ">> hasEntryOperation : {}", hasEntryContext );
 
         ensureStarted();
-        push( hasEntryContext );
-
-        try
-        {
-            Interceptor head = directoryService.getInterceptor( hasEntryContext.getNextInterceptor() );
 
-            return head.hasEntry( hasEntryContext );
-        }
-        finally
-        {
-            pop();
-
-            LOG.debug( "<< HasEntryOperation successful" );
-        }
+        Interceptor head = directoryService.getInterceptor( hasEntryContext.getNextInterceptor() );
+        
+        boolean result = head.hasEntry( hasEntryContext );
+        
+        LOG.debug( "<< HasEntryOperation successful" );
+        
+        return result;
     }
 
 
@@ -588,20 +544,14 @@ public class DefaultOperationManager imp
         LOG.debug( ">> ListOperation : {}", listContext );
 
         ensureStarted();
-        push( listContext );
-
-        try
-        {
-            Interceptor head = directoryService.getInterceptor( listContext.getNextInterceptor() );
-
-            return head.list( listContext );
-        }
-        finally
-        {
-            pop();
 
-            LOG.debug( "<< ListOperation successful" );
-        }
+        Interceptor head = directoryService.getInterceptor( listContext.getNextInterceptor() );
+        
+        EntryFilteringCursor cursor = head.list( listContext );
+        
+        LOG.debug( "<< ListOperation successful" );
+        
+        return cursor;
     }
 
 
@@ -613,20 +563,14 @@ public class DefaultOperationManager imp
         LOG.debug( ">> LookupOperation : {}", lookupContext );
 
         ensureStarted();
-        push( lookupContext );
-
-        try
-        {
-            Interceptor head = directoryService.getInterceptor( lookupContext.getNextInterceptor() );
 
-            return head.lookup( lookupContext );
-        }
-        finally
-        {
-            pop();
-
-            LOG.debug( "<< LookupOperation successful" );
-        }
+        Interceptor head = directoryService.getInterceptor( lookupContext.getNextInterceptor() );
+        
+        Entry entry = head.lookup( lookupContext );
+        
+        LOG.debug( "<< LookupOperation successful" );
+        
+        return entry;
     }
 
 
@@ -639,89 +583,81 @@ public class DefaultOperationManager imp
         LOG_CHANGES.debug( ">> ModifyOperation : {}", modifyContext );
 
         ensureStarted();
-        push( modifyContext );
-
-        try
-        {
-            // Normalize the modifyContext Dn
-            Dn dn = modifyContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
-
-            ReferralManager referralManager = directoryService.getReferralManager();
 
-            // We have to deal with the referral first
-            referralManager.lockRead();
-
-            // Check if we have an ancestor for this Dn
-            Entry parentEntry = referralManager.getParentReferral( dn );
-
-            if ( parentEntry != null )
+        // Normalize the modifyContext Dn
+        Dn dn = modifyContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        ReferralManager referralManager = directoryService.getReferralManager();
+        
+        // We have to deal with the referral first
+        referralManager.lockRead();
+        
+        // Check if we have an ancestor for this Dn
+        Entry parentEntry = referralManager.getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            if ( referralManager.isReferral( dn ) )
+            {
+                // This is a referral. We can delete it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !modifyContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    referralManager.unlock();
+                    
+                    // We have found a parent referral for the current Dn
+                    Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
+                }
+            }
+            else if ( referralManager.hasParentReferral( dn ) )
             {
-                if ( referralManager.isReferral( dn ) )
+                // We can't delete an entry which has an ancestor referral
+                
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( modifyContext.isReferralIgnored() )
                 {
-                    // This is a referral. We can delete it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !modifyContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        referralManager.unlock();
-
-                        // We have found a parent referral for the current Dn
-                        Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    referralManager.unlock();
+                    
+                    // We have found a parent referral for the current Dn
+                    Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
                 }
-                else if ( referralManager.hasParentReferral( dn ) )
+                else
                 {
-                    // We can't delete an entry which has an ancestor referral
-
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( modifyContext.isReferralIgnored() )
-                    {
-                        referralManager.unlock();
-
-                        // We have found a parent referral for the current Dn
-                        Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        referralManager.unlock();
-
-                        // We have found a parent referral for the current Dn
-                        Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    // Unlock the referral manager
+                    referralManager.unlock();
+                    
+                    // We have found a parent referral for the current Dn
+                    Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
                 }
             }
-
-            // Unlock the ReferralManager
-            referralManager.unlock();
-
-            // populate the context with the old entry
-            eagerlyPopulateFields( modifyContext );
-
-            // Call the Modify method
-            Interceptor head = directoryService.getInterceptor( modifyContext.getNextInterceptor() );
-
-            head.modify( modifyContext );
         }
-        finally
-        {
-            pop();
+        
+        // Unlock the ReferralManager
+        referralManager.unlock();
+        
+        // populate the context with the old entry
+        eagerlyPopulateFields( modifyContext );
+        
+        // Call the Modify method
+        Interceptor head = directoryService.getInterceptor( modifyContext.getNextInterceptor() );
+        
+        head.modify( modifyContext );
 
-            LOG.debug( "<< ModifyOperation successful" );
-            LOG_CHANGES.debug( "<< ModifyOperation successful" );
-        }
+        LOG.debug( "<< ModifyOperation successful" );
+        LOG_CHANGES.debug( "<< ModifyOperation successful" );
     }
 
 
@@ -734,101 +670,93 @@ public class DefaultOperationManager imp
         LOG_CHANGES.debug( ">> MoveOperation : {}", moveContext );
 
         ensureStarted();
-        push( moveContext );
-
-        try
-        {
-            // Normalize the moveContext Dn
-            Dn dn = moveContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
-
-            // Normalize the moveContext superior Dn
-            Dn newSuperiorDn = moveContext.getNewSuperior();
-            newSuperiorDn.apply( directoryService.getSchemaManager() );
-
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
 
-            // Check if we have an ancestor for this Dn
-            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
-
-            if ( parentEntry != null )
+        // Normalize the moveContext Dn
+        Dn dn = moveContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // Normalize the moveContext superior Dn
+        Dn newSuperiorDn = moveContext.getNewSuperior();
+        newSuperiorDn.apply( directoryService.getSchemaManager() );
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        // Check if we have an ancestor for this Dn
+        Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            // We have found a parent referral for the current Dn
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            if ( directoryService.getReferralManager().isReferral( dn ) )
+            {
+                // This is a referral. We can delete it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !moveContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
+                }
+            }
+            else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
             {
-                // We have found a parent referral for the current Dn
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                if ( directoryService.getReferralManager().isReferral( dn ) )
+                // We can't delete an entry which has an ancestor referral
+                
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( moveContext.isReferralIgnored() )
                 {
-                    // This is a referral. We can delete it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !moveContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
                 }
-                else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
+                else
                 {
-                    // We can't delete an entry which has an ancestor referral
-
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( moveContext.isReferralIgnored() )
-                    {
-                        directoryService.getReferralManager().unlock();
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
                 }
             }
-
-            // Now, check the destination
-            // If he parent Dn is a referral, or has a referral ancestor, we have to issue a AffectMultipleDsas result
-            // as stated by RFC 3296 Section 5.6.2
-            if ( directoryService.getReferralManager().isReferral( newSuperiorDn )
-                || directoryService.getReferralManager().hasParentReferral( newSuperiorDn ) )
-            {
-                // Unlock the referral manager
-                directoryService.getReferralManager().unlock();
-
-                LdapAffectMultipleDsaException exception = new LdapAffectMultipleDsaException();
-                //exception.setRemainingName( dn );
-
-                throw exception;
-            }
-
-            // Unlock the ReferralManager
-            directoryService.getReferralManager().unlock();
-
-            Entry originalEntry = getOriginalEntry( moveContext );
-
-            moveContext.setOriginalEntry( originalEntry );
-
-            // Call the Move method
-            Interceptor head = directoryService.getInterceptor( moveContext.getNextInterceptor() );
-
-            head.move( moveContext );
         }
-        finally
+        
+        // Now, check the destination
+        // If he parent Dn is a referral, or has a referral ancestor, we have to issue a AffectMultipleDsas result
+        // as stated by RFC 3296 Section 5.6.2
+        if ( directoryService.getReferralManager().isReferral( newSuperiorDn )
+            || directoryService.getReferralManager().hasParentReferral( newSuperiorDn ) )
         {
-            pop();
-
-            LOG.debug( "<< MoveOperation successful" );
-            LOG_CHANGES.debug( "<< MoveOperation successful" );
-        }
+            // Unlock the referral manager
+            directoryService.getReferralManager().unlock();
+            
+            LdapAffectMultipleDsaException exception = new LdapAffectMultipleDsaException();
+            //exception.setRemainingName( dn );
+            
+            throw exception;
+        }
+        
+        // Unlock the ReferralManager
+        directoryService.getReferralManager().unlock();
+        
+        Entry originalEntry = getOriginalEntry( moveContext );
+        
+        moveContext.setOriginalEntry( originalEntry );
+        
+        // Call the Move method
+        Interceptor head = directoryService.getInterceptor( moveContext.getNextInterceptor() );
+        
+        head.move( moveContext );
+        
+        LOG.debug( "<< MoveOperation successful" );
+        LOG_CHANGES.debug( "<< MoveOperation successful" );
     }
 
 
@@ -841,102 +769,94 @@ public class DefaultOperationManager imp
         LOG_CHANGES.debug( ">> MoveAndRenameOperation : {}", moveAndRenameContext );
 
         ensureStarted();
-        push( moveAndRenameContext );
-
-        try
-        {
-            // Normalize the moveAndRenameContext Dn
-            Dn dn = moveAndRenameContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
-
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
-
-            // Check if we have an ancestor for this Dn
-            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
 
-            if ( parentEntry != null )
+        // Normalize the moveAndRenameContext Dn
+        Dn dn = moveAndRenameContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        // Check if we have an ancestor for this Dn
+        Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            // We have found a parent referral for the current Dn
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            if ( directoryService.getReferralManager().isReferral( dn ) )
+            {
+                // This is a referral. We can delete it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !moveAndRenameContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
+                }
+            }
+            else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
             {
-                // We have found a parent referral for the current Dn
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                if ( directoryService.getReferralManager().isReferral( dn ) )
+                // We can't delete an entry which has an ancestor referral
+                
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( moveAndRenameContext.isReferralIgnored() )
                 {
-                    // This is a referral. We can delete it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !moveAndRenameContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
                 }
-                else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
+                else
                 {
-                    // We can't delete an entry which has an ancestor referral
-
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( moveAndRenameContext.isReferralIgnored() )
-                    {
-                        directoryService.getReferralManager().unlock();
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
                 }
             }
-
-            // Now, check the destination
-            // Normalize the moveAndRenameContext Dn
-            Dn newSuperiorDn = moveAndRenameContext.getNewSuperiorDn();
-            newSuperiorDn.apply( directoryService.getSchemaManager() );
-
-            // If he parent Dn is a referral, or has a referral ancestor, we have to issue a AffectMultipleDsas result
-            // as stated by RFC 3296 Section 5.6.2
-            if ( directoryService.getReferralManager().isReferral( newSuperiorDn )
-                || directoryService.getReferralManager().hasParentReferral( newSuperiorDn ) )
-            {
-                // Unlock the referral manager
-                directoryService.getReferralManager().unlock();
-
-                // The parent Dn is a referral, we have to issue a AffectMultipleDsas result
-                // as stated by RFC 3296 Section 5.6.2
-                LdapAffectMultipleDsaException exception = new LdapAffectMultipleDsaException();
-                //exception.setRemainingName( dn );
-
-                throw exception;
-            }
-
-            // Unlock the ReferralManager
-            directoryService.getReferralManager().unlock();
-
-            moveAndRenameContext.setOriginalEntry( getOriginalEntry( moveAndRenameContext ) );
-            moveAndRenameContext.setModifiedEntry( moveAndRenameContext.getOriginalEntry().clone() );
-
-            // Call the MoveAndRename method
-            Interceptor head = directoryService.getInterceptor( moveAndRenameContext.getNextInterceptor() );
-
-            head.moveAndRename( moveAndRenameContext );
         }
-        finally
+        
+        // Now, check the destination
+        // Normalize the moveAndRenameContext Dn
+        Dn newSuperiorDn = moveAndRenameContext.getNewSuperiorDn();
+        newSuperiorDn.apply( directoryService.getSchemaManager() );
+        
+        // If he parent Dn is a referral, or has a referral ancestor, we have to issue a AffectMultipleDsas result
+        // as stated by RFC 3296 Section 5.6.2
+        if ( directoryService.getReferralManager().isReferral( newSuperiorDn )
+            || directoryService.getReferralManager().hasParentReferral( newSuperiorDn ) )
         {
-            pop();
-
-            LOG.debug( "<< MoveAndRenameOperation successful" );
-            LOG_CHANGES.debug( "<< MoveAndRenameOperation successful" );
-        }
+            // Unlock the referral manager
+            directoryService.getReferralManager().unlock();
+            
+            // The parent Dn is a referral, we have to issue a AffectMultipleDsas result
+            // as stated by RFC 3296 Section 5.6.2
+            LdapAffectMultipleDsaException exception = new LdapAffectMultipleDsaException();
+            //exception.setRemainingName( dn );
+            
+            throw exception;
+        }
+        
+        // Unlock the ReferralManager
+        directoryService.getReferralManager().unlock();
+        
+        moveAndRenameContext.setOriginalEntry( getOriginalEntry( moveAndRenameContext ) );
+        moveAndRenameContext.setModifiedEntry( moveAndRenameContext.getOriginalEntry().clone() );
+        
+        // Call the MoveAndRename method
+        Interceptor head = directoryService.getInterceptor( moveAndRenameContext.getNextInterceptor() );
+        
+        head.moveAndRename( moveAndRenameContext );
+        
+        LOG.debug( "<< MoveAndRenameOperation successful" );
+        LOG_CHANGES.debug( "<< MoveAndRenameOperation successful" );
     }
 
 
@@ -949,94 +869,86 @@ public class DefaultOperationManager imp
         LOG_CHANGES.debug( ">> RenameOperation : {}", renameContext );
 
         ensureStarted();
-        push( renameContext );
-
-        try
-        {
-            // Normalize the renameContext Dn
-            Dn dn = renameContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
 
-            // Inject the newDn into the operation context
-            // Inject the new Dn into the context
-            if ( !dn.isEmpty() )
-            {
-                Dn newDn = dn.getParent();
-                newDn = newDn.add( renameContext.getNewRdn() );
-                renameContext.setNewDn( newDn );
+        // Normalize the renameContext Dn
+        Dn dn = renameContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // Inject the newDn into the operation context
+        // Inject the new Dn into the context
+        if ( !dn.isEmpty() )
+        {
+            Dn newDn = dn.getParent();
+            newDn = newDn.add( renameContext.getNewRdn() );
+            renameContext.setNewDn( newDn );
+        }
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        // Check if we have an ancestor for this Dn
+        Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            // We have found a parent referral for the current Dn
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            if ( directoryService.getReferralManager().isReferral( dn ) )
+            {
+                // This is a referral. We can delete it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !renameContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
+                }
             }
-
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
-
-            // Check if we have an ancestor for this Dn
-            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
-
-            if ( parentEntry != null )
+            else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
             {
-                // We have found a parent referral for the current Dn
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                if ( directoryService.getReferralManager().isReferral( dn ) )
+                // We can't delete an entry which has an ancestor referral
+                
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( renameContext.isReferralIgnored() )
+                {
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
+                }
+                else
                 {
-                    // This is a referral. We can delete it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !renameContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
-                }
-                else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
-                {
-                    // We can't delete an entry which has an ancestor referral
-
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( renameContext.isReferralIgnored() )
-                    {
-                        directoryService.getReferralManager().unlock();
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralException( parentEntry, childDn );
-                        throw exception;
-                    }
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralException( parentEntry, childDn );
+                    throw exception;
                 }
             }
-
-            // Unlock the ReferralManager
-            directoryService.getReferralManager().unlock();
-
-            // Call the rename method
-            // populate the context with the old entry
-            eagerlyPopulateFields( renameContext );
-            Entry originalEntry = getOriginalEntry( renameContext );
-            renameContext.setOriginalEntry( originalEntry );
-            renameContext.setModifiedEntry( originalEntry.clone() );
-
-            // Call the Rename method
-            Interceptor head = directoryService.getInterceptor( renameContext.getNextInterceptor() );
-
-            head.rename( renameContext );
-        }
-        finally
-        {
-            pop();
-
-            LOG.debug( "<< RenameOperation successful" );
-            LOG_CHANGES.debug( "<< RenameOperation successful" );
         }
+        
+        // Unlock the ReferralManager
+        directoryService.getReferralManager().unlock();
+        
+        // Call the rename method
+        // populate the context with the old entry
+        eagerlyPopulateFields( renameContext );
+        Entry originalEntry = getOriginalEntry( renameContext );
+        renameContext.setOriginalEntry( originalEntry );
+        renameContext.setModifiedEntry( originalEntry.clone() );
+        
+        // Call the Rename method
+        Interceptor head = directoryService.getInterceptor( renameContext.getNextInterceptor() );
+        
+        head.rename( renameContext );
+        
+        LOG.debug( "<< RenameOperation successful" );
+        LOG_CHANGES.debug( "<< RenameOperation successful" );
     }
 
 
@@ -1048,79 +960,73 @@ public class DefaultOperationManager imp
         LOG.debug( ">> SearchOperation : {}", searchContext );
 
         ensureStarted();
-        push( searchContext );
-
-        try
-        {
-            // Normalize the searchContext Dn
-            Dn dn = searchContext.getDn();
-            dn.apply( directoryService.getSchemaManager() );
 
-            // We have to deal with the referral first
-            directoryService.getReferralManager().lockRead();
-
-            // Check if we have an ancestor for this Dn
-            Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
-
-            if ( parentEntry != null )
+        // Normalize the searchContext Dn
+        Dn dn = searchContext.getDn();
+        dn.apply( directoryService.getSchemaManager() );
+        
+        // We have to deal with the referral first
+        directoryService.getReferralManager().lockRead();
+        
+        // Check if we have an ancestor for this Dn
+        Entry parentEntry = directoryService.getReferralManager().getParentReferral( dn );
+        
+        if ( parentEntry != null )
+        {
+            // We have found a parent referral for the current Dn
+            Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
+            
+            if ( directoryService.getReferralManager().isReferral( dn ) )
+            {
+                // This is a referral. We can return it if the ManageDsaIt flag is true
+                // Otherwise, we just throw a LdapReferralException
+                if ( !searchContext.isReferralIgnored() )
+                {
+                    // Throw a Referral Exception
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralExceptionForSearch( parentEntry, childDn,
+                        searchContext.getScope() );
+                    throw exception;
+                }
+            }
+            else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
             {
-                // We have found a parent referral for the current Dn
-                Dn childDn = dn.getDescendantOf( parentEntry.getDn() );
-
-                if ( directoryService.getReferralManager().isReferral( dn ) )
+                // We can't search an entry which has an ancestor referral
+                
+                // Depending on the Context.REFERRAL property value, we will throw
+                // a different exception.
+                if ( searchContext.isReferralIgnored() )
+                {
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapPartialResultException exception = buildLdapPartialResultException( childDn );
+                    throw exception;
+                }
+                else
                 {
-                    // This is a referral. We can return it if the ManageDsaIt flag is true
-                    // Otherwise, we just throw a LdapReferralException
-                    if ( !searchContext.isReferralIgnored() )
-                    {
-                        // Throw a Referral Exception
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralExceptionForSearch( parentEntry, childDn,
-                            searchContext.getScope() );
-                        throw exception;
-                    }
-                }
-                else if ( directoryService.getReferralManager().hasParentReferral( dn ) )
-                {
-                    // We can't search an entry which has an ancestor referral
-
-                    // Depending on the Context.REFERRAL property value, we will throw
-                    // a different exception.
-                    if ( searchContext.isReferralIgnored() )
-                    {
-                        directoryService.getReferralManager().unlock();
-
-                        LdapPartialResultException exception = buildLdapPartialResultException( childDn );
-                        throw exception;
-                    }
-                    else
-                    {
-                        // Unlock the referral manager
-                        directoryService.getReferralManager().unlock();
-
-                        LdapReferralException exception = buildReferralExceptionForSearch( parentEntry, childDn,
-                            searchContext.getScope() );
-                        throw exception;
-                    }
+                    // Unlock the referral manager
+                    directoryService.getReferralManager().unlock();
+                    
+                    LdapReferralException exception = buildReferralExceptionForSearch( parentEntry, childDn,
+                        searchContext.getScope() );
+                    throw exception;
                 }
             }
-
-            // Unlock the ReferralManager
-            directoryService.getReferralManager().unlock();
-
-            // Call the Search method
-            Interceptor head = directoryService.getInterceptor( searchContext.getNextInterceptor() );
-
-            return head.search( searchContext );
-        }
-        finally
-        {
-            pop();
-
-            LOG.debug( "<< SearchOperation successful" );
         }
+        
+        // Unlock the ReferralManager
+        directoryService.getReferralManager().unlock();
+        
+        // Call the Search method
+        Interceptor head = directoryService.getInterceptor( searchContext.getNextInterceptor() );
+        
+        EntryFilteringCursor cursor = head.search( searchContext );
+        
+        LOG.debug( "<< SearchOperation successful" );
+        
+        return cursor;
     }
 
 
@@ -1132,7 +1038,6 @@ public class DefaultOperationManager imp
         LOG.debug( ">> UnbindOperation : {}", unbindContext );
 
         ensureStarted();
-        push( unbindContext );
 
         try
         {
@@ -1143,7 +1048,6 @@ public class DefaultOperationManager imp
         }
         finally
         {
-            pop();
         }
 
         LOG.debug( "<< UnbindOperation successful" );
@@ -1157,20 +1061,4 @@ public class DefaultOperationManager imp
             throw new LdapServiceUnavailableException( ResultCodeEnum.UNAVAILABLE, I18n.err( I18n.ERR_316 ) );
         }
     }
-
-
-    private void pop()
-    {
-        // TODO - need to remove Context caller and PartitionNexusProxy from Invocations
-        InvocationStack stack = InvocationStack.getInstance();
-        stack.pop();
-    }
-
-
-    private void push( OperationContext opContext )
-    {
-        // TODO - need to remove Context caller and PartitionNexusProxy from Invocations
-        InvocationStack stack = InvocationStack.getInstance();
-        stack.push( opContext );
-    }
 }