BizTalk Mappings

Common Patterns in Application Integration (and BizTalk Mappings)

Pattern Name


BizTalk Mapping


AI Patterns

Messaging Systems
Message Channel Logical name for path taken for travel by the message Send and receive pipelines
Message BTS Message
Pipes and Filters Send/Recv Pipelines, filters
Message Router
Message Translator Mapping tool
Message Endpoint Adapter Framework EndPointManager
Messaging Channels
Point-to-Point Channel
Publish-Subscribe Channel How can the sender broadcast an event to all interested receivers? Filters, subscribe based on a property
Datatype Channel How can the application send a data item such that the receiver will know how to process it The receive shape plugs the channel such that only a specific data type cancome thru Not really a channel as the pattern suggests
Invalid Message Channel How can a messaging receiver gracefully handle receiving a message that makes no sense BizTalk’s behavior is to syspend(non-resumable) these messages
Dead Letter Channel What will the messaging system do with a message it cannot deliver? BizTalk’s behavior is to syspend(non-resumable) these messages. Not sure but perhaps orchestrations can be made to listen for suspended messages to cater for problematic messages
Guaranteed Delivery How can the sender make sure that a message will be delivered, even if the messaging system fails? Store and forward inherent into BizTalk
Channel Adapter How can you connect an application to the messaging system so that it can send and receive messages? BizTalk adapter framework.
Messaging Bridge How can multiple messaging systems be connected so that messages available on one are also available on the others? MSMQT Adapter, MQSeries Bridge
Message Bus What is an architecture that enables separate applications to work together, but in a decoupled fashion such that applications can be easily added or removed without affecting the others? Message Box

Message Construction

Command Message How can messaging be used to invoke a procedure in another application? Internally uses SOAP (probably). Command contained within the BizTalk message
Document Message How can messaging be used to transfer data between applications? BizTalk Messages, Body parts
Event Message How can messaging be used to transmit events from one application to another? Messages received in case of subscriptions are event messages Depends on the content of the message, needs to be small and signify an event within an application
Request-Reply When an application sends a message, how can it get a response from the receiver Request-Reply ports
Return Address How does a replier know where to send the reply? Can be implemented thru correlation sets Response messages can be related back to their parent applicationg by correlation sets with the application name as a member. Seems to be restricted only to orchestrations
Correlation Identifier How does a requestor that has received a reply know which request this is the reply for? Correlation sets
Message Sequence How can messaging transmit an arbitrarily large amount of data? Pass data through MSMQ with ordered delivery Must have a more elegant solution in BizTalk
Message Expiration How can a sender indicate when a message should be considered stale and thus shouldn’t be processed? MSMQ, Time-to-be-received property TODO: Need to look at direct BizTalk support
Format Indicator How can a message’s data format be designed to allow for possible future changes? XML inherently versioned and schemas can always be updated Not 100% about the meaning of this pattern

Message Routing

Content-Based Router How do we handle a situation where the implementation of a single logical function (e.g., inventory check) is spread across multiple physical systems Send Port Filters
Message Filter How can a component avoid receiving uninteresting messages? Send Port filters Don’t subscribe to what you are not interested in
Dynamic Router How can you avoid the dependency of the router on all possible destinations while maintaining its efficiency? TODO Can be done thru an orch applying rule, setting a certain field, then dumping into msgbox. Send ports subscribing on that field
Recipient List How do we route a message to a list of dynamically specified recipients? Loop with send and recv (sync)
Publish Subscribe with filters (async only)
branches (fixed at design time)
Splitter How can we process a message if it contains multiple elements, each of which may have to be processed in a different way? XML Disassembler pipeline component
Aggregator How do we combine the results of individual, but related messages so that they can be processed as a whole? Receiving Loop (component checks completion)
Parallel shapes with receive shapes (known at design time)
XML Assembler pipeline component
Resequencer How can we get a stream of related but out-of-sequence messages back into the correct order? TODO Don’t think there is support for this directly
Composed Msg. Processor How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing? Splitter + Router + Processing of each message + Aggregator
Scatter-Gather How do you maintain the overall message flow when a message needs to be sent to multiple recipients, each of which may send a reply? Recipient list + Aggregator
Routing Slip How do we route a message consecutively through a series of processing steps when the sequence of steps is not known at design-time and may vary for each message? Create routing slip nodes in the message and subscribe orchestrations to a ‘next process’. Dynamically change the value of next process.
Process Manager How do we route a message through multiple processing steps when the required steps may not be known at design-time and may not be sequential? Orchestration Engine
Message Broker How can you decouple the destination of a message from the sender and maintain central control over the flow of messages? Message Box
Dynamic Request Response How do you dynamically connect a request response pair to a physical port

Message Transformation

Envelope Wrapper How can existing systems participate in a messaging exchange that places specific requirements on the message format, such as message header fields or encryption? Custom Pipeline Components, XML Assembler/Disassembler
Content Enricher How do we communicate with another system if the message originator does not have all the required data items available? Mapper with functoids
Content Filter How do you simplify dealing with a large message, when you are interested only in a few data items? Mapper with functoids
Claim Check How can we reduce the data volume of message sent across the system without sacrificing information content? TODO One idea is to have an orchestration split it up by storing the heavy stuff.. Then wait for the completion message before adding it back using a transform shape
Normalizer How do you process messages that are semantically equivalent, but arrive in a different format? Receive port maps
Canonical Data Model How can you minimize dependencies when integrating applications that use different data formats? XML is canonical data representation. Might however also recommend some sort of semantic representation of enterprise data items
Dynamic Transformation Apply transformation based on runtime information Need to look into Send Port Maps

