com.waveset.adapter
Class DblBufObjectIter

java.lang.Object
  extended bycom.waveset.adapter.DblBufIterator
      extended bycom.waveset.adapter.DblBufObjectIter
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
AgentResourceAdapter.BlockObjectIterator

public abstract class DblBufObjectIter
extends DblBufIterator
implements java.lang.Runnable

The DblBufObjectIter class is an abstract base class to provide a double buffering scheme for an account iterator. All the subclass needs to provide is a way to fill an array with users (subFillArray() method) and a way to handle a close in the middle (subClose() method). Below is a basic description of how the double buffering works. When instantiated, the first block of users is loaded. A thread is then started that loads the next block of users. It then waits for the the first block of users to be retrieved through calls to getNext(). Once all of the users in the first block are retrieved, additional calls to get next will retrieve users from the second block. Meanwhile, the thread will fill up the first block with additional users. Synchronization of the thread getting the users from the LDAP server (the producer) and the thread calling getNext() (the consumer) is done using Java's built in locking mechanisms on the 2 ArrayList instances containing the users. When the producer finishes filling up an ArrayList it does a notify on it. It then tries to get a lock on the other ArrayList. Once it does, it checks to see if it is empty. If it is not, it waits on the the ArrayList's lock. The consumer thread will do a notify when it finishes with that ArrayList and clears it. This will wake up the producer. If the array was empty when the producer checked it, it will proceed to fill it while maintaining the lock on the ArrayList. When the consumer attempts to access an ArrayList it waits until it can get a lock on it. If it contains any entries, then it gets one off the list and returns it. If there are no entries, it waits on the ArrayList (this gives the producer control, if it is waiting for the lock).


Field Summary
static java.lang.String code_id
           
 
Fields inherited from class com.waveset.adapter.DblBufIterator
_trace
 
Constructor Summary
DblBufObjectIter(int blockSize)
           
 
Method Summary
 void close()
           
 boolean hasNext()
           
 GenericObject next()
           
protected abstract  void subClose()
           
protected abstract  void subFillArray(java.util.ArrayList arrayList)
           
 
Methods inherited from class com.waveset.adapter.DblBufIterator
finalize, getCurrentArray, getError, getFillArray, getNextArray, getNextIndex, hasError, isDone, isRun, nextObject, notifyArrays, run, setCurrentArray, setDone, setError, setRun, start
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.lang.Runnable
run
 

Field Detail

code_id

public static final java.lang.String code_id
See Also:
Constant Field Values
Constructor Detail

DblBufObjectIter

public DblBufObjectIter(int blockSize)
                 throws WavesetException
Method Detail

subFillArray

protected abstract void subFillArray(java.util.ArrayList arrayList)
                              throws java.lang.Exception
Specified by:
subFillArray in class DblBufIterator
Throws:
java.lang.Exception

subClose

protected abstract void subClose()
Specified by:
subClose in class DblBufIterator

hasNext

public boolean hasNext()
                throws WavesetException
Overrides:
hasNext in class DblBufIterator
Throws:
WavesetException

close

public void close()
Overrides:
close in class DblBufIterator

next

public GenericObject next()
                   throws java.util.NoSuchElementException,
                          WavesetException
Throws:
java.util.NoSuchElementException
WavesetException