From cf23ab61431ad09bd91dcfd4129b38a79e2564d9 Mon Sep 17 00:00:00 2001 From: Gunnar Hillert Date: Thu, 27 Oct 2011 17:33:39 -0400 Subject: [PATCH] INT-2205 - Fix documentation for Claim Check --- docs/src/reference/docbook/claim-check.xml | 74 ++++++++++++---------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/docs/src/reference/docbook/claim-check.xml b/docs/src/reference/docbook/claim-check.xml index 7379d113a1..1f74aab459 100644 --- a/docs/src/reference/docbook/claim-check.xml +++ b/docs/src/reference/docbook/claim-check.xml @@ -6,56 +6,56 @@
Introduction - In the earlier sections we've covered several Content Enricher type components that help you deal with situations where a - message is missing a piece of data. We also discussed Content Filtering which lets you remove data items from a message. - However there are times when we want to hide data temporarily. For example, in a distributed system we may receive a - Message with a very large payload. Some intermittent message processing steps may not need access to this payload and some may only + In the earlier sections we've covered several Content Enricher type components that help you deal with situations where a + message is missing a piece of data. We also discussed Content Filtering which lets you remove data items from a message. + However there are times when we want to hide data temporarily. For example, in a distributed system we may receive a + Message with a very large payload. Some intermittent message processing steps may not need access to this payload and some may only need to access certain headers, so carrying the large Message payload through each processing step may cause performance degradation, may produce a security risk, and may make debugging more difficult. - + - The Claim Check pattern describes a mechanism that allows you + The Claim Check pattern describes a mechanism that allows you to store data in a well known place while only maintaining a pointer (Claim Check) to where that data is located. You can pass that - pointer around as a payload of a new Message thereby allowing any component within the message flow to get the actual data as soon as - it needs it. This approach is very similar to the Certified Mail process where you'll get a Claim Check in your mailbox and + pointer around as a payload of a new Message thereby allowing any component within the message flow to get the actual data as soon as + it needs it. This approach is very similar to the Certified Mail process where you'll get a Claim Check in your mailbox and would have to go to the Post Office to claim your actual package. Of course it's also the same idea as baggage-claim on a flight or in a hotel. - Spring Integration provides two types of Claim Check transformers: Incoming Claim Check Transformer and + Spring Integration provides two types of Claim Check transformers: Incoming Claim Check Transformer and Outgoing Claim Check Transformer. Convenient namespace-based mechanisms are available to configure them. - +
Incoming Claim Check Transformer - + - An Incoming Claim Check Transformer will transform an incoming Message by storing it in the Message Store + An Incoming Claim Check Transformer will transform an incoming Message by storing it in the Message Store identified by its message-store attribute. - + ]]> - In the above configuration the Message that is received on the input-channel will be persisted to the + In the above configuration the Message that is received on the input-channel will be persisted to the Message Store identified with the message-store attribute and indexed with generated ID. That ID is the - Claim Check for that Message. - The Claim Check will also become the payload of the new (transformed) Message that will be sent to the output-channel. + Claim Check for that Message. + The Claim Check will also become the payload of the new (transformed) Message that will be sent to the output-channel. - + - Now, lets assume that at some point you do need access to the actual Message. You can of course access the Message Store - manually and get the contents of the Message, or you can use the same approach as before except now you will be transforming + Now, lets assume that at some point you do need access to the actual Message. You can of course access the Message Store + manually and get the contents of the Message, or you can use the same approach as before except now you will be transforming the Claim Check to the actual Message by using an Outgoing Claim Check Transformer.
- +
Outgoing Claim Check Transformer - + An Outgoing Claim Check Transformer allows you to transform a Message with a Claim Check payload into a Message with the original content as its payload. @@ -64,40 +64,44 @@ message-store="testMessageStore" output-channel="output"/>]]> - In the above configuration, the Message that is received on the input-channel should have a Claim Check as its payload + In the above configuration, the Message that is received on the input-channel should have a Claim Check as its payload and the Outgoing Claim Check Transformer will transform it into a Message with the original payload by simply querying the Message store for a Message identified by the provided Claim Check. It then sends the newly checked-out Message to the output-channel. Claim Once - There are scenarios when a particular message must be claimed only once. As an analogy, consider the airplane luggage check-in/out process. - Checking-in your luggage on the departure and and then claiming it on the arrival is a classic example of such a scenario. - Once the luggage was claimed it can not be claimed again without first checking it back in. To accommodate such cases we - introduced a remove-message boolean attribute on the claim-check-out transformer. This attribute is - set to false by default. However if set to true, the claimed Message will also be removed - from the MessageStore so that it can no longer be claimed again. This is also something to consider in terms of storage space, - especially in the case of the in-memory Map-based SimpleMessageStore where failing to remove the Messages - could ultimately lead to an OutOfMemoryException. If you don't expect multiple claims to be made, it's - recommended that you set the remove-message attribute's value to false. + There are scenarios when a particular message must be claimed only once. As an analogy, consider the airplane luggage check-in/out process. + Checking-in your luggage on departure and and then claiming it on arrival is a classic example of such a scenario. + Once the luggage has been claimed, it can not be claimed again without first checking it back in. To accommodate such cases, we + introduced a remove-message boolean attribute on the claim-check-out transformer. This attribute is + set to false by default. However, if set to true, the claimed Message will be removed + from the MessageStore, so that it can no longer be claimed again. + + + This is also something to consider in terms of storage space, especially + in the case of the in-memory Map-based SimpleMessageStore, where failing to remove the Messages + could ultimately lead to an OutOfMemoryException. + Therefore, if you don't expect multiple claims to be made, it's recommended + that you set the remove-message attribute's value to true. + ]]> -
Although we rarely care about the details of the claim checks as long as they work, it is still worth knowing that the current implementation of the actual Claim Check (the pointer) in Spring Integration is a UUID to ensure uniqueness. - + A word on Message Store - org.springframework.integration.store.MessageStore is a strategy interface for storing and retrieving messages. - Spring Integration provides two convenient implementations of it. SimpleMessageStore: an in-memory, Map-based + org.springframework.integration.store.MessageStore is a strategy interface for storing and retrieving messages. + Spring Integration provides two convenient implementations of it. SimpleMessageStore: an in-memory, Map-based implementation (the default, good for testing) and JdbcMessageStore: an implementation that uses a relational database via JDBC.