From 9c9c1da7f30f10cd6caea0e617d5797453b81079 Mon Sep 17 00:00:00 2001 From: Tom McCuch Date: Sun, 6 Nov 2011 18:21:48 -0500 Subject: [PATCH] Final Packaging --- applications/cafe/pom.xml | 11 ++ applications/cafe/readme.txt | 19 ++- .../integration/samples/cafe/Cafe.java | 2 +- .../samples/cafe/xml/CafeDemoAppAmqp.java | 19 ++- .../cafe/xml/CafeDemoAppBaristaColdAmqp.java | 59 +++++++++ .../cafe/xml/CafeDemoAppBaristaHotAmqp.java | 59 +++++++++ .../cafe/xml/CafeDemoAppOperationsAmqp.java | 65 ++++++++++ .../amqp/cafeDemo-amqp-baristaCold-xml.xml | 18 +-- .../amqp/cafeDemo-amqp-baristaHot-xml.xml | 19 +-- .../amqp/cafeDemo-amqp-config-xml.xml | 23 ++++ .../amqp/cafeDemo-amqp-operations-xml.xml | 113 ++++++++++++++++ .../integration/amqp/cafeDemo-amqp-xml.xml | 121 ++++-------------- 12 files changed, 385 insertions(+), 143 deletions(-) create mode 100644 applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaColdAmqp.java create mode 100644 applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaHotAmqp.java create mode 100644 applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppOperationsAmqp.java create mode 100644 applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-config-xml.xml create mode 100644 applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-operations-xml.xml diff --git a/applications/cafe/pom.xml b/applications/cafe/pom.xml index 5a80da72..b0483d22 100644 --- a/applications/cafe/pom.xml +++ b/applications/cafe/pom.xml @@ -22,6 +22,17 @@ spring-integration-stream ${spring.integration.version} + + + org.codehaus.jackson + jackson-core-asl + 1.8.3 + + + org.codehaus.jackson + jackson-mapper-asl + 1.8.3 + log4j log4j diff --git a/applications/cafe/readme.txt b/applications/cafe/readme.txt index 69ae4e18..a0c3f488 100644 --- a/applications/cafe/readme.txt +++ b/applications/cafe/readme.txt @@ -8,7 +8,7 @@ The domain is that of a Cafe, and the basic flow is depicted in the following di |==========| -->| | orders drinks / | prepareHotDrink() | Place Order ->Cafe->|======|->OrderSplitter->|======|->DrinkRouter | | - \ coldDeinks | prepareColdDrink() | + \ coldDrinks | prepareColdDrink() | |==========| -->| | |____________________| @@ -26,11 +26,24 @@ Instructions for running the CafeDemo sample ------------------------------------------------------------------------------- 1. The example comes with two identical configurations. One is ANNOTATION-based anther is XML-based -2. To run this sample simply execute the CafeDemo* test classes +2. To run this sample simply execute the CafeDemoApp test classes in the org.springframework.integration.samples.cafe.xml or org.springframework.integration.samples.cafe.annotation package. + +3. The example also provides an alternative configuration that uses AMQP channels to distribute the components + in the CafeDemo sample. To run this alternative configuration of the sample, be sure to have a RabbitMQ broker + started on localhost:5672 configured with the default guest | guest client credentials on the / vHost, + then execute the following test classes in order: - You shoudl see the output similar to this: + 1. cafeDemoAppBaristaColdAmqp - starts the Cold Drink Barista + 2. cafeDemoAppBaristaHotAmqp- starts the Hot Drink Barista + 3. cafeDemoAppOperationsAmqp - starts the Cafe Operations (OrderSplitter, DrinkRouter, PreparedDrinkAggregator) + 4. cafeDemoAppAmqp - starts the Cafe Storefront (Places 100 orders on the orders queue) + + * Note: All AMQP exchanges, queues, and bindings needed for this sample are defined within the different xml + config files that support the above test classes. + +Upon running any of the alternatives, you should see the output similar to this: INFO : org.springframework.integration.samples.cafe.annotation.Barista - task-scheduler-1 prepared cold drink #1 for order #1: iced 3 shot MOCHA INFO : org.springframework.integration.samples.cafe.annotation.Barista - task-scheduler-1 prepared cold drink #2 for order #2: iced 3 shot MOCHA diff --git a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/Cafe.java b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/Cafe.java index 66363ca8..fecbce4d 100644 --- a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/Cafe.java +++ b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/Cafe.java @@ -30,7 +30,7 @@ import org.springframework.integration.annotation.Gateway; */ public interface Cafe { - @Gateway(requestChannel="orders") + @Gateway(requestChannel="preOrders") void placeOrder(Order order); } diff --git a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppAmqp.java b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppAmqp.java index 23c110c6..db802315 100644 --- a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppAmqp.java +++ b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppAmqp.java @@ -23,15 +23,15 @@ import org.springframework.integration.samples.cafe.DrinkType; import org.springframework.integration.samples.cafe.Order; /** - * Provides the 'main' method for running the Cafe Demo application - * using AMQP. Before running, be sure to have a RabbitMQ broker - * started on localhost:5672 configured with the default + * Provides the 'main' method for running the Cafe Demo store front + * application using AMQP. Before running, be sure to have a + * RabbitMQ broker started on localhost:5672 configured with the default * guest | guest client credentials on the / vHost. When an order is - * placed, the Cafe will send that order to the "orders" channel. + * placed, the Cafe store front will publish that order on the cafe-orders + * exchange to be processed. *

