Enterprise Integration Patterns

The UltraESB can support almost all of the most useful Enterprise Integration Patterns [EIP] easily as its mediation code can be written as a Java fragment, Java class, JSR 223 scripting language fragment or class, compiled Class or Spring bean. The most visible advantage to the end user is that he does not have to go in search of a particular module or component implementing a particular EIP pattern as with some other ESBs, but that he can implement or customize the implementations of almost all useful EIP patterns in code he is already familiar with. For example, a content based router would be implemented in a Java or JSR 223 language if-else or switch-case construct, while for message translation, XSLT, XQuery, Scripting languages, custom Java code, third party libraries etc can all be easily invoked.

Note that some of the EIPs defined by Gregor Hohpe and Bobby Woolf are too trivial for samples or a discussion with the UltraESB. In reality one should not use the EIP patterns supported as a checklist of features etc, as most ESBs would allow one to develop a solution, or customize the available features to realize much complex and real world use cases.

Help with EIPs
Feel free to contact us for help through our Contact Us Page to request for a POC for your exact use case or for additional information about supporting any particular EIP.

Technical Questions ?
You can log your technical questions at Stack Overflow
1. Login to Stack Overflow
2. Navigate to How to Ask page.
3. Search to see if a question relevant to your own has been asked.
4. If your search turned up nothing helpful or if it didn’t quite answer your question, we then suggest you ask a question yourself. Click on Proceed to navigate to Ask Question page.
5. Provide a descriptive title and describe the nature of your question. Please make sure to use the tag ultraesb when asking your question.

Integration Styles

FileTransferIcon

File Transfer

How can I integrate multiple applications so that they work together and can exchange information?

See examples with Files, S/FTP etc

SharedDatabaseIcon

Shared Database

How can I integrate multiple applications so that they work together and can exchange information?

Proxy services can be DB based via polling using Spring JDBC templates or raw JDBC/JPA etc.

EncapsulatedSynchronousIcon

Remote Procedure Invocation

How can I integrate multiple applications so that they work together and can exchange information?

SOAP, REST, Hessian etc or EJB, RMI calls etc.

MessagingIcon

Messaging

How can I integrate multiple applications so that they work together and can exchange information?

JMS based

Messaging Systems

ChannelIcon

Message Channel

How does one application communicate with another using messaging?

