com.waveset.adapter
Class DblBufObjectIter
java.lang.Object
com.waveset.adapter.DblBufIterator
com.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
|
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 |
code_id
public static final java.lang.String code_id
- See Also:
- Constant Field Values
DblBufObjectIter
public DblBufObjectIter(int blockSize)
throws WavesetException
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