commit the open txns after using them
diff --git a/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java b/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java
index 7affbcd..923fe26 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/api/filtering/CursorList.java
@@ -19,6 +19,7 @@
 package org.apache.directory.server.core.api.filtering;
 
 
+import java.io.IOException;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -442,6 +443,19 @@
                 LOG.warn( "Failed to close the cursor" );
             }
         }
+        try
+        {
+            // FIXME this is incorrect instead close the txn associated with each cursor
+            // the below code only commits the last searched partition's txn
+            // the fix is to modify the cursor impls to accept a flag and a txn handle
+            // and then decide whether the caller wants the txn to be closed at the time of
+            // closing the cursor
+            searchContext.getTransaction().commit();
+        }
+        catch ( IOException e )
+        {
+            //ignore
+        }
     }
 
 
diff --git a/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java b/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java
index 208cf56..077838d 100644
--- a/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java
+++ b/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/DefaultPartitionNexus.java
@@ -81,8 +81,10 @@
 import org.apache.directory.server.core.api.partition.Partition;
 import org.apache.directory.server.core.api.partition.PartitionNexus;
 import org.apache.directory.server.core.api.partition.PartitionReadTxn;
+import org.apache.directory.server.core.api.partition.PartitionReadTxnImpl;
 import org.apache.directory.server.core.api.partition.PartitionTxn;
 import org.apache.directory.server.core.api.partition.PartitionWriteTxn;
+import org.apache.directory.server.core.api.partition.PartitionWriteTxnImpl;
 import org.apache.directory.server.core.api.partition.Subordinates;
 import org.apache.directory.server.i18n.I18n;
 import org.slf4j.Logger;
@@ -1121,13 +1123,13 @@
     @Override
     public PartitionReadTxn beginReadTransaction()
     {
-        return new PartitionReadTxn();
+        return new PartitionReadTxnImpl();
     }
 
 
     @Override
     public PartitionWriteTxn beginWriteTransaction()
     {
-        return new PartitionWriteTxn();
+        return new PartitionWriteTxnImpl();
     }
 }
diff --git a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
index 1564c72..b764879 100644
--- a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
+++ b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/GroupCache.java
@@ -52,6 +52,7 @@
 import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
 import org.apache.directory.server.core.api.partition.Partition;
 import org.apache.directory.server.core.api.partition.PartitionNexus;
+import org.apache.directory.server.core.api.partition.PartitionTxn;
 import org.apache.directory.server.i18n.I18n;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -156,11 +157,13 @@
                 baseDn, filter, ctls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.DEREF_ALWAYS );
             searchOperationContext.setPartition( partition );
-            searchOperationContext.setTransaction( partition.beginReadTransaction() );
+            PartitionTxn tx = partition.beginReadTransaction();
+            searchOperationContext.setTransaction( tx );
             EntryFilteringCursor results = nexus.search( searchOperationContext );
 
             try
             {
+                tx.commit();
                 while ( results.next() )
                 {
                     Entry result = results.get();
diff --git a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
index d38cc49..e3132981 100644
--- a/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
+++ b/interceptors/authz/src/main/java/org/apache/directory/server/core/authz/TupleCache.java
@@ -57,6 +57,7 @@
 import org.apache.directory.server.core.api.interceptor.context.SearchOperationContext;
 import org.apache.directory.server.core.api.partition.Partition;
 import org.apache.directory.server.core.api.partition.PartitionNexus;
+import org.apache.directory.server.core.api.partition.PartitionTxn;
 import org.apache.directory.server.i18n.I18n;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -133,12 +134,14 @@
                 baseDn, filter, ctls );
             searchOperationContext.setAliasDerefMode( AliasDerefMode.NEVER_DEREF_ALIASES );
             searchOperationContext.setPartition( partition );
-            searchOperationContext.setTransaction( partition.beginReadTransaction() );
+            PartitionTxn tx = partition.beginReadTransaction();
+            searchOperationContext.setTransaction( tx );
 
             EntryFilteringCursor results = nexus.search( searchOperationContext );
 
             try
             {
+                tx.commit();
                 while ( results.next() )
                 {
                     Entry result = results.get();