You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/05/29 00:31:04 UTC

svn commit: rev 20556 - incubator/directory/rms/trunk/je/src/java/org/apache/rms/je/profile

Author: akarasulu
Date: Fri May 28 15:31:02 2004
New Revision: 20556

Modified:
   incubator/directory/rms/trunk/je/src/java/org/apache/rms/je/profile/JeProfileRoleLinkDAO.java
Log:
Made the JeProfileRoleLinkDAO an Observer of JeIterator changes to cleanup
after them properly.  Still need to add cleanup code though.


Modified: incubator/directory/rms/trunk/je/src/java/org/apache/rms/je/profile/JeProfileRoleLinkDAO.java
==============================================================================
--- incubator/directory/rms/trunk/je/src/java/org/apache/rms/je/profile/JeProfileRoleLinkDAO.java	(original)
+++ incubator/directory/rms/trunk/je/src/java/org/apache/rms/je/profile/JeProfileRoleLinkDAO.java	Fri May 28 15:31:02 2004
@@ -29,8 +29,7 @@
 
 import org.apache.commons.lang.Validate ;
 
-import java.util.List ;
-import java.util.Iterator ;
+import java.util.*;
 
 import java.io.IOException ;
 import java.io.UnsupportedEncodingException ;
@@ -44,7 +43,7 @@
  * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
-public class JeProfileRoleLinkDAO implements ProfileRoleLinkDAO
+public class JeProfileRoleLinkDAO implements ProfileRoleLinkDAO, Observer
 {
     /** the name of secondary db used to associate links with an appName */
     public static final String APPNAME_SECDB  = "roleLinkByAppName" ;
@@ -71,6 +70,9 @@
     /** callback used to for monitoring noteable events */
     private ProfileRoleLinkDAOMonitor monitor = null ;
 
+    /** set of open iterators created by this DAO */
+    private HashSet openIterators = new HashSet() ;
+
 
     // -----------------------------------------------------------------------
     // C O N S T R U C T O R S
@@ -584,6 +586,8 @@
 
             JeIterator iterator = new JeIterator( cursor, secCursors,
                     JeProfileRoleLinkBinding.ROLENAME_BINDING, true ) ;
+            iterator.addObserver( this ) ;
+            openIterators.add( iterator ) ;
             monitor.listingRoleNames( this, appName, userName, iterator ) ;
             iterator.setMonitor( LIST_MONITOR ) ;
             return iterator ;
@@ -686,6 +690,8 @@
             cursor = db.join( secCursors, null ) ;
             JeIterator iterator = new JeIterator( cursor, secCursors,
                     JeProfileRoleLinkBinding.USERNAME_BINDING, true ) ;
+            iterator.addObserver( this ) ;
+            openIterators.add( iterator ) ;
             monitor.listingUserNames( this, appName, roleName, iterator ) ;
             iterator.setMonitor( LIST_MONITOR ) ;
             return iterator ;
@@ -907,5 +913,29 @@
     public void setMonitor( ProfileRoleLinkDAOMonitor monitor )
     {
         this.monitor = monitor ;
+    }
+
+
+    // -----------------------------------------------------------------------
+    // Observer Implemenation
+    // -----------------------------------------------------------------------
+
+
+    /**
+     * All JeIterators created by this DAO are tracked to make sure they are
+     * cleaned up properly.  The Observer pattern helps it keep track of open
+     * and closed JeIterators by notifying this DAO when the iterator is
+     * closed.  When these cursors close they can be removed from the list of
+     * open iterators.
+     *
+     * @param o the Observable object
+     * @param arg an argument associated with the object
+     */
+    public void update( Observable o, Object arg )
+    {
+        if ( o instanceof JeIterator )
+        {
+            openIterators.remove( o ) ;
+        }
     }
 }