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