* The relevant components are defined within the configuration files: - * ("cafeDemo-amqp-xml.xml", "cafeDemo-amqp-baristaCold-xml.xml, and - * "cafeDemo-amqp-baristaHot-xml.xml). + * ("cafeDemo-amqp-xml.xml", "cafeDemo-amqp-config-xml.xml"). *

* If deploying in SpringSource dmServer, the relevant ApplicationContext * configuration is in the META-INF/spring directory instead. @@ -42,11 +42,7 @@ public class CafeDemoAppAmqp { public static void main(String[] args) { AbstractApplicationContext context = - new ClassPathXmlApplicationContext( - new String[] {"/META-INF/spring/integration/amqp/cafeDemo-amqp-xml.xml", - "/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaCold-xml.xml", - "/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaHot-xml.xml"}, - CafeDemoAppAmqp.class); + new ClassPathXmlApplicationContext("/META-INF/spring/integration/amqp/cafeDemo-amqp-xml.xml", CafeDemoAppAmqp.class); Cafe cafe = (Cafe) context.getBean("cafe"); for (int i = 1; i <= 100; i++) { @@ -55,6 +51,7 @@ public class CafeDemoAppAmqp { order.addItem(DrinkType.MOCHA, 3, true); cafe.placeOrder(order); } + context.close(); } } diff --git a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaColdAmqp.java b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaColdAmqp.java new file mode 100644 index 00000000..bde92220 --- /dev/null +++ b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaColdAmqp.java @@ -0,0 +1,59 @@ +/* + * Copyright 2002-2011 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.cafe.xml; + +import java.io.IOException; + +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.samples.cafe.Cafe; +import org.springframework.integration.samples.cafe.DrinkType; +import org.springframework.integration.samples.cafe.Order; + +/** + * Provides the 'main' method for running the Cafe Demo Cold Drink + * Barista application using AMQP. Before running, be sure to have a + * RabbitMQ broker started on localhost:5672 configured with the default + * guest | guest client credentials on the / vHost. When a drink order + * is placed on the cold-drinks queue, the Barista will prepare the drink + * and reply to the reply-to queue set by the sender. + *

+ * The relevant components are defined within the configuration files: + * ("cafeDemo-amqp-baristaCold-xml.xml", "cafeDemo-amqp-config-xml.xml"). + *

+ * If deploying in SpringSource dmServer, the relevant ApplicationContext + * configuration is in the META-INF/spring directory instead. + * + * @author Tom McCuch + */ +public class CafeDemoAppBaristaColdAmqp { + + public static void main(String[] args) { + AbstractApplicationContext context = + new ClassPathXmlApplicationContext( + "/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaCold-xml.xml", + CafeDemoAppBaristaColdAmqp.class); + + System.out.println("Press Enter/Return in the console to exit the Barista Cold App"); + try { + System.in.read(); + } catch (IOException e) { + context.close(); + } + context.close(); + } +} diff --git a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaHotAmqp.java b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaHotAmqp.java new file mode 100644 index 00000000..0f0d8d9c --- /dev/null +++ b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppBaristaHotAmqp.java @@ -0,0 +1,59 @@ +/* + * Copyright 2002-2011 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.cafe.xml; + +import java.io.IOException; + +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.samples.cafe.Cafe; +import org.springframework.integration.samples.cafe.DrinkType; +import org.springframework.integration.samples.cafe.Order; + +/** + * Provides the 'main' method for running the Cafe Demo Hot Drink + * Barista application using AMQP. Before running, be sure to have a + * RabbitMQ broker started on localhost:5672 configured with the default + * guest | guest client credentials on the / vHost. When a drink order + * is placed on the hot-drinks queue, the Barista will prepare the drink + * and reply to the reply-to queue set by the sender. + *

+ * The relevant components are defined within the configuration files: + * ("cafeDemo-amqp-baristaHot-xml.xml", "cafeDemo-amqp-config-xml.xml"). + *

+ * If deploying in SpringSource dmServer, the relevant ApplicationContext + * configuration is in the META-INF/spring directory instead. + * + * @author Tom McCuch + */ +public class CafeDemoAppBaristaHotAmqp { + + public static void main(String[] args) { + AbstractApplicationContext context = + new ClassPathXmlApplicationContext( + "/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaHot-xml.xml", + CafeDemoAppBaristaHotAmqp.class); + + System.out.println("Press Enter/Return in the console to exit the Barista Hot App"); + try { + System.in.read(); + } catch (IOException e) { + context.close(); + } + context.close(); + } +} diff --git a/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppOperationsAmqp.java b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppOperationsAmqp.java new file mode 100644 index 00000000..ec894dc8 --- /dev/null +++ b/applications/cafe/src/main/java/org/springframework/integration/samples/cafe/xml/CafeDemoAppOperationsAmqp.java @@ -0,0 +1,65 @@ +/* + * Copyright 2002-2011 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.cafe.xml; + +import java.io.IOException; + +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.samples.cafe.Cafe; +import org.springframework.integration.samples.cafe.DrinkType; +import org.springframework.integration.samples.cafe.Order; + +/** + * Provides the 'main' method for running the Cafe Demo Operations + * application using AMQP. Before running, be sure to have a RabbitMQ + * broker started on localhost:5672 configured with the default + * guest | guest client credentials on the / vHost. When an order is + * placed on the new-orders queue, the Cafe Operations app will split + * the order into order line items, route them to either the coldDrink + * or hotDrink Barista, aggregate the prepared drinks returned from the + * Barista using a Waiter, and publish the delivered order on the + * cafe-deliveries exchange. + *

+ * The relevant components are defined within the configuration files: + * ("cafeDemo-amqp-operations-xml.xml", "cafeDemo-amqp-config-xml.xml"). + *

+ * Before starting this app, be sure to start the CafeDemoAppBaristaCold + * and CafeDemoAppBaristaHot apps first. + * + * If deploying in SpringSource dmServer, the relevant ApplicationContext + * configuration is in the META-INF/spring directory instead. + * + * @author Tom McCuch + */ +public class CafeDemoAppOperationsAmqp { + + public static void main(String[] args) { + AbstractApplicationContext context = + new ClassPathXmlApplicationContext( + "/META-INF/spring/integration/amqp/cafeDemo-amqp-operations-xml.xml", + CafeDemoAppOperationsAmqp.class); + + System.out.println("Press Enter/Return in the console to exit the Cafe Operations App"); + try { + System.in.read(); + } catch (IOException e) { + context.close(); + } + context.close(); + } +} diff --git a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaCold-xml.xml b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaCold-xml.xml index ed990516..517fd70f 100644 --- a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaCold-xml.xml +++ b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaCold-xml.xml @@ -20,6 +20,9 @@ http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd"> + + + - - - - - - - - - - - - - - + diff --git a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaHot-xml.xml b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaHot-xml.xml index 6ff636a6..ea48b719 100644 --- a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaHot-xml.xml +++ b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-baristaHot-xml.xml @@ -20,6 +20,9 @@ http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd"> + + + - - - - - - - - - - - - - - - + diff --git a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-config-xml.xml b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-config-xml.xml new file mode 100644 index 00000000..2613cf8f --- /dev/null +++ b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-config-xml.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + diff --git a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-operations-xml.xml b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-operations-xml.xml new file mode 100644 index 00000000..d8bbcbc8 --- /dev/null +++ b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-operations-xml.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-xml.xml b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-xml.xml index b5472278..b4c8feef 100644 --- a/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-xml.xml +++ b/applications/cafe/src/main/resources/META-INF/spring/integration/amqp/cafeDemo-amqp-xml.xml @@ -19,114 +19,37 @@ http://www.springframework.org/schema/integration/stream http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd"> - - - - + + - + + - - - + + + + + + + - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - - - - - - - - + \ No newline at end of file