Tweak Javadocs

This commit is contained in:
dsyer
2007-12-12 23:14:34 +00:00
parent b754c05807
commit 82d7235249

View File

@@ -29,24 +29,30 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
/**
* <p>Abstract base class for driving query input sources. Input Sources of
* this type use a 'driving query' to return back a list of keys. Upon each
* call to read, a new key is returned.</p>
*
* <p>Mutability: Because this base class cannot guarantee that the keys returned
* <p>
* Convenience class for driving query input sources. Input Sources of this type
* use a 'driving query' to return back a list of keys. Upon each call to read,
* a new key is returned. To use the input source, inject a key generation
* strategy.
* </p>
*
* <p>
* Mutability: Because this base class cannot guarantee that the keys returned
* by subclasses are immutable, care should be taken to not modify a key value.
* Doing so would cause issues if a rollback occurs. For example, if a call
* to read() is made, and the returned key is modified, a rollback will cause
* the next call to read() to return the same object that was originally returned,
* since there is no way to create a defensive copy, and re-querying the database
* for all the keys would be too resource intensive.</p>
*
*
* Doing so would cause issues if a rollback occurs. For example, if a call to
* read() is made, and the returned key is modified, a rollback will cause the
* next call to read() to return the same object that was originally returned,
* since there is no way to create a defensive copy, and re-querying the
* database for all the keys would be too resource intensive.
* </p>
*
*
* @author Lucas Ward
* @since 1.0
*/
public class DrivingQueryInputSource extends AbstractTransactionalIoSource implements InputSource,
ResourceLifecycle, InitializingBean, DisposableBean, Restartable {
public class DrivingQueryInputSource extends AbstractTransactionalIoSource
implements InputSource, ResourceLifecycle, InitializingBean,
DisposableBean, Restartable {
private boolean initialized = false;
@@ -57,29 +63,30 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
private int currentIndex = 0;
private int lastCommitIndex = 0;
private KeyGenerator keyGenerator;
public DrivingQueryInputSource() {
public DrivingQueryInputSource() {
}
/**
* Initialize the input source with the provided keys list.
*
* @param keys
*/
public DrivingQueryInputSource(List keys) {
public DrivingQueryInputSource(List keys) {
this.keys = keys;
this.keysIterator = keys.iterator();
}
/**
* Return the next key in the List. If the InputSource has not been initialized yet,
* then {@link AbstractDrivingQueryInputSource.open()} will be called.
*
* @return next key in the list if not index is not at the last element, null otherwise.
* Return the next key in the List. If the InputSource has not been
* initialized yet, then {@link AbstractDrivingQueryInputSource.open()} will
* be called.
*
* @return next key in the list if not index is not at the last element,
* null otherwise.
*/
public Object read() {
if (!initialized) {
@@ -95,15 +102,14 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
}
/**
* Get the current key. This method will return the same
* object returned by the last read() method. If the
* InputSource hasn't been initialized yet, then null will
* be returned.
*
* Get the current key. This method will return the same object returned by
* the last read() method. If the InputSource hasn't been initialized yet,
* then null will be returned.
*
* @return the current key.
*/
protected Object getCurrentKey(){
if(initialized){
protected Object getCurrentKey() {
if (initialized) {
return keys.get(currentIndex - 1);
}
@@ -111,8 +117,8 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
}
/**
* Close the resource by setting the list of keys to null, allowing them
* to be garbage collected.
* Close the resource by setting the list of keys to null, allowing them to
* be garbage collected.
*/
public void close() {
initialized = false;
@@ -123,24 +129,28 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
}
/**
* Initialize the input source by delegating to the subclass in order to retrieve
* the keys. The input source will also be registered with the
* {@link BatchTransactionSynchronizationManager} in order to ensure it is notified
* about commits and rollbacks.
*
* @throws IllegalStateException if the keys list is null or initialized is true.
* Initialize the input source by delegating to the subclass in order to
* retrieve the keys. The input source will also be registered with the
* {@link BatchTransactionSynchronizationManager} in order to ensure it is
* notified about commits and rollbacks.
*
* @throws IllegalStateException
* if the keys list is null or initialized is true.
*/
public void open() {
Assert.state(keys == null || initialized, "Cannot open an already opened input source" +
", call close() first.");
Assert.state(keys == null || initialized,
"Cannot open an already opened input source"
+ ", call close() first.");
keys = keyGenerator.retrieveKeys();
keysIterator = keys.listIterator();
super.registerSynchronization();
initialized = true;
}
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see org.springframework.beans.factory.DisposableBean#destroy()
*/
public void destroy() throws Exception {
@@ -155,16 +165,20 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
* data could be returned. The RestartData attempting to be restored from
* must have been obtained from the <strong>same input source as the one
* being restored from</strong> otherwise it is invalid.
*
* @throws IllegalArgumentException if restart data or it's properties is null.
* @throws IllegalStateException if the input source has already been initialized.
*
* @throws IllegalArgumentException
* if restart data or it's properties is null.
* @throws IllegalStateException
* if the input source has already been initialized.
*/
public final void restoreFrom(RestartData data) {
Assert.notNull(data, "RestartData must not be null.");
Assert.notNull(data.getProperties(), "RestartData properties must not be null.");
Assert.state(!initialized, "Cannot restore when already intialized. Call"
+ " close() first before restore()");
Assert.notNull(data.getProperties(),
"RestartData properties must not be null.");
Assert.state(!initialized,
"Cannot restore when already intialized. Call"
+ " close() first before restore()");
if (data.getProperties().size() == 0) {
return;
@@ -172,7 +186,7 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
keys = keyGenerator.restoreKeys(data);
if(keys != null && keys.size() > 0){
if (keys != null && keys.size() > 0) {
keysIterator = keys.listIterator();
initialized = true;
}
@@ -181,18 +195,17 @@ public class DrivingQueryInputSource extends AbstractTransactionalIoSource imple
public RestartData getRestartData() {
return keyGenerator.getKeyAsRestartData(getCurrentKey());
}
public void afterPropertiesSet() throws Exception {
Assert.notNull(keyGenerator, "The KeyGenerator must not be null.");
}
/**
* Set the key generation strategy to use for this input source.
*
* @param keyGenerator
*/
public void setKeyGenerator(
KeyGenerator keyGenerator) {
public void setKeyGenerator(KeyGenerator keyGenerator) {
this.keyGenerator = keyGenerator;
}