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 ? |
Integration Styles | |||
---|---|---|---|
How can I integrate multiple applications so that they work together and can exchange information? |
See examples with Files, S/FTP etc |
||
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. |
||
How can I integrate multiple applications so that they work together and can exchange information? |
SOAP, REST, Hessian etc or EJB, RMI calls etc. |
||
How can I integrate multiple applications so that they work together and can exchange information? |
JMS based |
||
Messaging Systems |
|||
How does one application communicate with another using messaging? |
Can be easily based on JMS (#502), HTTP/S etc |
||
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 |
||
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. |
||
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 |
||
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 |
||
How does an application connect to a messaging channel to send and receive messages? |
See documentation on Endpoints and Destinations |
||
Messaging Channels |
|||
How can the caller be sure that exactly one receiver will receive the document or perform the call? |
JMS with Queues (#502) |
||
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) |
||
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 |
||
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 |
||
What will the messaging system do with a message it cannot deliver? |
Can easily write such undeliverable messages to a Queue, DB, file etc |
||
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 |
||
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 |
||
How can multiple messaging systems be connected so that messages available on one are also available on the others? |
Easily implemented with JMS |
||
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 |
|||
How can messaging be used to invoke a procedure in another application? |
Too trivial to document - see stock quote service example |
||
How can messaging be used to transfer data between applications? |
Too trivial to document |
||
How can messaging be used to transmit events from one application to another? |
Easily implemented with JMS |
||
When an application sends a message, how can it get a response from the receiver? |
Too trivial to document - see stock quote service example |
||
How does a replier know where to send the reply? |
#505 |
||
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 |
||
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. |
||
How can a sender indicate when a message should be considered stale and thus shouldn’t be processed? |
Could be based on JMS TTL |
||
How can a message’s data format be designed to allow for possible future changes? |
|
||
Message Routing |
|||
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) |
||
How can a component avoid receiving uninteresting messages? |
Trivial based on a Java/JSR 223 - if/switch etc. |
||
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 |
||
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 |
||
How can we process a message if it contains multiple elements, each of which may have to be processed in a different way? |
#213 |
||
How do we combine the results of individual, but related messages so that they can be processed as a whole? |
#210 |
||
How can we get a stream of related but out-of-sequence messages back into the correct order? |
|
||
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
|
||
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 |
||
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 |
||
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 |
||
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 |
|||
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 |
||
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 |
||
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 |
||
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. |
||
How do you process messages that are semantically equivalent, but arrive in a different format? |
Filtering and transformation support combined |
||
How can you minimize dependencies when integrating applications that use different data formats? |
Can be implemented depending on the requirements |
||
Messaging Endpoints |
|||
How do you encapsulate access to the messaging system from the rest of the application? |
JMS Endpoints / Proxy Services |
||
How do you move data between domain objects and the messaging infrastructure while keeping the two independent of each other? |
|
||
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) |
||
How can an application consume a message when the application is ready? |
Polling transport based Proxy services |
||
How can an application automatically consume messages as they become available? |
JMS or other event driven transports |
||
How can a messaging client process multiple messages concurrently? |
Trivial - multiple services off the same JMS Topic |
||
How can multiple consumers on a single channel coordinate their message processing? |
Trivial - multiple services off the same JMS Queue |
||
How can a message consumer select which messages it wishes to receive? |
Use JMS selector |
||
How can a subscriber avoid missing messages while it’s not listening for them? |
Use JMS durable subscriptions |
||
How can a message receiver deal with duplicate messages? |
Supports duplicate detection for JMS re-deliveries with a transport header |
||
How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques? |
|
||
System Management |
|||
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 |
||
How can you route a message through intermediate steps to perform validation, testing or debugging functions? |
Can be implemented in mediation logic |
||
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 |
||
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 |
||
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 |
||
How can you track messages on a service that publishes reply messages to the Return Address specified by the requestor? |
|
||
What happens, though, if a component is actively processing messages, but garbles outgoing messages due to an internal fault? |
|||
How can you keep 'left-over' messages on a channel from disturbing tests or running systems? |