Refactored DefaultMessageDispatcher to delegate to MessageDistributor with logic previously in the DispatcherTask. The DispatcherTask is now an inner class of DefaultMessageDispatcher. Also added ChannelPurger (INT-105), MessageSelectingInterceptor (INT-98), and support for "datatype channels" (INT-99).
This commit is contained in:
@@ -23,10 +23,10 @@ import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.channel.MessageChannel;
|
||||
import org.springframework.integration.channel.SimpleChannel;
|
||||
import org.springframework.integration.dispatcher.DefaultMessageDispatcher;
|
||||
import org.springframework.integration.dispatcher.DispatcherPolicy;
|
||||
import org.springframework.integration.dispatcher.DispatcherTask;
|
||||
import org.springframework.integration.dispatcher.MessageDispatcher;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
|
||||
@@ -38,13 +38,8 @@ public class ByteStreamTargetAdapterTests {
|
||||
@Test
|
||||
public void testSingleByteArray() {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
ByteStreamTargetAdapter adapter = new ByteStreamTargetAdapter(stream);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}));
|
||||
int count = dispatcherTask.dispatch();
|
||||
assertEquals(1, count);
|
||||
adapter.handle(new GenericMessage<byte[]>(new byte[] {1,2,3}));
|
||||
byte[] result = stream.toByteArray();
|
||||
assertEquals(3, result.length);
|
||||
assertEquals(1, result[0]);
|
||||
@@ -55,13 +50,8 @@ public class ByteStreamTargetAdapterTests {
|
||||
@Test
|
||||
public void testSingleString() {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
ByteStreamTargetAdapter adapter = new ByteStreamTargetAdapter(stream);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
channel.send(new StringMessage("foo"));
|
||||
int count = dispatcherTask.dispatch();
|
||||
assertEquals(1, count);
|
||||
adapter.handle(new StringMessage("foo"));
|
||||
byte[] result = stream.toByteArray();
|
||||
assertEquals(3, result.length);
|
||||
assertEquals("foo", new String(result));
|
||||
@@ -74,12 +64,12 @@ public class ByteStreamTargetAdapterTests {
|
||||
DispatcherPolicy dispatcherPolicy = new DispatcherPolicy();
|
||||
dispatcherPolicy.setMaxMessagesPerTask(3);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(3, dispatcherTask.dispatch());
|
||||
assertEquals(3, dispatcher.dispatch());
|
||||
byte[] result = stream.toByteArray();
|
||||
assertEquals(9, result.length);
|
||||
assertEquals(1, result[0]);
|
||||
@@ -93,12 +83,12 @@ public class ByteStreamTargetAdapterTests {
|
||||
DispatcherPolicy dispatcherPolicy = new DispatcherPolicy();
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
byte[] result = stream.toByteArray();
|
||||
assertEquals(6, result.length);
|
||||
assertEquals(1, result[0]);
|
||||
@@ -112,12 +102,12 @@ public class ByteStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setMaxMessagesPerTask(5);
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(3, dispatcherTask.dispatch());
|
||||
assertEquals(3, dispatcher.dispatch());
|
||||
byte[] result = stream.toByteArray();
|
||||
assertEquals(9, result.length);
|
||||
assertEquals(1, result[0]);
|
||||
@@ -131,16 +121,16 @@ public class ByteStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
byte[] result1 = stream.toByteArray();
|
||||
assertEquals(6, result1.length);
|
||||
assertEquals(1, result1[0]);
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
byte[] result2 = stream.toByteArray();
|
||||
assertEquals(9, result2.length);
|
||||
assertEquals(1, result2[0]);
|
||||
@@ -155,16 +145,16 @@ public class ByteStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setMaxMessagesPerTask(5);
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(3, dispatcherTask.dispatch());
|
||||
assertEquals(3, dispatcher.dispatch());
|
||||
byte[] result1 = stream.toByteArray();
|
||||
assertEquals(9, result1.length);
|
||||
assertEquals(1, result1[0]);
|
||||
assertEquals(0, dispatcherTask.dispatch());
|
||||
assertEquals(0, dispatcher.dispatch());
|
||||
byte[] result2 = stream.toByteArray();
|
||||
assertEquals(9, result2.length);
|
||||
assertEquals(1, result2[0]);
|
||||
@@ -178,16 +168,16 @@ public class ByteStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
byte[] result1 = stream.toByteArray();
|
||||
assertEquals(6, result1.length);
|
||||
stream.reset();
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
byte[] result2 = stream.toByteArray();
|
||||
assertEquals(3, result2.length);
|
||||
assertEquals(7, result2[0]);
|
||||
@@ -201,17 +191,17 @@ public class ByteStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {1,2,3}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {4,5,6}), 0);
|
||||
channel.send(new GenericMessage<byte[]>(new byte[] {7,8,9}), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
byte[] result1 = stream.toByteArray();
|
||||
assertEquals(6, result1.length);
|
||||
stream.write(new byte[] {123});
|
||||
stream.flush();
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
byte[] result2 = stream.toByteArray();
|
||||
assertEquals(10, result2.length);
|
||||
assertEquals(1, result2[0]);
|
||||
|
||||
@@ -24,8 +24,9 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.channel.MessageChannel;
|
||||
import org.springframework.integration.channel.SimpleChannel;
|
||||
import org.springframework.integration.dispatcher.DefaultMessageDispatcher;
|
||||
import org.springframework.integration.dispatcher.DispatcherPolicy;
|
||||
import org.springframework.integration.dispatcher.DispatcherTask;
|
||||
import org.springframework.integration.dispatcher.MessageDispatcher;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
|
||||
@@ -37,13 +38,8 @@ public class CharacterStreamTargetAdapterTests {
|
||||
@Test
|
||||
public void testSingleString() {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
CharacterStreamTargetAdapter adapter = new CharacterStreamTargetAdapter(stream);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
channel.send(new StringMessage("foo"));
|
||||
int count = dispatcherTask.dispatch();
|
||||
assertEquals(1, count);
|
||||
adapter.handle(new StringMessage("foo"));
|
||||
String result = new String(stream.toByteArray());
|
||||
assertEquals("foo", result);
|
||||
}
|
||||
@@ -53,14 +49,14 @@ public class CharacterStreamTargetAdapterTests {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
CharacterStreamTargetAdapter adapter = new CharacterStreamTargetAdapter(stream);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new StringMessage("foo"), 0);
|
||||
channel.send(new StringMessage("bar"), 0);
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
String result1 = new String(stream.toByteArray());
|
||||
assertEquals("foo", result1);
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
String result2 = new String(stream.toByteArray());
|
||||
assertEquals("foobar", result2);
|
||||
}
|
||||
@@ -71,15 +67,15 @@ public class CharacterStreamTargetAdapterTests {
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
CharacterStreamTargetAdapter adapter = new CharacterStreamTargetAdapter(stream);
|
||||
adapter.setShouldAppendNewLine(true);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new StringMessage("foo"), 0);
|
||||
channel.send(new StringMessage("bar"), 0);
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
String result1 = new String(stream.toByteArray());
|
||||
String newLine = System.getProperty("line.separator");
|
||||
assertEquals("foo" + newLine, result1);
|
||||
assertEquals(1, dispatcherTask.dispatch());
|
||||
assertEquals(1, dispatcher.dispatch());
|
||||
String result2 = new String(stream.toByteArray());
|
||||
assertEquals("foo" + newLine + "bar" + newLine, result2);
|
||||
}
|
||||
@@ -91,11 +87,11 @@ public class CharacterStreamTargetAdapterTests {
|
||||
DispatcherPolicy dispatcherPolicy = new DispatcherPolicy();
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new StringMessage("foo"), 0);
|
||||
channel.send(new StringMessage("bar"), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
String result = new String(stream.toByteArray());
|
||||
assertEquals("foobar", result);
|
||||
}
|
||||
@@ -108,12 +104,12 @@ public class CharacterStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setMaxMessagesPerTask(10);
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
adapter.setShouldAppendNewLine(true);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
dispatcher.addHandler(adapter);
|
||||
channel.send(new StringMessage("foo"), 0);
|
||||
channel.send(new StringMessage("bar"), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
String result = new String(stream.toByteArray());
|
||||
String newLine = System.getProperty("line.separator");
|
||||
assertEquals("foo" + newLine + "bar" + newLine, result);
|
||||
@@ -124,11 +120,11 @@ public class CharacterStreamTargetAdapterTests {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
CharacterStreamTargetAdapter adapter = new CharacterStreamTargetAdapter(stream);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
TestObject testObject = new TestObject("foo");
|
||||
channel.send(new GenericMessage<TestObject>(testObject));
|
||||
int count = dispatcherTask.dispatch();
|
||||
int count = dispatcher.dispatch();
|
||||
assertEquals(1, count);
|
||||
String result = new String(stream.toByteArray());
|
||||
assertEquals("foo", result);
|
||||
@@ -142,13 +138,13 @@ public class CharacterStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
MessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
dispatcher.addHandler(adapter);
|
||||
TestObject testObject1 = new TestObject("foo");
|
||||
TestObject testObject2 = new TestObject("bar");
|
||||
channel.send(new GenericMessage<TestObject>(testObject1), 0);
|
||||
channel.send(new GenericMessage<TestObject>(testObject2), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
assertEquals(2, dispatcher.dispatch());
|
||||
String result = new String(stream.toByteArray());
|
||||
assertEquals("foobar", result);
|
||||
}
|
||||
@@ -161,14 +157,14 @@ public class CharacterStreamTargetAdapterTests {
|
||||
dispatcherPolicy.setReceiveTimeout(0);
|
||||
dispatcherPolicy.setMaxMessagesPerTask(2);
|
||||
SimpleChannel channel = new SimpleChannel(dispatcherPolicy);
|
||||
DispatcherTask dispatcherTask = new DispatcherTask(channel);
|
||||
DefaultMessageDispatcher dispatcher = new DefaultMessageDispatcher(channel);
|
||||
adapter.setShouldAppendNewLine(true);
|
||||
dispatcherTask.addHandler(adapter);
|
||||
dispatcher.addHandler(adapter);
|
||||
TestObject testObject1 = new TestObject("foo");
|
||||
TestObject testObject2 = new TestObject("bar");
|
||||
channel.send(new GenericMessage<TestObject>(testObject1), 0);
|
||||
channel.send(new GenericMessage<TestObject>(testObject2), 0);
|
||||
assertEquals(2, dispatcherTask.dispatch());
|
||||
dispatcher.dispatch();
|
||||
String result = new String(stream.toByteArray());
|
||||
String newLine = System.getProperty("line.separator");
|
||||
assertEquals("foo" + newLine + "bar" + newLine, result);
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.integration.channel;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
import org.springframework.integration.message.selector.MessageSelector;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public class ChannelPurgerTests {
|
||||
|
||||
@Test
|
||||
public void testPurgeAllWithoutSelector() {
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
channel.send(new StringMessage("test1"));
|
||||
channel.send(new StringMessage("test2"));
|
||||
channel.send(new StringMessage("test3"));
|
||||
ChannelPurger purger = new ChannelPurger(channel);
|
||||
List<Message<?>> purgedMessages = purger.purge();
|
||||
assertEquals(3, purgedMessages.size());
|
||||
assertNull(channel.receive(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPurgeAllWithSelector() {
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
channel.send(new StringMessage("test1"));
|
||||
channel.send(new StringMessage("test2"));
|
||||
channel.send(new StringMessage("test3"));
|
||||
ChannelPurger purger = new ChannelPurger(channel, new MessageSelector() {
|
||||
public boolean accept(Message<?> message) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
List<Message<?>> purgedMessages = purger.purge();
|
||||
assertEquals(3, purgedMessages.size());
|
||||
assertNull(channel.receive(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPurgeNoneWithSelector() {
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
channel.send(new StringMessage("test1"));
|
||||
channel.send(new StringMessage("test2"));
|
||||
channel.send(new StringMessage("test3"));
|
||||
ChannelPurger purger = new ChannelPurger(channel, new MessageSelector() {
|
||||
public boolean accept(Message<?> message) {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
List<Message<?>> purgedMessages = purger.purge();
|
||||
assertEquals(0, purgedMessages.size());
|
||||
assertNotNull(channel.receive(0));
|
||||
assertNotNull(channel.receive(0));
|
||||
assertNotNull(channel.receive(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPurgeSubsetWithSelector() {
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
channel.send(new StringMessage("test1"));
|
||||
channel.send(new StringMessage("test2"));
|
||||
channel.send(new StringMessage("test3"));
|
||||
ChannelPurger purger = new ChannelPurger(channel, new MessageSelector() {
|
||||
public boolean accept(Message<?> message) {
|
||||
return (message.getPayload().equals("test2"));
|
||||
}
|
||||
});
|
||||
List<Message<?>> purgedMessages = purger.purge();
|
||||
assertEquals(2, purgedMessages.size());
|
||||
Message<?> message = channel.receive(0);
|
||||
assertNotNull(message);
|
||||
assertEquals("test2", message.getPayload());
|
||||
assertNull(channel.receive(0));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,6 +34,7 @@ import org.junit.Test;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
import org.springframework.integration.message.selector.UnexpiredMessageSelector;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
@@ -203,7 +204,7 @@ public class SimpleChannelTests {
|
||||
assertTrue(channel.send(message1));
|
||||
assertTrue(channel.send(message2));
|
||||
assertFalse(channel.send(message3, 0));
|
||||
List<Message> clearedMessages = channel.clear();
|
||||
List<Message<?>> clearedMessages = channel.clear();
|
||||
assertNotNull(clearedMessages);
|
||||
assertEquals(2, clearedMessages.size());
|
||||
assertTrue(channel.send(message3));
|
||||
@@ -212,7 +213,7 @@ public class SimpleChannelTests {
|
||||
@Test
|
||||
public void testClearEmptyChannel() {
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
List<Message> clearedMessages = channel.clear();
|
||||
List<Message<?>> clearedMessages = channel.clear();
|
||||
assertNotNull(clearedMessages);
|
||||
assertEquals(0, clearedMessages.size());
|
||||
}
|
||||
@@ -231,7 +232,7 @@ public class SimpleChannelTests {
|
||||
assertTrue(channel.send(expiredMessage, 0));
|
||||
assertTrue(channel.send(unexpiredMessage, 0));
|
||||
assertFalse(channel.send(new StringMessage("atCapacity"), 0));
|
||||
List<Message> purgedMessages = channel.purge();
|
||||
List<Message<?>> purgedMessages = channel.purge(new UnexpiredMessageSelector());
|
||||
assertNotNull(purgedMessages);
|
||||
assertEquals(1, purgedMessages.size());
|
||||
assertTrue(channel.send(new StringMessage("roomAvailable"), 0));
|
||||
|
||||
@@ -14,10 +14,9 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.integration.channel;
|
||||
package org.springframework.integration.channel.interceptor;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
@@ -28,6 +27,8 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.channel.MessageChannel;
|
||||
import org.springframework.integration.channel.SimpleChannel;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.integration.channel.interceptor;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.MessageDeliveryException;
|
||||
import org.springframework.integration.channel.SimpleChannel;
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
import org.springframework.integration.message.selector.MessageSelector;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public class MessageSelectingInterceptorTests {
|
||||
|
||||
@Test
|
||||
public void testSingleSelectorAccepts() {
|
||||
final AtomicInteger counter = new AtomicInteger();
|
||||
MessageSelector selector = new TestMessageSelector(true, counter);
|
||||
MessageSelectingInterceptor interceptor = new MessageSelectingInterceptor(selector);
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
channel.addInterceptor(interceptor);
|
||||
assertTrue(channel.send(new StringMessage("test1")));
|
||||
}
|
||||
|
||||
@Test(expected=MessageDeliveryException.class)
|
||||
public void testSingleSelectorRejects() {
|
||||
final AtomicInteger counter = new AtomicInteger();
|
||||
MessageSelector selector = new TestMessageSelector(false, counter);
|
||||
MessageSelectingInterceptor interceptor = new MessageSelectingInterceptor(selector);
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
channel.addInterceptor(interceptor);
|
||||
channel.send(new StringMessage("test1"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleSelectorsAccept() {
|
||||
final AtomicInteger counter = new AtomicInteger();
|
||||
MessageSelector selector1 = new TestMessageSelector(true, counter);
|
||||
MessageSelector selector2 = new TestMessageSelector(true, counter);
|
||||
MessageSelectingInterceptor interceptor = new MessageSelectingInterceptor(selector1, selector2);
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
channel.addInterceptor(interceptor);
|
||||
assertTrue(channel.send(new StringMessage("test1")));
|
||||
assertEquals(2, counter.get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleSelectorsReject() {
|
||||
boolean exceptionThrown = false;
|
||||
final AtomicInteger counter = new AtomicInteger();
|
||||
MessageSelector selector1 = new TestMessageSelector(true, counter);
|
||||
MessageSelector selector2 = new TestMessageSelector(false, counter);
|
||||
MessageSelector selector3 = new TestMessageSelector(false, counter);
|
||||
MessageSelector selector4 = new TestMessageSelector(true, counter);
|
||||
MessageSelectingInterceptor interceptor = new MessageSelectingInterceptor(selector1, selector2, selector3, selector4);
|
||||
SimpleChannel channel = new SimpleChannel();
|
||||
channel.addInterceptor(interceptor);
|
||||
try {
|
||||
channel.send(new StringMessage("test1"));
|
||||
}
|
||||
catch (MessageDeliveryException e) {
|
||||
exceptionThrown = true;
|
||||
}
|
||||
assertTrue(exceptionThrown);
|
||||
assertEquals(2, counter.get());
|
||||
}
|
||||
|
||||
|
||||
private static class TestMessageSelector implements MessageSelector {
|
||||
|
||||
private final boolean shouldAccept;
|
||||
|
||||
private final AtomicInteger counter;
|
||||
|
||||
|
||||
public TestMessageSelector(boolean shouldAccept, AtomicInteger counter) {
|
||||
this.shouldAccept = shouldAccept;
|
||||
this.counter = counter;
|
||||
}
|
||||
|
||||
|
||||
public boolean accept(Message<?> message) {
|
||||
this.counter.incrementAndGet();
|
||||
return this.shouldAccept;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.FatalBeanException;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.integration.MessageDeliveryException;
|
||||
import org.springframework.integration.channel.MessageChannel;
|
||||
import org.springframework.integration.dispatcher.DefaultMessageDispatcher;
|
||||
import org.springframework.integration.dispatcher.DispatcherPolicy;
|
||||
@@ -143,6 +144,48 @@ public class ChannelParserTests {
|
||||
assertFalse(dispatcherPolicy.getShouldFailOnRejectionLimit());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDatatypeChannelWithCorrectType() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"channelParserTests.xml", this.getClass());
|
||||
MessageChannel channel = (MessageChannel) context.getBean("integerChannel");
|
||||
assertTrue(channel.send(new GenericMessage<Integer>(123)));
|
||||
}
|
||||
|
||||
@Test(expected=MessageDeliveryException.class)
|
||||
public void testDatatypeChannelWithIncorrectType() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"channelParserTests.xml", this.getClass());
|
||||
MessageChannel channel = (MessageChannel) context.getBean("integerChannel");
|
||||
channel.send(new StringMessage("incorrect type"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDatatypeChannelWithAssignableSubTypes() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"channelParserTests.xml", this.getClass());
|
||||
MessageChannel channel = (MessageChannel) context.getBean("numberChannel");
|
||||
assertTrue(channel.send(new GenericMessage<Integer>(123)));
|
||||
assertTrue(channel.send(new GenericMessage<Double>(123.45)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleDatatypeChannelWithCorrectTypes() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"channelParserTests.xml", this.getClass());
|
||||
MessageChannel channel = (MessageChannel) context.getBean("stringOrNumberChannel");
|
||||
assertTrue(channel.send(new GenericMessage<Integer>(123)));
|
||||
assertTrue(channel.send(new StringMessage("accepted type")));
|
||||
}
|
||||
|
||||
@Test(expected=MessageDeliveryException.class)
|
||||
public void testMultipleDatatypeChannelWithIncorrectType() {
|
||||
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"channelParserTests.xml", this.getClass());
|
||||
MessageChannel channel = (MessageChannel) context.getBean("stringOrNumberChannel");
|
||||
channel.send(new GenericMessage<Boolean>(true));
|
||||
}
|
||||
|
||||
|
||||
private static class TestHandler implements MessageHandler {
|
||||
|
||||
|
||||
@@ -23,4 +23,10 @@
|
||||
should-fail-on-rejection-limit="false"/>
|
||||
</channel>
|
||||
|
||||
<channel id="integerChannel" datatype="java.lang.Integer"/>
|
||||
|
||||
<channel id="numberChannel" datatype="java.lang.Number"/>
|
||||
|
||||
<channel id="stringOrNumberChannel" datatype="java.lang.String,java.lang.Number"/>
|
||||
|
||||
</beans:beans>
|
||||
|
||||
@@ -24,52 +24,47 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.channel.MessageChannel;
|
||||
import org.springframework.integration.channel.SimpleChannel;
|
||||
import org.springframework.integration.handler.TestHandlers;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public class DispatcherTaskTests {
|
||||
public class DefaultMessageDistributorTests {
|
||||
|
||||
@Test
|
||||
public void testSimpleDispatch() throws InterruptedException {
|
||||
MessageChannel channel = new SimpleChannel();
|
||||
DispatcherTask task = new DispatcherTask(channel);
|
||||
public void testSingleMessage() throws InterruptedException {
|
||||
MessageDistributor distributor = new DefaultMessageDistributor(new DispatcherPolicy());
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
task.addHandler(TestHandlers.countDownHandler(latch));
|
||||
task.dispatchMessage(new StringMessage("test"));
|
||||
distributor.addHandler(TestHandlers.countDownHandler(latch));
|
||||
distributor.distribute(new StringMessage("test"));
|
||||
latch.await(500, TimeUnit.MILLISECONDS);
|
||||
assertEquals(0, latch.getCount());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDispatchWithPointToPointChannel() throws InterruptedException {
|
||||
MessageChannel channel = new SimpleChannel(new DispatcherPolicy(false));
|
||||
DispatcherTask task = new DispatcherTask(channel);
|
||||
public void testPointToPoint() throws InterruptedException {
|
||||
MessageDistributor distributor = new DefaultMessageDistributor(new DispatcherPolicy(false));
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
final AtomicInteger counter1 = new AtomicInteger();
|
||||
final AtomicInteger counter2 = new AtomicInteger();
|
||||
task.addHandler(TestHandlers.countingCountDownHandler(counter1, latch));
|
||||
task.addHandler(TestHandlers.countingCountDownHandler(counter2, latch));
|
||||
task.dispatchMessage(new StringMessage("test"));
|
||||
distributor.addHandler(TestHandlers.countingCountDownHandler(counter1, latch));
|
||||
distributor.addHandler(TestHandlers.countingCountDownHandler(counter2, latch));
|
||||
distributor.distribute(new StringMessage("test"));
|
||||
latch.await(500, TimeUnit.MILLISECONDS);
|
||||
assertEquals(0, latch.getCount());
|
||||
assertEquals("only 1 handler should have received the message", 1, counter1.get() + counter2.get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDispatchWithPublishSubscribeChannel() throws InterruptedException {
|
||||
MessageChannel channel = new SimpleChannel(new DispatcherPolicy(true));
|
||||
DispatcherTask task = new DispatcherTask(channel);
|
||||
public void testPublishSubscribe() throws InterruptedException {
|
||||
MessageDistributor distributor = new DefaultMessageDistributor(new DispatcherPolicy(true));
|
||||
final CountDownLatch latch = new CountDownLatch(2);
|
||||
final AtomicInteger counter1 = new AtomicInteger();
|
||||
final AtomicInteger counter2 = new AtomicInteger();
|
||||
task.addHandler(TestHandlers.countingCountDownHandler(counter1, latch));
|
||||
task.addHandler(TestHandlers.countingCountDownHandler(counter2, latch));
|
||||
task.dispatchMessage(new StringMessage("test"));
|
||||
distributor.addHandler(TestHandlers.countingCountDownHandler(counter1, latch));
|
||||
distributor.addHandler(TestHandlers.countingCountDownHandler(counter2, latch));
|
||||
distributor.distribute(new StringMessage("test"));
|
||||
latch.await(500, TimeUnit.MILLISECONDS);
|
||||
assertEquals(0, latch.getCount());
|
||||
assertEquals(1, counter1.get());
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.integration.message.selector;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.integration.message.Message;
|
||||
import org.springframework.integration.message.StringMessage;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public class UnexpiredMessageSelectorTests {
|
||||
|
||||
@Test
|
||||
public void testExpiredMessageRejected() {
|
||||
long past = System.currentTimeMillis() - 60000;
|
||||
Message<?> message = new StringMessage("expired");
|
||||
message.getHeader().setExpiration(new Date(past));
|
||||
UnexpiredMessageSelector selector = new UnexpiredMessageSelector();
|
||||
assertFalse(selector.accept(message));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnexpiredMessageAccepted() {
|
||||
long future = System.currentTimeMillis() + 60000;
|
||||
Message<?> message = new StringMessage("unexpired");
|
||||
message.getHeader().setExpiration(new Date(future));
|
||||
UnexpiredMessageSelector selector = new UnexpiredMessageSelector();
|
||||
assertTrue(selector.accept(message));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user