package lsr.service;
import java.util.ArrayList;
import java.util.List;
import lsr.paxos.replica.SnapshotListener;
/**
* Abstract class which can be used to simplify creating new services. It adds
* implementation for handling snapshot listeners.
*/
public abstract class AbstractService implements Service {
/** Listeners which will be notified about new snapshot made by service */
protected List<SnapshotListener> listeners = new ArrayList<SnapshotListener>();
public final void addSnapshotListener(SnapshotListener listener) {
listeners.add(listener);
}
public final void removeSnapshotListener(SnapshotListener listener) {
listeners.remove(listener);
}
/**
* Notifies all active listeners that new snapshot has been made.
*
* @param nextRequestSeqNo - the next sequential number (last executed
* sequential number+1) of created snapshot
* @param snapshot - the data containing snapshot
* @param response - if the snapshot is called within execute method for
* after the just executed request, the response must be provided
*/
protected void fireSnapshotMade(int nextRequestSeqNo, byte[] snapshot, byte[] response) {
for (SnapshotListener listener : listeners) {
listener.onSnapshotMade(nextRequestSeqNo, snapshot, response);
}
}
/**
* Informs the service that the recovery process has been finished, i.e.
* that the service is at least at the state later than by crashing.
*
* Please notice, for some crash-recovery approaches this can mean that the
* service is a lot further than by crash.
*
* For many applications this has no real meaning.
*/
public void recoveryFinished() {
}
}