Messaging Endpoints

Messaging Gateway How do you encapsulate access to the messaging system from the rest of the application? TransportProxy from the adapter framework I think.. Still need to validate
Messaging Mapper How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other? Distinguished fields, xml serialzer / deserializers Needs to be part of XAF
Transactional Client How can a client control its transactions with the messaging system? Orchestration scopes. Work with SQL server, MSMQ, COM+
Polling Consumer How can an application consume a message when the application is ready? Needs to be part of XAF
Event-Driven Consumer How can an application automatically consume messages as they become available? Available in the BizTalk adapter framework
Competing Consumers An application is using Messaging. However, it cannot process messages as fast as they’re being added to the channel. Scale up, Scale out This is not the recommended solution though
Message Dispatcher How can multiple consumers on a single channel coordinate their message processing?
Selective Consumer How can a message consumer select which messages it wishes to receive? Send Port Filters
Durable Subscriber How can a subscriber avoid missing messages while it’s not listening for them?
Idempotent Receiver How can a message receiver deal with duplicate messages? Design a receiver to be an Idempotent Receiver– one that can safely receive the same message multiple times. Important Design Focus. Can be one of our design objectives
Service Activator How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques? BizTalk Adapter interfaces, IIS WS, … Can be implemented in XAF

System Management

Control Bus How can we effectively administer a messaging system that is distributed across multiple platforms and a wide geographic area? Not very relavent in BizTalk since it’s a centralized system Might have similarities to the event Bus
Detour How can you route a message through intermediate steps to perform validation, testing or debugging functions? Construct a Detour with a context-based router controlled via a Control Bus.
Wire Tap How do you inspect messages that travel on a point-to-point channel? Insert a simple Recipient List into the channel that publishes each incoming message to the main channel and a secondary channel Not really needed in a centralized system
Message History How can we effectively analyze and debug the flow of messages in a loosely coupled system? Available through the message context to some extent. If multiple applications are involved, then track is lost
Message Store How can we report against message information without disturbing the loosely coupled and transient nature of a messaging system? BizTalk tracking databases Cant be sure if this is the way BizTalk internals work
Smart Proxy How can you track messages on a service that publishes reply messages to the Return Address specified by the requestor? TODO: See if we can implement this somehow
Test Message What happens, though, if a component is actively processing messages, but garbles outgoing messages due to an internal fault? No Mapping Looks like a process pinging idea. Requires a lot of infrastructure as the pattern solution is recomending
Channel Purger How can you keep ‘left-over’ messages on a channel from disturbing tests or running systems? Scripts available for archival of messages but I don’t believe it can be automated

Workflow Patterns

Basic Control Patterns

Sequence Activity Model – Single transition from A to B
Parallel Split Activity Model – Syncronous actions, one sync message triggers two actions
Synchronization multiple activities converge into a single thread of control Loop waiting for all input messages and terminating when this occurs Need to make an action out of the ‘AND’ shape!
All incomming messages (Sync,task, or otherwise) need the same type!
Exclusive Choice Based on some factors either path A or B is chosen Action with this decision shape each leading to a separate next Action
If human decision then chosen from form
Need to know all brances at design time
The deployed action can not be reused.. A copy will have to be made everytime.
Simple Merge A point where two branches come together but without sync. C is executed once everytime for the completion of A or B Not really applicable. User Initiates a new action instance for the given activity model. MS HWS and patterns seem to have a very large difference of perspective. I get the feeling HWS is’nt really a workflow engine at all from this perspective!

Advanced Branching and Sync Patterns

Multiple Choice A goes to B, A goes to C or A goes to B and C Need some kind of controller mechanism which instanciates the two next actions based on some given criterion
Synchronizing Merge Wait till two tasks have completed Possible using Sync messages The actions will not have completed in reality though
Multiple Merge A > B or C > D. D executed once if B or C and twice if B and C Don’t think direct support is required. Should suffice to have the adhoc flows
Discriminator Waits for a particular incomming branch before moving on Not possible to describe it independent of actions Possible to achieve this using a common data flag forwarded between the discriminated step and the decide point, but not on a workflow level I suppose
N-out-of-M Join Action which loops till it received n out of m “completions” How does an action receive the comletion of its parent?

Structural Patterns

Arbitrary Cycles Looping at arbitrary points within the workflow Implicit in any workflow!
Implicit Termination A given subprocess should be terminated when there is nothing more to be done Need to cater for termination structurally.. Workflow determines its own termination Not clear if the pattern is implying an external entity will keep checking and termintae if required.

Patterns involving multiple instances

MI without synchronization TODO: how to implement multiple instances with hws
MI with a priori known design time knowledge
MI with a priori known runtime knowledge
MI with no a priori runtime knowledge
State based Patterns
Deferred Choice Decision is not based on data from the immediately last step

Cancellation Patterns

Cancel Activity An enabled activity is disabled, i.e. a thread waiting for the execution of an activity is removed Use deferred choice to set a flag indicating a certain activity is disabled. Not sure if disabled means removed from execution path or if it means bipassed.
Cancel Case Activity Flow is removed along with all instances Actions can be cancelled, but the workflow itself is never really running 🙂


Muhammad Omer

Muhammad Omer is the founding partner at Allied Consultants. Areas of interest for him are entreprenuership in organizations, IT Management, Integration and Business Intelligence.