From 9bbb6b842b52fb3ba8658d601f359c014a27f20b Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Wed, 23 Jan 2008 08:37:09 +0000 Subject: [PATCH] Documentation updates --- .../reference/images/cafe-demo.png | Bin 0 -> 34876 bytes .../reference/src/configuration.xml | 46 ++++-- .../reference/src/overview.xml | 15 +- .../reference/src/samples.xml | 155 +++++++++++++++++- 4 files changed, 193 insertions(+), 23 deletions(-) create mode 100644 spring-integration-reference/reference/images/cafe-demo.png diff --git a/spring-integration-reference/reference/images/cafe-demo.png b/spring-integration-reference/reference/images/cafe-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..e97316d5a29fc1f3c9837a5aa60fea22196f278b GIT binary patch literal 34876 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 Introduction - Following the Spring philosophy, Spring Integration offers a number of configuration options. Which option you - choose depends upon your particular needs and at what level you prefer to work. As with the Spring framework in - general, it is also possible to mix and match the various techniques according to the particular problem at hand. - For example, you may choose the XSD-based namespace for the majority of configuration combined with a handful of - objects that are configured with annotations. Of course, it is also possible to always stick with a single - approach. The main point is that these are options for configuration motivated by the need - to support a user community with a wide range of preferences. That said, there has also been a concerted effort - to provide consistent naming so that, for example, the XML elements defined by the XSD schema will match the - names of annotations, and the attributes of those XML elements will match the names of annotation properties. - Direct usage of the API is yet another option and is described in detail in . We expect that - most users will choose one of the higher-level options, such as the namespace-based or annotation-driven - configuration. + Spring Integration offers a number of configuration options. Which option you choose depends upon your particular + needs and at what level you prefer to work. As with the Spring framework in general, it is also possible to mix + and match the various techniques according to the particular problem at hand. For example, you may choose the + XSD-based namespace for the majority of configuration combined with a handful of objects that are configured with + annotations. Of course, it is also possible to always stick with a single approach. The main point is that these + are options for configuration motivated by the need to support a user community with a wide + range of preferences. That said, there has also been a concerted effort to provide consistent naming so that, for + example, the XML elements defined by the XSD schema will match the names of annotations, and the attributes of + those XML elements will match the names of annotation properties. Direct usage of the API is yet another option + and is described in detail in . We expect that most users will choose one of the + higher-level options, such as the namespace-based or annotation-driven configuration. @@ -174,6 +173,12 @@ ]]> + When exceptions occur in an endpoint's execution of its MessageHandler callback, + those exceptions will be wrapped in ErrorMessages and sent to the Message Bus' + 'errorChannel' by default. To enable global error handling, simply register a handler on that channel. For + example, you can configure Spring Integration's PayloadTypeRouter as the handler of + an endpoint that is subscribed to the 'errorChannel'. That router can then spread the error messages across + multiple channels based on Exception type. The 'message-bus' element accepts two more optional attributes. First is the size of the dispatcher thread @@ -300,5 +305,22 @@ List<LineItem> extractItems(Order order) { return order.getItems() } + + The @Publisher annotation is a convenience for sending messages with AOP after + advice. For example, each time the following method is invoked, its return will be sent to the "fooChannel": + + + + Similarly, the @Subscriber annotation triggers the retrieval of messages from a + channel, and the payload of each message will then be sent as input to an arbitrary method. This is one of the + simplest ways to configure asynchronous, event-driven behavior: + + \ No newline at end of file diff --git a/spring-integration-reference/reference/src/overview.xml b/spring-integration-reference/reference/src/overview.xml index 88cba33ad2..ee9d6f616b 100644 --- a/spring-integration-reference/reference/src/overview.xml +++ b/spring-integration-reference/reference/src/overview.xml @@ -22,13 +22,14 @@ Spring Integration is a new member of the Spring portfolio motivated by these same goals and principles. It - extends the Spring programming model into the messaging domain and builds upon the core enterprise integration - support to provide an even higher level of abstraction. It supports message-driven architectures where inversion - of control applies to runtime concerns, such as when certain business logic should execute - and where the response should be sent. It supports routing and transformation of messages so - that different transports and different data formats can be integrated without impacting testability. In other - words, the messaging and integration concerns are handled by the framework, so business components are further - isolated from the infrastructure and developers are relieved of complex integration responsibilities. + extends the Spring programming model into the messaging domain and builds upon Spring's existing enterprise + integration support to provide an even higher level of abstraction. It supports message-driven architectures + where inversion of control applies to runtime concerns, such as when certain business logic + should execute and where the response should be sent. It supports routing and transformation + of messages so that different transports and different data formats can be integrated without impacting + testability. In other words, the messaging and integration concerns are handled by the framework, so business + components are further isolated from the infrastructure and developers are relieved of complex integration + responsibilities. As an extension of the Spring programming model, Spring Integration provides a wide variety of configuration diff --git a/spring-integration-reference/reference/src/samples.xml b/spring-integration-reference/reference/src/samples.xml index fa99b0d6c6..1a8045d265 100644 --- a/spring-integration-reference/reference/src/samples.xml +++ b/spring-integration-reference/reference/src/samples.xml @@ -2,11 +2,158 @@ Spring Integration Samples -
- Introduction +
+ The Cafe Sample - The Spring Integration 1.0 Milestone 1 release includes a limited number of sample applications. Several more - interesting and comprehensive samples are in the works for upcoming releases. + In this section, we will review a sample application that is included in the Spring Integration Milestone 1 + release (see the "spring-integration-samples" JAR and source JAR). This sample is inspired by one of the samples + featured in Gregor Hohpe's Ramblings. + + + The domain is that of a Cafe, and the basic flow is depicted in the following diagram: + + + + + + + + + + The DrinkOrder object may contain multiple Drinks. Once the order + is placed, a Splitter will break the composite order message into a single message per + drink. Each of these is then processed by a Router that determines whether the drink is hot + or cold (checking the Drink object's 'isIced' property). Finally the + Barista prepares each drink, but hot and cold drink preparation are handled by two + distinct methods: 'prepareHotDrink' and 'prepareColdDrink'. + + + Here is the XML configuration: + + + + + + + + + + + + + + + + + + + +]]> + Notice that the Message Bus is defined. It will automatically detect and register all channels and endpoints. + The 'annotation-driven' element will enable the detection of the splitter and router - both of which carry + the @MessageEndpoint annotation. That annotation extends Spring's + "stereotype" annotations (by relying on the @Component meta-annotation), and so all classes carrying the + endpoint annotation are capable of being detected by the component-scanner. + split(DrinkOrder order) { + return order.getDrinks(); + } +}]]> + + + + Now turning back to the XML, you see that there are two <endpoint> elements. Each of these is delegating + to the same Barista instance but different methods. The 'barista' could have been + defined in the XML, but instead the @Component annotation is applied: + + + + As you can see from the code excerpt above, the barista methods have different delays. This simulates work being + completed at different rates. When the CafeDemo 'main' method runs, it will loop 100 + times sending a single hot drink and a single cold drink each time. + + + + If you run the CafeDemo, you will see that all 100 cold drinks are prepared in roughly the same amount of time as + only 70 of the hot drinks. This is to be expected based on their respective delays of 700 and 1000 milliseconds. + However, by configuring the endpoint concurrency, you can dramatically change the results. For example, on my + machine, the following single modification causes all 100 hot drinks to be prepared before the 4th cold drink is + ready: + + + + ]]>]]>]]> + + + In addition to experimenting with the 'concurrency' settings, you can also try adding the 'schedule' sub-element + as described in . Additionally, you can experiment with the channel's + configuration, such as adding a 'dispatcher-policy' as described in .
\ No newline at end of file