summaryrefslogtreecommitdiff
path: root/src/main/java/com/amazon/carbonado/capability
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2008-06-06 00:18:14 +0000
committerBrian S. O'Neill <bronee@gmail.com>2008-06-06 00:18:14 +0000
commita6aa4d5279c2a7ab9aa87e80488e90cafae69e69 (patch)
tree7206329c3038a929fcc77b862a4e3c4a05cf1f5b /src/main/java/com/amazon/carbonado/capability
parent25dad57d68a1f6fb56bac9f3afe166409cf96cff (diff)
Added listener callback for replicated repository resync.
Diffstat (limited to 'src/main/java/com/amazon/carbonado/capability')
-rw-r--r--src/main/java/com/amazon/carbonado/capability/ResyncCapability.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java b/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java
index 502fc5c..337afb0 100644
--- a/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java
+++ b/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java
@@ -46,8 +46,63 @@ public interface ResyncCapability extends Capability {
throws RepositoryException;
/**
+ * Re-synchronizes replicated storables against the master repository.
+ *
+ * @param type type of storable to re-sync
+ * @param listener optional listener which gets notified as storables are re-sync'd
+ * @param desiredSpeed throttling parameter - 1.0 = full speed, 0.5 = half
+ * speed, 0.1 = one-tenth speed, etc
+ * @param filter optional query filter to limit which objects get re-sync'ed
+ * @param filterValues filter values for optional filter
+ * @since 1.2
+ */
+ <S extends Storable> void resync(Class<S> type,
+ Listener<? super S> listener,
+ double desiredSpeed,
+ String filter,
+ Object... filterValues)
+ throws RepositoryException;
+
+ /**
* Returns the immediate master Repository, for manual comparison. Direct
* updates to the master will likely create inconsistencies.
*/
Repository getMasterRepository();
+
+ /**
+ * Defines callbacks which are invoked as storables get re-sync'd. The
+ * callback is invoked in the scope of the resync transaction. If any
+ * exception is thrown, the immediate changes are rolled back and the
+ * entire repository resync operation is aborted.
+ *
+ * <p>The listener implementation should return quickly from the callback
+ * methods, to avoid lingering transactions. If the listener is used to
+ * invoke special repair operations, they should be placed into a task
+ * queue. A separate thread can then perform the repairs outside the resync
+ * transaction.
+ */
+ public static interface Listener<S> {
+ /**
+ * Called when a storable was inserted as part of a resync.
+ *
+ * @param newStorable storable which was inserted, never null
+ */
+ void inserted(S newStorable);
+
+ /**
+ * Called when a storable was updated as part of a resync. Both old and
+ * new storables have a matching primary key.
+ *
+ * @param oldStorable storable which was deleted, never null
+ * @param newStorable storable which was inserted, never null
+ */
+ void updated(S oldStorable, S newStorable);
+
+ /**
+ * Called when a storable was deleted as part of a resync.
+ *
+ * @param oldStorable storable which was deleted, never null
+ */
+ void deleted(S oldStorable);
+ }
}