INTSAMPLES-49 - Move main demo class to src/main/java + add tests

For reference see: https://jira.springsource.org/browse/INTSAMPLES-49
This commit is contained in:
Gunnar Hillert
2012-12-06 16:59:16 -05:00
parent c151ac24b2
commit 4c40d0d2e3
10 changed files with 309 additions and 138 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2010 the original author or authors.
* Copyright 2002-2012 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.
@@ -17,28 +17,30 @@ package org.springframework.integration.samples.jms;
import java.io.File;
import org.apache.log4j.Logger;
/**
* @author Oleg Zhurakousky
* @author Gunnar Hillert
*
*/
public class ActiveMqTestUtils {
private static final Logger LOGGER = Logger.getLogger(ActiveMqTestUtils.class);
public static void prepare() {
System.out.println("####### Refreshing ActiveMq ########");
LOGGER.info("Refreshing ActiveMQ data directory.");
File activeMqTempDir = new File("activemq-data");
deleteDir(activeMqTempDir);
}
/*
*
*/
private static void deleteDir(File directory){
if (directory.exists()){
String[] children = directory.list();
if (children != null){
for (int i=0; i < children.length; i++) {
deleteDir(new File(directory, children[i]));
}
for (int i=0; i < children.length; i++) {
deleteDir(new File(directory, children[i]));
}
}
}
directory.delete();

View File

@@ -0,0 +1,90 @@
/*
* Copyright 2002-2012 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.samples.jms;
import java.util.Scanner;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* A simple bootstrap main() method for starting a pair of JMS Channel
* Adapters. Text entered in the console will go through an outbound
* JMS Channel Adapter from which it is sent to a JMS Destination.
* An inbound JMS Channel Adapter is listening to that same JMS
* Destination and will echo the result in the console.
* <p>
* See the configuration in the three XML files that are referenced below.
*
* @author Mark Fisher
* @author Gunnar Hillert
*/
public class Main {
private final static String[] configFilesGatewayDemo = {
"/META-INF/spring/integration/common.xml",
"/META-INF/spring/integration/inboundGateway.xml",
"/META-INF/spring/integration/outboundGateway.xml"
};
private final static String[] configFilesChannelAdapterDemo = {
"/META-INF/spring/integration/common.xml",
"/META-INF/spring/integration/inboundChannelAdapter.xml",
"/META-INF/spring/integration/outboundChannelAdapter.xml"
};
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
System.out.println("\n========================================================="
+ "\n "
+ "\n Welcome to the Spring Integration JMS Sample! "
+ "\n "
+ "\n For more information please visit: "
+ "\n http://www.springintegration.org/ "
+ "\n "
+ "\n=========================================================" );
ActiveMqTestUtils.prepare();
System.out.println("\n Which Demo would you like to run? <enter>:\n");
System.out.println("\t1. Channel Adapter Demo");
System.out.println("\t2. Gateway Demo");
while (true) {
final String input = scanner.nextLine();
if("1".equals(input.trim())) {
System.out.println(" Loading Channel Adapter Demo...");
new ClassPathXmlApplicationContext(configFilesChannelAdapterDemo, Main.class);
break;
} else if("2".equals(input.trim())) {
System.out.println(" Loading Gateway Demo...");
new ClassPathXmlApplicationContext(configFilesGatewayDemo, Main.class);
break;
} else {
System.out.println("Invalid choice\n\n");
System.out.print("Enter you choice: ");
}
}
System.out.println(" Please type something and hit <enter>\n");
}
}

View File

@@ -10,7 +10,7 @@
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost"/>
<property name="brokerURL" value="vm://localhost"/>
</bean>
</property>
<property name="sessionCacheSize" value="10"/>

View File

@@ -1,47 +0,0 @@
/*
* Copyright 2002-2012 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.samples.jms;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* A simple bootstrap main() method for starting a pair of JMS Channel
* Adapters. Text entered in the console will go through an outbound
* JMS Channel Adapter from which it is sent to a JMS Destination.
* An inbound JMS Channel Adapter is listening to that same JMS
* Destination and will echo the result in the console.
* <p>
* See the configuration in the three XML files that are referenced below.
*
* @author Mark Fisher
* @author Gunnar Hillert
*/
public class ChannelAdapterDemo {
private final static String[] configFiles = {
"/META-INF/spring/integration/common.xml",
"/META-INF/spring/integration/inboundChannelAdapter.xml",
"/META-INF/spring/integration/outboundChannelAdapter.xml"
};
public static void main(String[] args) {
ActiveMqTestUtils.prepare();
new ClassPathXmlApplicationContext(configFiles, ChannelAdapterDemo.class);
System.out.println("Please type something and hit return");
}
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright 2002-2012 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.samples.jms;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.support.MessageBuilder;
/**
* @author Gunnar Hillert
*/
public class ChannelAdapterDemoTest {
private final static String[] configFilesChannelAdapterDemo = {
"/META-INF/spring/integration/common.xml",
"/META-INF/spring/integration/inboundChannelAdapter.xml",
"/META-INF/spring/integration/outboundChannelAdapter.xml"
};
private final ByteArrayOutputStream out = new ByteArrayOutputStream();
@Before
public void setupStreams() {
System.setOut(new PrintStream(this.out));
}
private void resetStreams() {
this.out.reset();
}
@Test
public void testChannelAdapterDemo() throws InterruptedException {
final GenericXmlApplicationContext applicationContext = new GenericXmlApplicationContext(configFilesChannelAdapterDemo);
final MessageChannel stdinToJmsoutChannel = applicationContext.getBean("stdinToJmsoutChannel", MessageChannel.class);
resetStreams();
stdinToJmsoutChannel.send(MessageBuilder.withPayload("jms test").build());
Thread.sleep(1000);
Assert.assertEquals("jms test\n", out.toString());
applicationContext.close();
}
}

View File

@@ -1,49 +0,0 @@
/*
* Copyright 2002-2010 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.samples.jms;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* A simple bootstrap main() method for starting a pair of JMS Gateways.
* Text entered in the console will go through an outbound JMS Gateway from
* which it is sent to a JMS Destination. An inbound JMS Gateway is listening
* to that same JMS Destination and will send the text to another Spring
* Integration channel where it is handled by a service that simply converts
* the text to upper case. The upper-case result is then sent in a response
* message over JMS so that the outbound Gateway receives it as the reply to
* its original request. At that point, the text is logged to the console.
* <p>
* See the configuration in the three XML files that are referenced below.
*
* @author Mark Fisher
*/
public class GatewayDemo {
private final static String[] configFiles = {
"/META-INF/spring/integration/common.xml",
"/META-INF/spring/integration/inboundGateway.xml",
"/META-INF/spring/integration/outboundGateway.xml"
};
public static void main(String[] args) {
ActiveMqTestUtils.prepare();
new ClassPathXmlApplicationContext(configFiles, GatewayDemo.class);
System.out.println("Please type something and hit return");
}
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright 2002-2012 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.samples.jms;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.support.MessageBuilder;
/**
* @author Gunnar Hillert
*/
public class GatewayDemoTest {
private final static String[] configFilesGatewayDemo = {
"/META-INF/spring/integration/common.xml",
"/META-INF/spring/integration/inboundGateway.xml",
"/META-INF/spring/integration/outboundGateway.xml"
};
private final ByteArrayOutputStream out = new ByteArrayOutputStream();
@Before
public void setupStreams() {
System.setOut(new PrintStream(this.out));
}
private void resetStreams() {
this.out.reset();
}
@Test
public void testGatewayDemo() throws InterruptedException {
final GenericXmlApplicationContext applicationContext = new GenericXmlApplicationContext(configFilesGatewayDemo);
final MessageChannel stdinToJmsoutChannel = applicationContext.getBean("stdinToJmsoutChannel", MessageChannel.class);
resetStreams();
stdinToJmsoutChannel.send(MessageBuilder.withPayload("jms test").build());
Thread.sleep(1000);
Assert.assertEquals("JMS response: JMS TEST\n", out.toString());
applicationContext.close();
}
}