Can be easily based on JMS (#502), HTTP/S etc

MessageIcon

Message

How can two applications connected by a message channel exchange a piece of information?

Defined by the Message interface. The interface supports messages storing the actual payload on a file, as a String, byte[], Object, DOM, DataHandler, Map, HAPI etc. Irrespective of the native format of a Message, it can hold different types of payloads. e.g. a File based HTTP message can hold SOAP, REST, JSon, Hessian, FastInfoset, etc

PipesAndFiltersIcon

Pipes and Filters

How can we perform complex processing on a message while maintaining independence and flexibility?

Multiple sequences (i.e. a sequence calling another sequence), multiple lines of Java/JSR 223 script code yields this result.

ContentBasedRouterIcon

Message Router

How can you decouple individual processing steps so that messages can be passed to different filters depending on a set of conditions?

Can be easily based on JMS destinations and if-else, switch style coding with Java/JSR 223 script code

MessageTranslatorIcon

Message Translator

How can systems using different data formats communicate with each other using messaging?

XSLT (#205), XQuery (#109), Custom Java code, Custom JSR 223 Scripts (#102), Smooks (#351), FI, Hessian etc

MessageEndpointIcon

Message Endpoint

How does an application connect to a messaging channel to send and receive messages?

See documentation on Endpoints and Destinations

Messaging Channels

PointToPointIcon

Point-to-Point Channel

How can the caller be sure that exactly one receiver will receive the document or perform the call?

JMS with Queues (#502)

PublishSubscribeIcon

Publish-Subscribe Channel

How can the sender broadcast an event to all interested receivers?

JMS with Topics (Similr to #502 etc with JMS destination being a Topic instead)

DatatypeChannelIcon

Datatype Channel

How can the application send a data item such that the receiver will know how to process it?

Easily implemented with JMS and filtering with if-else or switch statements

InvalidMessageChannelIcon

Invalid Message Channel

How can a messaging receiver gracefully handle receiving a message that makes no sense?

Can easily write such invalid messages to a Queue, DB, file etc

DeadLetterChannelIcon

Dead Letter Channel

What will the messaging system do with a message it cannot deliver?

Can easily write such undeliverable messages to a Queue, DB, file etc

GuaranteedMessagingIcon

Guaranteed Delivery

How can the sender make sure that a message will be delivered, even if the messaging system fails?

Easily implemented with JMS coupled with the local and JTA XA transaction support

ChannelAdapterIcon

Channel Adapter

How can you connect an application to the messaging system so that it can send and receive messages?

Implements with Proxy Services + Transport Listeners and Endpoints + Transport Senders

MessagingBridgeIcon

Messaging Bridge

How can multiple messaging systems be connected so that messages available on one are also available on the others?

Easily implemented with JMS

MessageBusIcon

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?

Easily implemented with JMS based proxy services

Message Construction

CommandMessageIcon

Command Message

How can messaging be used to invoke a procedure in another application?

Too trivial to document - see stock quote service example

DocumentMessageIcon

Document Message

How can messaging be used to transfer data between applications?

Too trivial to document

EventMessageIcon

Event Message

How can messaging be used to transmit events from one application to another?

Easily implemented with JMS

RequestReplyIcon

Request-Reply

When an application sends a message, how can it get a response from the receiver?

Too trivial to document - see stock quote service example

ReturnAddressIcon

Return Address

How does a replier know where to send the reply?

#505

CorrelationIdentifierIcon

Correlation Identifier

How does a requestor that has received a reply know which request this is the reply for?

Using message headers or UUIDs, or JMS correlation IDs etc

MessageSequenceIcon

Message Sequence

How can messaging transmit an arbitrarily large amount of data?

UltraESB supports large messages and hence the usefulness of this pattern is limited - although this can still be implemented.

MessageExpirationIcon

Message Expiration

How can a sender indicate when a message should be considered stale and thus shouldn’t be processed?

Could be based on JMS TTL

Format Indicator

How can a message’s data format be designed to allow for possible future changes?

 

Message Routing

ContentBasedRouterIcon

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?

XPath (#900), Java - if/switch etc.(#106)

MessageFilterIcon

Message Filter

How can a component avoid receiving uninteresting messages?

Trivial based on a Java/JSR 223 - if/switch etc.

DynamicRouterIcon

Dynamic Router

How can you avoid the dependency of the router on all possible destinations while maintaining its efficiency?

Can be implemented in multiple ways depending on how the user wishes to inform the router of changes

RecipientListIcon

Recipient List

How do we route a message to a list of dynamically specified recipients?

Easily implemented based on if-else, switch statements based on mediation code

SplitterIcon

Splitter

How can we process a message if it contains multiple elements, each of which may have to be processed in a different way?

#213

AggregatorIcon

Aggregator

How do we combine the results of individual, but related messages so that they can be processed as a whole?

#210

ResequencerIcon

Resequencer

How can we get a stream of related but out-of-sequence messages back into the correct order?

 

DistributionAggregateIcon

Composed Message Processor

How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing?

Can be implemented

 

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?

#210

RoutingTableIcon

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?

Routing based on a DB table, JMX bean, rules engine etc

ProcessManagerIcon

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?

Integration with an external or embedded BPS

MessageBrokerIcon

Message Broker

How can you decouple the destination of a message from the sender and maintain central control over the flow of messages?

See JMS / HornetQ examples

Message Transformation

EnvelopeWrapperIcon

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?

Trivial, multiple API methods exposed over Message and Mediation

DataEnricherIcon

Content Enricher

How do we communicate with another system if the message originator does not have all the required data items available?

See articles - multiple ways of implementation

ContentFilterIcon

Content Filter

How do you simplify dealing with a large message, when you are interested only in a few data items?

See articles - multiple ways of implementation

StoreInLibraryIcon

Claim Check

How can we reduce the data volume of message sent across the system without sacrificing information content?

Can be implemented with a DB backend or file system etc.

NormalizerIcon

Normalizer

How do you process messages that are semantically equivalent, but arrive in a different format?

Filtering and transformation support combined

Canonical Data Model

How can you minimize dependencies when integrating applications that use different data formats?

Can be implemented depending on the requirements

Messaging Endpoints

MessagingGatewayIcon

Messaging Gateway

How do you encapsulate access to the messaging system from the rest of the application?

JMS Endpoints / Proxy Services

Messaging Mapper

How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other?

 

TransactionalClientIcon

Transactional Client

How can a client control its transactions with the messaging system?

Local Resource and JTA XA transactions are supported, including asynchronous suspend and resume (#704)

PollingConsumerIcon

Polling Consumer

How can an application consume a message when the application is ready?

Polling transport based Proxy services

EventDrivenConsumerIcon

Event-Driven Consumer

How can an application automatically consume messages as they become available?

JMS or other event driven transports

CompetingConsumersIcon

Competing Consumers

How can a messaging client process multiple messages concurrently?

Trivial - multiple services off the same JMS Topic

MessageDispatcherIcon

Message Dispatcher

How can multiple consumers on a single channel coordinate their message processing?

Trivial - multiple services off the same JMS Queue

MessageSelectorIcon

Selective Consumer

How can a message consumer select which messages it wishes to receive?

Use JMS selector

DurableSubscriptionIcon

Durable Subscriber

How can a subscriber avoid missing messages while it’s not listening for them?

Use JMS durable subscriptions

Idempotent Receiver

How can a message receiver deal with duplicate messages?

Supports duplicate detection for JMS re-deliveries with a transport header

MessagingAdapterIcon

Service Activator

How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques?

 

System Management

ControlBusIcon

Control Bus

How can we effectively administer a messaging system that is distributed across multiple platforms and a wide geographic area?

Apache ZooKeeper based cluster wide management and monitoring using UTerm and IMonitor

DetourIcon

Detour

How can you route a message through intermediate steps to perform validation, testing or debugging functions?

Can be implemented in mediation logic

WireTapIcon

Wire Tap

How do you inspect messages that travel on a point-to-point channel?

Clone message and send to another endpoint (#210) or use logging etc

Message History

How can we effectively analyze and debug the flow of messages in a loosely coupled system?

Messages history can be maintained if required, although not enabled by default

MessageStoreIcon

Message Store

How can we report against message information without disturbing the loosely coupled and transient nature of a messaging system?

Messages can be persisted to a DB or disk etc if required, although not enabled by default

SmartProxyIcon

Smart Proxy

How can you track messages on a service that publishes reply messages to the Return Address specified by the requestor?

 

TestMessageIcon

Test Message

What happens, though, if a component is actively processing messages, but garbles outgoing messages due to an internal fault?

ChannelPurgerIcon

Channel Purger

How can you keep 'left-over' messages on a channel from disturbing tests or running systems?

In this topic
In this topic
Contact Us