Author: manik.surtani(a)jboss.com
Date: 2008-05-29 08:20:13 -0400 (Thu, 29 May 2008)
New Revision: 5910
Modified:
core/trunk/src/test/java/org/jboss/cache/util/internals/ReplicationListener.java
Log:
1. Genericized
2. Added an additional wait() method to allow for more detailed time units
Modified:
core/trunk/src/test/java/org/jboss/cache/util/internals/ReplicationListener.java
===================================================================
---
core/trunk/src/test/java/org/jboss/cache/util/internals/ReplicationListener.java 2008-05-29
12:01:48 UTC (rev 5909)
+++
core/trunk/src/test/java/org/jboss/cache/util/internals/ReplicationListener.java 2008-05-29
12:20:13 UTC (rev 5910)
@@ -20,8 +20,9 @@
/**
* Utility class that notifies when certain commands were asynchronously replicated on
secondary cache.
* Especially useful for avaoiding Thread.sleep() statements.
+ * <p/>
+ * Usage:
* <pre>
- * Usage:
* Cache c1, c2; //these being two async caches
* AsyncReplicationListener listener2 = new AsyncReplicationListener(c2);
* listener2.expect(PutKeyValueCommand.class);
@@ -30,7 +31,7 @@
* </pre>
* Lifecycle - after being used (i.e. waitForReplicationToOccur returns sucessfully) the
object returns to the
* non-initialized state and *can* be reused through expect-wait cycle.
- * Note: this class might be used aswell for sync caches, though it does not really make
sence using it in these scenarios
+ * Note: this class might be used aswell for sync caches, though it does not really make
sence using it in these scenarios
*
* @author Mircea.Markus(a)jboss.com
* @since 2.2
@@ -38,7 +39,7 @@
public class ReplicationListener
{
private CountDownLatch latch = new CountDownLatch(1);
- private Set expectedCommands;
+ private Set<Class<? extends ReplicableCommand>> expectedCommands;
/**
* Builds a listener that will observe the given cache for recieving replication
commands.
@@ -74,10 +75,10 @@
if (result instanceof ReplicateCommand && expectedCommands != null)
{
ReplicateCommand replicateCommand = (ReplicateCommand) result;
- Iterator it = expectedCommands.iterator();
+ Iterator<Class<? extends ReplicableCommand>> it =
expectedCommands.iterator();
while (it.hasNext())
{
- Class<? extends ReplicableCommand> replicableCommandClass =
(Class<? extends ReplicableCommand>) it.next();
+ Class<? extends ReplicableCommand> replicableCommandClass =
it.next();
if (replicateCommand.containsCommandType(replicableCommandClass))
{
it.remove();
@@ -103,20 +104,35 @@
/**
* Blocks for the elements specified through {@link #expect(Class[])} invocations to
be replicated in this cache.
* if replication does not occur in the give timeout then an exception is being
thrown.
+ *
+ * @param timeoutMillis timeout in milliseconds
*/
public void waitForReplicationToOccur(long timeoutMillis)
{
+ waitForReplicationToOccur(timeoutMillis, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * Similar to {@link #waitForReplicationToOccur(long)} except that this method
provides more flexibility in time units.
+ *
+ * @param timeout the maximum time to wait
+ * @param timeUnit the time unit of the <tt>timeout</tt> argument.
+ */
+ public void waitForReplicationToOccur(long timeout, TimeUnit timeUnit)
+ {
assert expectedCommands != null : "there are no replication expectations;
please use AsyncReplicationListener.expect(...) before calling this method";
try
{
- if (!latch.await(timeoutMillis, TimeUnit.MILLISECONDS))
+ if (!latch.await(timeout, timeUnit))
{
- assert false : "waiting for more than " + timeoutMillis + "
millis and following commands did not replicate: " + expectedCommands;
+ assert false : "waiting for more than " + timeout + " " +
timeUnit + " and following commands did not replicate: " + expectedCommands;
}
- } catch (InterruptedException e)
+ }
+ catch (InterruptedException e)
{
throw new IllegalStateException("unexpected", e);
- } finally
+ }
+ finally
{
expectedCommands = null;
latch = new CountDownLatch(1);
@@ -131,7 +147,7 @@
{
if (this.expectedCommands == null)
{
- this.expectedCommands = new HashSet();
+ this.expectedCommands = new HashSet<Class<? extends
ReplicableCommand>>();
}
this.expectedCommands.addAll(Arrays.asList(expectedCommands));
}
Show replies by thread