Refactored ConcurrentHandler to accept a preconfigured ExecutorService rather than creating one from the ConcurrencyPolicy.
This commit is contained in:
@@ -21,6 +21,9 @@ import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@@ -58,8 +61,8 @@ public class DefaultMessageDispatcherTests {
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()));
|
||||
SimpleMessagingTaskScheduler scheduler = new SimpleMessagingTaskScheduler();
|
||||
scheduler.start();
|
||||
dispatcher.setMessagingTaskScheduler(scheduler);
|
||||
@@ -79,8 +82,8 @@ public class DefaultMessageDispatcherTests {
|
||||
SimpleChannel channel = new SimpleChannel(new DispatcherPolicy(true));
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()));
|
||||
dispatcher.start();
|
||||
latch.await(2000, TimeUnit.MILLISECONDS);
|
||||
assertEquals("messages should have been dispatched within allotted time", 0, latch.getCount());
|
||||
@@ -99,13 +102,11 @@ public class DefaultMessageDispatcherTests {
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)) {
|
||||
@Override
|
||||
public void start() {
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, new ConcurrencyPolicy(1, 1)));
|
||||
ConcurrentHandler inactiveHandler = new ConcurrentHandler(handler1, createExecutor());
|
||||
inactiveHandler.destroy();
|
||||
dispatcher.addHandler(inactiveHandler);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, createExecutor()));
|
||||
dispatcher.start();
|
||||
latch.await(2000, TimeUnit.MILLISECONDS);
|
||||
assertEquals("messages should have been dispatched within allotted time", 0, latch.getCount());
|
||||
@@ -125,13 +126,11 @@ public class DefaultMessageDispatcherTests {
|
||||
SimpleChannel channel = new SimpleChannel(new DispatcherPolicy(true));
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)) {
|
||||
@Override
|
||||
public void start() {
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, new ConcurrencyPolicy(1, 1)));
|
||||
ConcurrentHandler inactiveHandler = new ConcurrentHandler(handler2, createExecutor());
|
||||
inactiveHandler.destroy();
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()));
|
||||
dispatcher.addHandler(inactiveHandler);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, createExecutor()));
|
||||
dispatcher.start();
|
||||
latch.await(2000, TimeUnit.MILLISECONDS);
|
||||
assertEquals("messages should have been dispatched within allotted time", 0, latch.getCount());
|
||||
@@ -161,14 +160,14 @@ public class DefaultMessageDispatcherTests {
|
||||
channel.getDispatcherPolicy().setRetryInterval(3);
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
throw new MessageHandlerRejectedExecutionException();
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, new ConcurrencyPolicy(1, 1)));
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, createExecutor()));
|
||||
SimpleChannel errorChannel = new SimpleChannel();
|
||||
SimpleMessagingTaskScheduler scheduler = new SimpleMessagingTaskScheduler();
|
||||
scheduler.setErrorHandler(new MessagePublishingErrorHandler(errorChannel));
|
||||
@@ -249,7 +248,7 @@ public class DefaultMessageDispatcherTests {
|
||||
channel.getDispatcherPolicy().setShouldFailOnRejectionLimit(false);
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
rejectedCounter1.incrementAndGet();
|
||||
@@ -257,7 +256,7 @@ public class DefaultMessageDispatcherTests {
|
||||
throw new MessageHandlerRejectedExecutionException();
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
rejectedCounter2.incrementAndGet();
|
||||
@@ -293,7 +292,7 @@ public class DefaultMessageDispatcherTests {
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
rejectedCounter1.incrementAndGet();
|
||||
@@ -301,7 +300,7 @@ public class DefaultMessageDispatcherTests {
|
||||
throw new MessageHandlerRejectedExecutionException();
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
if (rejectedCounter2.get() == 1) {
|
||||
@@ -312,7 +311,7 @@ public class DefaultMessageDispatcherTests {
|
||||
throw new MessageHandlerRejectedExecutionException();
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler3, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
rejectedCounter3.incrementAndGet();
|
||||
@@ -347,7 +346,7 @@ public class DefaultMessageDispatcherTests {
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
channel.send(new StringMessage(1, "test"));
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler1, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
if (rejectedCounter1.get() == 2) {
|
||||
@@ -358,7 +357,7 @@ public class DefaultMessageDispatcherTests {
|
||||
throw new MessageHandlerRejectedExecutionException();
|
||||
}
|
||||
});
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, new ConcurrencyPolicy(1, 1)) {
|
||||
dispatcher.addHandler(new ConcurrentHandler(handler2, createExecutor()) {
|
||||
@Override
|
||||
public Message<?> handle(Message<?> message) {
|
||||
if (rejectedCounter2.get() == 4) {
|
||||
@@ -474,4 +473,9 @@ public class DefaultMessageDispatcherTests {
|
||||
assertEquals("endpoint2 should have accepted the message", 1, counter2.get());
|
||||
}
|
||||
|
||||
|
||||
private static ExecutorService createExecutor() {
|
||||
return new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,9 @@ import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@@ -168,7 +171,7 @@ public class DefaultMessageEndpointTests {
|
||||
};
|
||||
DefaultMessageEndpoint endpoint = new DefaultMessageEndpoint();
|
||||
endpoint.setChannelRegistry(channelRegistry);
|
||||
endpoint.setHandler(new ConcurrentHandler(handler));
|
||||
endpoint.setHandler(new ConcurrentHandler(handler, createExecutor()));
|
||||
endpoint.setDefaultOutputChannelName("replyChannel");
|
||||
endpoint.start();
|
||||
endpoint.handle(new StringMessage(1, "test"));
|
||||
@@ -219,7 +222,7 @@ public class DefaultMessageEndpointTests {
|
||||
};
|
||||
DefaultMessageEndpoint endpoint = new DefaultMessageEndpoint();
|
||||
endpoint.setChannelRegistry(channelRegistry);
|
||||
endpoint.setHandler(new ConcurrentHandler(handler));
|
||||
endpoint.setHandler(new ConcurrentHandler(handler, createExecutor()));
|
||||
endpoint.setDefaultOutputChannelName("replyChannel");
|
||||
endpoint.start();
|
||||
endpoint.handle(new StringMessage(1, "test"));
|
||||
@@ -244,7 +247,7 @@ public class DefaultMessageEndpointTests {
|
||||
};
|
||||
DefaultMessageEndpoint endpoint = new DefaultMessageEndpoint();
|
||||
endpoint.setChannelRegistry(channelRegistry);
|
||||
endpoint.setHandler(new ConcurrentHandler(handler));
|
||||
endpoint.setHandler(new ConcurrentHandler(handler, createExecutor()));
|
||||
endpoint.start();
|
||||
StringMessage message = new StringMessage(1, "test");
|
||||
message.getHeader().setReplyChannelName("replyChannel");
|
||||
@@ -449,4 +452,9 @@ public class DefaultMessageEndpointTests {
|
||||
endpoint.stop();
|
||||
}
|
||||
|
||||
|
||||
private static ExecutorService createExecutor() {
|
||||
return new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user