SlideShare a Scribd company logo
1 of 42
Implementing an ESB using Mule
A Real World Example
KHASIM
Agenda
 Overview of ESB
 Introduction to Mule
 Mule and JBI
 Real-world Application
Application Overview
Systems Involved
Design Considerations
Event Flows
 Implementation with Mule
Components
Transports
Returning the Loan Quote
Fault Tolerance
Scaling
 Summary
Introduction to ESB
 What is it?
 Enterprise Service Bus is an evolving architecture technique to integrate
incompatible business applications over a common messaging bus.
 Why do we need it?
 Many of the applications we write are in fact integration projects. Only the
most simple applications do not need to interact with other applications.
 Where does SOA fit in?
 ESB is one architecture style that abides by the rules of a Service Orientated
Architecture.
 What is JBI?
 Java Business Integration (JSR:208) is an emerging standard that defines
common interfaces for components and message exchanges for application
integration.
 Does this all sound familiar?
 There is nothing new about integration, we've been doing it for years. So why
the hype?
Properties of an ESB
 Loosely Coupled
 Event-Driven
 Highly Distributed
 Security/Authorization
 Abstract Endpoints
 Intelligent Routing
 Data Transformation (inbound/outbound)
 Reliable Messaging
 Multi-Protocol Message Bus
 Light Weight
Introduction to Mule
 Service container and messaging platform
 Supports a variety of topologies including ESB
 Highly Scalable; uses SEDA event model
 Lightweight and embeddable
 Transactional; Local and Distributed
 Fault tolerance; Exception management
 Secure; authentication/authorization (Using Spring/Acegi)
 Powerful event routing capabilities (based on EIP book)
 Support for over 20 messaging protocols/transports
 End-to-End Data Transformation
 Management and Monitoring using JMX
 BPEL Support
 Deployment: JAR, WAR, RAR, EAR.
Mule Topologies
Enterprise Service Bus
Client/Server and Hub n' Spoke
Peer Network
Pipeline
Enterprise Service Network
Mule and JBI
• Is Mule a JBI container?
• There is a separate project called Mule JBI that is a JBI implementation that reuses
the Mule service stack.
• Does Mule work with JBI?
• You can use Mule transports, components and transformers inside any JBI
container. Mule provides a couple of components that allows JBI components to
subscribe and publish events to and from Mule.
• Do Mule and JBI compete?
• JBI solves a subset of messaging problems. Mule addresses the basic need to
move any kind of data (not just XML) between services in an organization
• Which is best for me?
• Mule of course!
• The reason Mule integrates with other JBI engines and provides it own JBI
container is that one integration solution will never satisfy all integration needs.
• Mule levels the playing field allowing you to pick and choose which technologies to
integrate with.
Mule and JBI Differences
• JBI
– Described in terms of Service Engines (SEs) which are akin to components that
execute business logic.
– Binding Components (BCs) implement protocols to provide connectivity to
SEs.
– JBI uses a Message Exchange to manage interactions between components.
– Targeted a specifically at integration. Normalized Message
• Mule
– Components are POJOs, EJBs, Spring Beans, Remote objects.
– The component never needs to call Mule APIs making them totally portable.
– Flexible endpoint model where a component may have zero or more inbound
and outbound endpoints.
– Message routing is done via routers that are associated with the component.
– Mule is a ubiquitous messaging platform.
– A distributed container for wiring components.
Loan Broker
A Real World Example
Shopping for Loans
• Customer calls different banks to find the best deal.
• Each bank asks customer for his or her social security number, the amount
of the loan and the desired term.
• Each bank then investigates the customer's credit background, usually by
contacting a credit agency, before it finally sends the customer a quote.
• Once the customer has received quotes from all banks, he or she can then
select the best offer, i.e. the lowest rate. [1]
The Loan Broker
• This process can be automated to allow customers to obtain the best
quote on-line from a far broader range of banks, in much less time than if
he or she were to obtain all the quotes one by one.
– Upon receiving customer request, Loan Broker:
– obtains the credit information for that customer from the credit agency
– requests quotes for the customer from banks listed with the Lender Service
– sends aggregate compilation of quotes to the customer for selection. [2]
Components
Loan Broker Service Receives LoanRequests (customer, SS
number, loan amount, duration) and is
responsible for aggregating LoanQuotes
into response for the request.
Credit Agency Service An external service provider that provides
crediting checking on customers to ensure
the loan amount requested is feesible.
Credit Agency Gateway Marshals a request between the message
bus and the Credit Agency Application.
Lender Service Based on the customer's credit scoring,
loan amount and duration, the lender
service will select banks from which to
request a LoanQuote.
Lender Gateway Marshals a request from the message bus
to the Lender Application.
Banking Gateway Dispatches LoanRequests to one or more
banks.
Orchestration
• LoanBroker (Http/Rest)
– Receives Requests over Http from a client application, such as a web browser.
• Credit Agency (EJB)
– Is an EJB application that is managed by the Loan Broker company. It exposes an EJB
called creditAgency with a method getCreditProfile.
• Lender Application (VM)
– Is a local component, a Pojo that will determine which lenders should be used.
• Banks (SOAP)
– For simplicity of this example all banks expose the same WS interface, though it's quite
feasible to configure Mule to invoke different interfaces for different banks.
• Gateways (JMS)
– Gateways marshal the requests from the message bus to external applications and
services.
Design Considerations
• Constraints
– Application needs to support request/response processing model.
– Will get a high volume of requests.
– Synchronous processing will not give us enough throughput.
• Transports
– Using a JMS message bus
– Need to invoke services over JMS, Http/Rest, VM, and SOAP.
– Need to invoke services in external application containers (EJB).
– Expose components as Web services (Banks).
• Message
– The message on the bus is referred to as a LoanQuoteRequest. In this
example this is a Java bean but in real scenarios an XML document
would be used.
Loan Broker Design
Request Event Flow
1. Client application makes a request sending the LoanBroker a
CustomerQuoteRequest Message.
2. LoanBroker creates a LoanQuoteRequest Message.
3. Mule sends the message to the Credit Agency Gateway via JMS
4. The Gateway marshals the request and invokes the CreditAgency EJB. The
component used in the RelectionMessageBuilder which automatically
attaches the CreditProfile to the LoanQuoteRequest message.
5. Mule sends the Message to the Lender Gateway via JMS
6. The Gateway uses the VM transport to invoke the Lender Application.
7. Mule sends the Message to the Banking Gateway via JMS
8. The Banking Gateway in this example invokes the Banks using SOAP.
9. Each of the Banks attaches a quote to the request and sends it back to the
LoanBroker via the ReplyTo address provided by the Banking Gateway.
10. The ResponseRouter on the Loan Broker Service receives the responses on the
ReplyTo address. It selects the lowest quote received for the request and
returns it to the client.
Loan Broker
Implementation with Mule
Design With Mule
The Message
Lets start by defining the LoanQuoteRequest Message. In this example the
Message is a Java bean and is the common message format on the bus.
Normally this would be XML, but Mule allows us to pass any data format around.
public class LoanQuoteRequest implements Serializable
{
/** The request contains Customer info and loan amount and duration*/
private CustomerQuoteRequest customerRequest;
/** credit profile for the customer */
private CreditProfile creditProfile;
/** A list of lenders for this request */
private Bank[] lenders;
/** A loan quote from a bank */
private LoanQuote loanQuote;
.......
}
Client Request
• The whole chain of events is initiated with a client request. This is done
over Http using Mule's REST support. It is described in the Endpoint
address –
jetty:rest://localhost:8080/loanbroker
• Here we're saying -
– Embed a Jetty Servlet Engine
– Use the Rest servlet for receiving requests
– Listen on localhost:8080
– Bind the Rest servlet to the context /loanbroker
• The request from the client would look like –
http://localhost:8080/loanbroker/?name=Ross+Mason&ssn=1234&
loanAmount=10000&loanDuration=24
The Message
• The Loan Broker endpoint receives the request as a set of Http parameters, but we
need to transform this into a CustomerQuoteRequest object before the Loan Broker
component receives it.
• We do this by configuring a custom transformer on the endpoint.
public Object transform(Object src, UMOEventContext context)
throws TransformerException {
String name = context.getStringProperty("name");
int ssn = context.getIntProperty("ssn");
double amount = context.getDoubleProperty("loanAmount");
double duration = context.getDoubleProperty("loanDuration");
Customer customer = new Customer(name, ssn);
CustomerQuoteRequest request =
new CustomerQuoteRequest(customer, amount, duration);
return request;
}
Loan Broker Service
• The Loanbroker service actually doesn't need to do anything but trigger the LoanQuoteRequest
on the bus. Mule handles all routing transformation and passing the quote back to the callee.
• The transformer configured on the REST inbound endpoint for the LoanBroker converts the
REST parameters into a CustomerQuoteRequest object.
public class LoanBroker
{
public LoanQuoteRequest requestLoanQuote(
CustomerQuoteRequest request) throws Exception
{
LoanQuoteRequest bqr = new LoanQuoteRequest();
bqr.setCustomerRequest(request);
return bqr;
}
}
Loan Broker Configuration
All the detail is in the Loan Broker configuration.
<mule-descriptor name="LoanBroker"
implementation="org.mule.samples.loanbroker.esb.LoanBroker">
<inbound-router>
<endpoint address="jetty:rest://localhost:8080/loanbroker"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="jms://esb.credit.agency"/>
</router>
</outbound-router>
<response-router timeout="10000">
<endpoint address="jms://esb.loan.quotes"/>
<router className="
org.mule.samples.loanbroker.esb.routers.BankQuotesResponseAggregator"/>
</response-router>
</mule-descriptor>
Credit Agency Gateway
• The Credit Agency code is even easier! We use a standard
Mule Component called a ReflectionMessageBuilder which
builds a message based on a set of results from endpoint
invocations.
• It will use reflection to determine how to set the result of the
last endpoint invocation as a property on the master
message.
• There are other MessageBuilder components such as the
ScriptMessageBuilder component which is a JSR-223
(Scripting) component that allows you to manipulate the
payload after each request using Groovy, JavaScript, Rhino or
any other supported scripting language.
Credit Agency Configuration
<mule-descriptor name="CreditAgencyGateway"
implementation="org.mule.components.builder.ReflectionMessageBuilder">
<inbound-router>
<endpoint address="jms://credit.agency"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.FilteringRouter">
<endpoint address="ejb://localhost:1099/local/CreditAgency?method=getCreditProfile“
transformers=“LoanQuoteRequestToCreditProfileArgs”
responseTransformers="CreditProfileXmlToCreditProfile“/>
<properties>
<list name="methodArgumentTypes">
<entry value="java.lang.String"/>
<entry value="java.lang.String"/>
</list>
</properties>
</endpoint>
<endpoint address="jms://esb.lender.service"/>
</router>
</outbound-router>
</mule-descriptor>
Credit Agency Configuration
• We invoke the CreditAgency application using an EJB endpoint –
ejb://localhost:1099/local/CreditAgency?method=getCreditProfile
• This endpoint tells Mule to –
– Look up an EJB object at localhost:1099
– Use the JNDI name local/CreditAgency
– Invoke the method getCreditProfile on the EJB object
• Notice also the transformers and responseTransformers attibutes on the
endpoint. These tell Mule how to marshal for the Application.
– LoanQuoteRequestToCreditProfileArgs – Extracts the method arguments from
the request as an array used to invoke getCreditProfile.
– CreditProfileXmlToCreditProfile – Parses the response Xml and creates a
CreditProfile object that will be set on the LoanQuoteRequest.
Lender Gateway
• Lender Service
– The Lender Agency is a Mule component, that receives events directly
using the VM transport.
• Leander Gateway
– The Lender Gateway marshals requests from the bus to the lender
service.
Lender Gateway Configuration
Lender Service
<mule-descriptor name="LenderService" implementation="org.mule.samples.loanbroker.esb.LenderService">
<inbound-router>
<endpoint address="vm://lender.service"/>
</inbound-router>
</mule-descriptor>
Lender Gatway
<mule-descriptor name="LenderGateway”
implementation="org.mule.components.simple.BridgeComponent">
<inbound-router>
<endpoint address="jms://esb.lender.service"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.ChainingRouter">
<endpoint address="vm://lender.service"/>
<endpoint address="jms://esb.banks"/>
</router>
</outbound-router>
</mule-descriptor>
Banking Gateway
• The Banking Gateway is responsible for distributing requests to a list of lenders.
• The ReciptientList router configured on this gateway is responsible for extracting the endpoints
from the message and invoking them. The RecipientList is a type of Itinerary-based router that
extracts its itinerary as a static list from the event.
<mule-descriptor name="BankingGateway"
implementation="org.mule.components.simple.BridgeComponent">
<inbound-router>
<endpoint address="jms://esb.banks"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.StaticRecipientList">
<reply-to address="jms://esb.loan.quotes"/>
</router>
</outbound-router>
</mule-descriptor>
Banks
• The banks in this example are just simple beans that return a
fixed interest rate and are exposed as SOAP services.
<mule-descriptor name="Bank1"
inboundEndpoint="axis:http://localhost:10001/services"
implementation="org.mule.samples.loanbroker.Bank">
</mule-descriptor>
• Note to expose a component as an Axis service all you
need to do is add an Axis endpoint!
Choosing the best Quote
• Once a back has a quote it passes it to Mule which will send the Quote on
the reply-to endpoint specified by the Banking Gateway.
• Looking back at the LoanBroker configuration, there is a response-router
configured as -
<response-router timeout="10000">
<endpoint address="jms://esb.loan.quotes"/>
<router className="org.mule.samples.loanbroker.esb.routers.
BankQuotesResponseAggregator"/>
</response-router>
• The BankQuoteResponseAggregator is responsible for picking the
lowest quote. But before that happens Mule needs to make sure all
responses are received for the request.
• This is done using message correlation managed by Mule.
Event Correlation
• When a event is dispatched from the Banking Gateway a correlationId and
correlationGroupSize is attached to the SOAP message. This is a function
of the Recipient List router. It attaches the following information -
– CorrelationId – and Id that associates all the dispatched events to the same
group
– CorrelationGroupSize – how many events are in the group.
– CorrelationSequence – the order in which the events were dispatched.
• The Response Router reads these correlation headers when events are
received and correlates the events.
• When the event group correlation is complete the response-router
invokes itself where developers can plug in custom logic.
Response Aggregation
• The BankQuoteResponseAggregator implements a single method that works
out the lowest quote before passing it back to Mule to route the response
back to the client.
protected UMOMessage aggregateEvents(EventGroup events) throws RoutingException {
. . . .
List list = events.getEvents();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
event = (UMOEvent) iterator.next();
quote = (LoanQuote)event.getTransformedMessage();
logger.info("Processing quote: " + quote);
if (lowestQuote == null) {
lowestQuote = quote;
} else if (quote.getInterestRate() < lowestQuote.getInterestRate()) {
lowestQuote = quote;
}
}
return new MuleMessage(lowestQuote, event.getProperties());
}
Transports
• Most Mule transports can be configured using just
the endpoint address. i.e. tcp://localhost:45454
contains all the information necessary to make a TCP
connection.
• However for JMS and EJB we need to define
configuration properties for each such as Jndi
information.
• This is done by configuring connectors in our
MuleXml.
Transport Configuration
EJB Connector (OpenEJB – Local Server. See http://openejb.org)
<connector name="ejbConnector" className="org.mule.providers.ejb.EjbConnector">
<properties>
<property name="jndiInitialFactory" value="org.openejb.client.LocalInitialContextFactory"/>
<property name="securityPolicy" value="security.policy"/>
<map name="jndiProviderProperties">
<property name="openejb.base" value="."/>
<property name="openejb.configuration" value="../conf/openejb.conf"/>
</map>
</properties>
</connector>
JMS Connector (ActiveMQ)
<connector name="jmsConnector" className="org.mule.providers.jms.JmsConnector">
<properties>
<property name="connectionFactoryJndiName" value="ConnectionFactory"/>
<property name="jndiInitialFactory" value="org.activemq.jndi.ActiveMQInitialContextFactory"/>
<property name="specification" value="1.1"/>
</properties>
</connector>
Fault Tolerance
• Exception Strategies
– Can be defined on components and connectors
– Can be defined globally of for each connector or component
– Can handle different exception types differently.
– Exception hierarchy provides all available information
– Event payloads can be re-routed on exception
• Connection Strategies
– Control how connectors connect to underlying resources
– Allow for flexible retry policies
– Notifications of failed connections
– Consistent endpoint state maintained
– Can alter routing paths based on failed connections
Scaling
• SEDA Model
– Mule is SEDA-based, which is an architecture designed for high concurrency
and throughput.
• JMS Clustering
– Currently Mule can use JMS clustering to distribute events to a cluster of Mule
Nodes.
• Application Server Clustering
– Mule can be embedded inside a JCA container and allow the App server to
manage its resources and cluster instances.
• New Clustering Support
– The next release of Mule will provide clustering and distribution using
JGroups/JBossCache.
• Load Balancing using Mule
– You can use a Mule instance to provide load-balancing over any transport.
Summary
• An ESB integrating a client application and 3 back
office systems.
• Combined a number of transports including HTTP,
JMS, EJB and Web Services.
• Easy to add in Exception handling, transactions, etc.
All done through configuration.
• All event routing, management, transformation is
handled by Mule.
• Very little code to write. Just domain-specific logic.
• A fully functional ESB in about an hour!
The Mule Project
• Project was founded in 2003.
• It was started after experiences with a large Financial ESB
project.
• There are now 10 developers who help support it and add
new features.
• Has an active user community.
• Is being used in companies such as HP, Sony, Deutche Bank
and CitiBank.
• SymphonySoft has been started by Mule developers to help
support and provide professional services to these projects.
• For more information go to - http://mule.codehaus.org.
Resources
• EIP Book (Loan Broker Example) [1][2]
– http://www.eaipatterns.com/ComposedMessagingExample.html
– http://www.eaipatterns.com/index.html
• Introduction to ESBs – Rick Robinson
– http://www-106.ibm.com/developerworks/xml/library/ws-esbscen/
• ESB Learning Guide
– http://searchwebservices.techtarget.com/general/1,295582,sid26_gci
1085711,00.html
• Introduction to SEDA – Matt Welsh
– http://www.eecs.harvard.edu/~mdw/papers/mdw-phdthesis.pdf
• Mule User Guide
– http://mule.codehaus.org/User+Guide
Slides and Code
• To get this Loan Broker ESB code and these
slides go to -
– http://mule.codehaus.org/LoanBroker
• There are other examples too -
– http://mule.codehaus.org/Examples
Questions
?

More Related Content

What's hot

Using mule configuration patterns
Using mule configuration patternsUsing mule configuration patterns
Using mule configuration patternsSindhu VL
 
A Short Introduction of Mule ESB
A Short Introduction of Mule ESBA Short Introduction of Mule ESB
A Short Introduction of Mule ESBSwapnil Sahu
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API ProxyVince Soliza
 
Development using anypointstudio
Development using anypointstudioDevelopment using anypointstudio
Development using anypointstudiohimajareddys
 
Implementing an Esb using Mule
Implementing an Esb using MuleImplementing an Esb using Mule
Implementing an Esb using MuleAbdulImrankhan7
 
Using mule with web services
Using mule with web servicesUsing mule with web services
Using mule with web servicesShanky Gupta
 
Mule real-world-old
Mule real-world-oldMule real-world-old
Mule real-world-oldF K
 
MuleEsb Complete integration and middleware solution
MuleEsb Complete integration and middleware solutionMuleEsb Complete integration and middleware solution
MuleEsb Complete integration and middleware solutionRajkattamuri
 
Introduce Mule
Introduce MuleIntroduce Mule
Introduce Mulemha4
 
A Workhorse Named Mule
A Workhorse Named MuleA Workhorse Named Mule
A Workhorse Named MuleDavid Dossot
 
Implementing an ESB using Mule
Implementing an ESB using MuleImplementing an ESB using Mule
Implementing an ESB using Muleelliando dias
 
Deployment of Mule ESB Application using MMC
Deployment of Mule ESB Application using MMCDeployment of Mule ESB Application using MMC
Deployment of Mule ESB Application using MMCSanjeet Pandey
 
Mule Concur Connector
Mule Concur ConnectorMule Concur Connector
Mule Concur ConnectorAnkush Sharma
 

What's hot (17)

Using mule configuration patterns
Using mule configuration patternsUsing mule configuration patterns
Using mule configuration patterns
 
A Short Introduction of Mule ESB
A Short Introduction of Mule ESBA Short Introduction of Mule ESB
A Short Introduction of Mule ESB
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API Proxy
 
Development using anypointstudio
Development using anypointstudioDevelopment using anypointstudio
Development using anypointstudio
 
Implementing an Esb using Mule
Implementing an Esb using MuleImplementing an Esb using Mule
Implementing an Esb using Mule
 
Mule execution
Mule executionMule execution
Mule execution
 
Using mule with web services
Using mule with web servicesUsing mule with web services
Using mule with web services
 
Mule real-world-old
Mule real-world-oldMule real-world-old
Mule real-world-old
 
MuleEsb Complete integration and middleware solution
MuleEsb Complete integration and middleware solutionMuleEsb Complete integration and middleware solution
MuleEsb Complete integration and middleware solution
 
Introduce Mule
Introduce MuleIntroduce Mule
Introduce Mule
 
VM example in mule
VM example in muleVM example in mule
VM example in mule
 
A Workhorse Named Mule
A Workhorse Named MuleA Workhorse Named Mule
A Workhorse Named Mule
 
Implementing an ESB using Mule
Implementing an ESB using MuleImplementing an ESB using Mule
Implementing an ESB using Mule
 
Deployment of Mule ESB Application using MMC
Deployment of Mule ESB Application using MMCDeployment of Mule ESB Application using MMC
Deployment of Mule ESB Application using MMC
 
Mule Concur Connector
Mule Concur ConnectorMule Concur Connector
Mule Concur Connector
 
Mule real-world-old
Mule real-world-oldMule real-world-old
Mule real-world-old
 
Webservice vm in mule
Webservice vm in muleWebservice vm in mule
Webservice vm in mule
 

Viewers also liked

Climate Change in the Media: Where have we been and where are we headed?
Climate Change in the Media: Where have we been and where are we headed?Climate Change in the Media: Where have we been and where are we headed?
Climate Change in the Media: Where have we been and where are we headed?Mike Schäfer
 
Mule Esb Fundamentals
Mule Esb FundamentalsMule Esb Fundamentals
Mule Esb Fundamentalsmdfkhan625
 
Frank Bien Opening Keynote - Join 2016
Frank Bien Opening Keynote - Join 2016Frank Bien Opening Keynote - Join 2016
Frank Bien Opening Keynote - Join 2016Looker
 
Mule security - jaas
Mule  security - jaasMule  security - jaas
Mule security - jaascharan teja R
 
Lloyd Tabb on Symmetric Aggregates
Lloyd Tabb on Symmetric Aggregates Lloyd Tabb on Symmetric Aggregates
Lloyd Tabb on Symmetric Aggregates Looker
 
Meet Looker 4
Meet Looker 4Meet Looker 4
Meet Looker 4Looker
 
Fetch records from mysql using mule esb
Fetch records from mysql using mule esbFetch records from mysql using mule esb
Fetch records from mysql using mule esbAnilKumar Etagowni
 
From Question to Action
From Question to ActionFrom Question to Action
From Question to ActionJanessa Lantz
 
How to Build a Data-Driven Company: From Infrastructure to Insights
How to Build a Data-Driven Company: From Infrastructure to InsightsHow to Build a Data-Driven Company: From Infrastructure to Insights
How to Build a Data-Driven Company: From Infrastructure to InsightsLooker
 
Aspnet core
Aspnet coreAspnet core
Aspnet coreeleksdev
 

Viewers also liked (18)

Mule soa
Mule soaMule soa
Mule soa
 
Climate Change in the Media: Where have we been and where are we headed?
Climate Change in the Media: Where have we been and where are we headed?Climate Change in the Media: Where have we been and where are we headed?
Climate Change in the Media: Where have we been and where are we headed?
 
Mule java part-2
Mule java part-2Mule java part-2
Mule java part-2
 
Mule Esb Fundamentals
Mule Esb FundamentalsMule Esb Fundamentals
Mule Esb Fundamentals
 
Mule java part-3
Mule java part-3Mule java part-3
Mule java part-3
 
Frank Bien Opening Keynote - Join 2016
Frank Bien Opening Keynote - Join 2016Frank Bien Opening Keynote - Join 2016
Frank Bien Opening Keynote - Join 2016
 
Mule AMQP Connector
Mule AMQP ConnectorMule AMQP Connector
Mule AMQP Connector
 
Mule Batch Filter
Mule Batch FilterMule Batch Filter
Mule Batch Filter
 
Mule security - jaas
Mule  security - jaasMule  security - jaas
Mule security - jaas
 
Lloyd Tabb on Symmetric Aggregates
Lloyd Tabb on Symmetric Aggregates Lloyd Tabb on Symmetric Aggregates
Lloyd Tabb on Symmetric Aggregates
 
Meet Looker 4
Meet Looker 4Meet Looker 4
Meet Looker 4
 
Fetch records from mysql using mule esb
Fetch records from mysql using mule esbFetch records from mysql using mule esb
Fetch records from mysql using mule esb
 
From Question to Action
From Question to ActionFrom Question to Action
From Question to Action
 
MULE-JAAS
MULE-JAASMULE-JAAS
MULE-JAAS
 
How to Build a Data-Driven Company: From Infrastructure to Insights
How to Build a Data-Driven Company: From Infrastructure to InsightsHow to Build a Data-Driven Company: From Infrastructure to Insights
How to Build a Data-Driven Company: From Infrastructure to Insights
 
Rpc
RpcRpc
Rpc
 
Aspnet core
Aspnet coreAspnet core
Aspnet core
 
Agile Analytics
Agile AnalyticsAgile Analytics
Agile Analytics
 

Similar to Mule Fundamentals

Mule real world old
Mule real world oldMule real world old
Mule real world oldMohammed625
 
Mule execution
Mule executionMule execution
Mule executionPhaniu
 
Mule execution
Mule executionMule execution
Mule executionirfan1008
 
4 150915033746-lva1-app6892
4 150915033746-lva1-app68924 150915033746-lva1-app6892
4 150915033746-lva1-app6892ppts123456
 
Implementing ESB
Implementing ESBImplementing ESB
Implementing ESBmdfkhan625
 
Implementation in mule esb
Implementation in mule esbImplementation in mule esb
Implementation in mule esbVamsi Krishna
 
Javazone 2005-mule-real-world-old
Javazone 2005-mule-real-world-oldJavazone 2005-mule-real-world-old
Javazone 2005-mule-real-world-oldtdlrobin
 
CV_PurnimaBalla_WCS-Consultant_7Yrs
CV_PurnimaBalla_WCS-Consultant_7YrsCV_PurnimaBalla_WCS-Consultant_7Yrs
CV_PurnimaBalla_WCS-Consultant_7YrsPurnima Balla
 
Knowledge drivenmicroservices
Knowledge drivenmicroservicesKnowledge drivenmicroservices
Knowledge drivenmicroservicesMaciej Swiderski
 
Web Basics
Web BasicsWeb Basics
Web BasicsHui Xie
 
Subscription based control system to automate management of events for robots
Subscription based control system to automate management of events for robotsSubscription based control system to automate management of events for robots
Subscription based control system to automate management of events for robotsdbpublications
 
IBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic InvestmentIBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic InvestmentStrongback Consulting
 
Making Rational HATS a Strategic Investment
Making Rational HATS a Strategic InvestmentMaking Rational HATS a Strategic Investment
Making Rational HATS a Strategic InvestmentStrongback Consulting
 
Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...
Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...
Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...ijceronline
 

Similar to Mule Fundamentals (20)

Mule real-world
Mule real-worldMule real-world
Mule real-world
 
Mule real world old
Mule real world oldMule real world old
Mule real world old
 
Mule execution
Mule executionMule execution
Mule execution
 
Mule execution
Mule executionMule execution
Mule execution
 
Mule execution
Mule executionMule execution
Mule execution
 
Mule execution
Mule executionMule execution
Mule execution
 
4 150915033746-lva1-app6892
4 150915033746-lva1-app68924 150915033746-lva1-app6892
4 150915033746-lva1-app6892
 
Implementing ESB
Implementing ESBImplementing ESB
Implementing ESB
 
Implementation in mule esb
Implementation in mule esbImplementation in mule esb
Implementation in mule esb
 
Javazone 2005-mule-real-world-old
Javazone 2005-mule-real-world-oldJavazone 2005-mule-real-world-old
Javazone 2005-mule-real-world-old
 
CV_PurnimaBalla_WCS-Consultant_7Yrs
CV_PurnimaBalla_WCS-Consultant_7YrsCV_PurnimaBalla_WCS-Consultant_7Yrs
CV_PurnimaBalla_WCS-Consultant_7Yrs
 
Knowledge drivenmicroservices
Knowledge drivenmicroservicesKnowledge drivenmicroservices
Knowledge drivenmicroservices
 
Micro Services
Micro ServicesMicro Services
Micro Services
 
Web Basics
Web BasicsWeb Basics
Web Basics
 
Subscription based control system to automate management of events for robots
Subscription based control system to automate management of events for robotsSubscription based control system to automate management of events for robots
Subscription based control system to automate management of events for robots
 
IBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic InvestmentIBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic Investment
 
ServerSentEventsV2.pdf
ServerSentEventsV2.pdfServerSentEventsV2.pdf
ServerSentEventsV2.pdf
 
Making Rational HATS a Strategic Investment
Making Rational HATS a Strategic InvestmentMaking Rational HATS a Strategic Investment
Making Rational HATS a Strategic Investment
 
Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...
Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...
Constraint Aware Dynamic Web Service Composition for A Specific Business Requ...
 
Microservices
MicroservicesMicroservices
Microservices
 

More from Khasim Cise

Scatter gather in mule
Scatter gather in muleScatter gather in mule
Scatter gather in muleKhasim Cise
 
Collections in Java
Collections in JavaCollections in Java
Collections in JavaKhasim Cise
 
Mule using Salesforce
Mule using SalesforceMule using Salesforce
Mule using SalesforceKhasim Cise
 
ESB introduction using Mule
ESB introduction using MuleESB introduction using Mule
ESB introduction using MuleKhasim Cise
 
Introduction to mule esb
Introduction to mule esbIntroduction to mule esb
Introduction to mule esbKhasim Cise
 
Introduction to WebServices
Introduction to WebServicesIntroduction to WebServices
Introduction to WebServicesKhasim Cise
 
Introduction to mule esb
Introduction to mule esbIntroduction to mule esb
Introduction to mule esbKhasim Cise
 

More from Khasim Cise (12)

Scatter gather in mule
Scatter gather in muleScatter gather in mule
Scatter gather in mule
 
Java
JavaJava
Java
 
Collections in Java
Collections in JavaCollections in Java
Collections in Java
 
Mule using Salesforce
Mule using SalesforceMule using Salesforce
Mule using Salesforce
 
Java
JavaJava
Java
 
ESB introduction using Mule
ESB introduction using MuleESB introduction using Mule
ESB introduction using Mule
 
Introduction to mule esb
Introduction to mule esbIntroduction to mule esb
Introduction to mule esb
 
Mule ESB
Mule ESBMule ESB
Mule ESB
 
Introduction to WebServices
Introduction to WebServicesIntroduction to WebServices
Introduction to WebServices
 
SunMicroSystems
SunMicroSystemsSunMicroSystems
SunMicroSystems
 
1. web services
1. web services1. web services
1. web services
 
Introduction to mule esb
Introduction to mule esbIntroduction to mule esb
Introduction to mule esb
 

Recently uploaded

New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 

Recently uploaded (20)

New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 

Mule Fundamentals

  • 1. Implementing an ESB using Mule A Real World Example KHASIM
  • 2. Agenda  Overview of ESB  Introduction to Mule  Mule and JBI  Real-world Application Application Overview Systems Involved Design Considerations Event Flows  Implementation with Mule Components Transports Returning the Loan Quote Fault Tolerance Scaling  Summary
  • 3. Introduction to ESB  What is it?  Enterprise Service Bus is an evolving architecture technique to integrate incompatible business applications over a common messaging bus.  Why do we need it?  Many of the applications we write are in fact integration projects. Only the most simple applications do not need to interact with other applications.  Where does SOA fit in?  ESB is one architecture style that abides by the rules of a Service Orientated Architecture.  What is JBI?  Java Business Integration (JSR:208) is an emerging standard that defines common interfaces for components and message exchanges for application integration.  Does this all sound familiar?  There is nothing new about integration, we've been doing it for years. So why the hype?
  • 4. Properties of an ESB  Loosely Coupled  Event-Driven  Highly Distributed  Security/Authorization  Abstract Endpoints  Intelligent Routing  Data Transformation (inbound/outbound)  Reliable Messaging  Multi-Protocol Message Bus  Light Weight
  • 5. Introduction to Mule  Service container and messaging platform  Supports a variety of topologies including ESB  Highly Scalable; uses SEDA event model  Lightweight and embeddable  Transactional; Local and Distributed  Fault tolerance; Exception management  Secure; authentication/authorization (Using Spring/Acegi)  Powerful event routing capabilities (based on EIP book)  Support for over 20 messaging protocols/transports  End-to-End Data Transformation  Management and Monitoring using JMX  BPEL Support  Deployment: JAR, WAR, RAR, EAR.
  • 6. Mule Topologies Enterprise Service Bus Client/Server and Hub n' Spoke Peer Network Pipeline Enterprise Service Network
  • 7. Mule and JBI • Is Mule a JBI container? • There is a separate project called Mule JBI that is a JBI implementation that reuses the Mule service stack. • Does Mule work with JBI? • You can use Mule transports, components and transformers inside any JBI container. Mule provides a couple of components that allows JBI components to subscribe and publish events to and from Mule. • Do Mule and JBI compete? • JBI solves a subset of messaging problems. Mule addresses the basic need to move any kind of data (not just XML) between services in an organization • Which is best for me? • Mule of course! • The reason Mule integrates with other JBI engines and provides it own JBI container is that one integration solution will never satisfy all integration needs. • Mule levels the playing field allowing you to pick and choose which technologies to integrate with.
  • 8. Mule and JBI Differences • JBI – Described in terms of Service Engines (SEs) which are akin to components that execute business logic. – Binding Components (BCs) implement protocols to provide connectivity to SEs. – JBI uses a Message Exchange to manage interactions between components. – Targeted a specifically at integration. Normalized Message • Mule – Components are POJOs, EJBs, Spring Beans, Remote objects. – The component never needs to call Mule APIs making them totally portable. – Flexible endpoint model where a component may have zero or more inbound and outbound endpoints. – Message routing is done via routers that are associated with the component. – Mule is a ubiquitous messaging platform. – A distributed container for wiring components.
  • 9. Loan Broker A Real World Example
  • 10. Shopping for Loans • Customer calls different banks to find the best deal. • Each bank asks customer for his or her social security number, the amount of the loan and the desired term. • Each bank then investigates the customer's credit background, usually by contacting a credit agency, before it finally sends the customer a quote. • Once the customer has received quotes from all banks, he or she can then select the best offer, i.e. the lowest rate. [1]
  • 11. The Loan Broker • This process can be automated to allow customers to obtain the best quote on-line from a far broader range of banks, in much less time than if he or she were to obtain all the quotes one by one. – Upon receiving customer request, Loan Broker: – obtains the credit information for that customer from the credit agency – requests quotes for the customer from banks listed with the Lender Service – sends aggregate compilation of quotes to the customer for selection. [2]
  • 12. Components Loan Broker Service Receives LoanRequests (customer, SS number, loan amount, duration) and is responsible for aggregating LoanQuotes into response for the request. Credit Agency Service An external service provider that provides crediting checking on customers to ensure the loan amount requested is feesible. Credit Agency Gateway Marshals a request between the message bus and the Credit Agency Application. Lender Service Based on the customer's credit scoring, loan amount and duration, the lender service will select banks from which to request a LoanQuote. Lender Gateway Marshals a request from the message bus to the Lender Application. Banking Gateway Dispatches LoanRequests to one or more banks.
  • 13. Orchestration • LoanBroker (Http/Rest) – Receives Requests over Http from a client application, such as a web browser. • Credit Agency (EJB) – Is an EJB application that is managed by the Loan Broker company. It exposes an EJB called creditAgency with a method getCreditProfile. • Lender Application (VM) – Is a local component, a Pojo that will determine which lenders should be used. • Banks (SOAP) – For simplicity of this example all banks expose the same WS interface, though it's quite feasible to configure Mule to invoke different interfaces for different banks. • Gateways (JMS) – Gateways marshal the requests from the message bus to external applications and services.
  • 14. Design Considerations • Constraints – Application needs to support request/response processing model. – Will get a high volume of requests. – Synchronous processing will not give us enough throughput. • Transports – Using a JMS message bus – Need to invoke services over JMS, Http/Rest, VM, and SOAP. – Need to invoke services in external application containers (EJB). – Expose components as Web services (Banks). • Message – The message on the bus is referred to as a LoanQuoteRequest. In this example this is a Java bean but in real scenarios an XML document would be used.
  • 16. Request Event Flow 1. Client application makes a request sending the LoanBroker a CustomerQuoteRequest Message. 2. LoanBroker creates a LoanQuoteRequest Message. 3. Mule sends the message to the Credit Agency Gateway via JMS 4. The Gateway marshals the request and invokes the CreditAgency EJB. The component used in the RelectionMessageBuilder which automatically attaches the CreditProfile to the LoanQuoteRequest message. 5. Mule sends the Message to the Lender Gateway via JMS 6. The Gateway uses the VM transport to invoke the Lender Application. 7. Mule sends the Message to the Banking Gateway via JMS 8. The Banking Gateway in this example invokes the Banks using SOAP. 9. Each of the Banks attaches a quote to the request and sends it back to the LoanBroker via the ReplyTo address provided by the Banking Gateway. 10. The ResponseRouter on the Loan Broker Service receives the responses on the ReplyTo address. It selects the lowest quote received for the request and returns it to the client.
  • 19. The Message Lets start by defining the LoanQuoteRequest Message. In this example the Message is a Java bean and is the common message format on the bus. Normally this would be XML, but Mule allows us to pass any data format around. public class LoanQuoteRequest implements Serializable { /** The request contains Customer info and loan amount and duration*/ private CustomerQuoteRequest customerRequest; /** credit profile for the customer */ private CreditProfile creditProfile; /** A list of lenders for this request */ private Bank[] lenders; /** A loan quote from a bank */ private LoanQuote loanQuote; ....... }
  • 20. Client Request • The whole chain of events is initiated with a client request. This is done over Http using Mule's REST support. It is described in the Endpoint address – jetty:rest://localhost:8080/loanbroker • Here we're saying - – Embed a Jetty Servlet Engine – Use the Rest servlet for receiving requests – Listen on localhost:8080 – Bind the Rest servlet to the context /loanbroker • The request from the client would look like – http://localhost:8080/loanbroker/?name=Ross+Mason&ssn=1234& loanAmount=10000&loanDuration=24
  • 21. The Message • The Loan Broker endpoint receives the request as a set of Http parameters, but we need to transform this into a CustomerQuoteRequest object before the Loan Broker component receives it. • We do this by configuring a custom transformer on the endpoint. public Object transform(Object src, UMOEventContext context) throws TransformerException { String name = context.getStringProperty("name"); int ssn = context.getIntProperty("ssn"); double amount = context.getDoubleProperty("loanAmount"); double duration = context.getDoubleProperty("loanDuration"); Customer customer = new Customer(name, ssn); CustomerQuoteRequest request = new CustomerQuoteRequest(customer, amount, duration); return request; }
  • 22. Loan Broker Service • The Loanbroker service actually doesn't need to do anything but trigger the LoanQuoteRequest on the bus. Mule handles all routing transformation and passing the quote back to the callee. • The transformer configured on the REST inbound endpoint for the LoanBroker converts the REST parameters into a CustomerQuoteRequest object. public class LoanBroker { public LoanQuoteRequest requestLoanQuote( CustomerQuoteRequest request) throws Exception { LoanQuoteRequest bqr = new LoanQuoteRequest(); bqr.setCustomerRequest(request); return bqr; } }
  • 23. Loan Broker Configuration All the detail is in the Loan Broker configuration. <mule-descriptor name="LoanBroker" implementation="org.mule.samples.loanbroker.esb.LoanBroker"> <inbound-router> <endpoint address="jetty:rest://localhost:8080/loanbroker"/> </inbound-router> <outbound-router> <router className="org.mule.routing.outbound.OutboundPassThroughRouter"> <endpoint address="jms://esb.credit.agency"/> </router> </outbound-router> <response-router timeout="10000"> <endpoint address="jms://esb.loan.quotes"/> <router className=" org.mule.samples.loanbroker.esb.routers.BankQuotesResponseAggregator"/> </response-router> </mule-descriptor>
  • 24. Credit Agency Gateway • The Credit Agency code is even easier! We use a standard Mule Component called a ReflectionMessageBuilder which builds a message based on a set of results from endpoint invocations. • It will use reflection to determine how to set the result of the last endpoint invocation as a property on the master message. • There are other MessageBuilder components such as the ScriptMessageBuilder component which is a JSR-223 (Scripting) component that allows you to manipulate the payload after each request using Groovy, JavaScript, Rhino or any other supported scripting language.
  • 25. Credit Agency Configuration <mule-descriptor name="CreditAgencyGateway" implementation="org.mule.components.builder.ReflectionMessageBuilder"> <inbound-router> <endpoint address="jms://credit.agency"/> </inbound-router> <outbound-router> <router className="org.mule.routing.outbound.FilteringRouter"> <endpoint address="ejb://localhost:1099/local/CreditAgency?method=getCreditProfile“ transformers=“LoanQuoteRequestToCreditProfileArgs” responseTransformers="CreditProfileXmlToCreditProfile“/> <properties> <list name="methodArgumentTypes"> <entry value="java.lang.String"/> <entry value="java.lang.String"/> </list> </properties> </endpoint> <endpoint address="jms://esb.lender.service"/> </router> </outbound-router> </mule-descriptor>
  • 26. Credit Agency Configuration • We invoke the CreditAgency application using an EJB endpoint – ejb://localhost:1099/local/CreditAgency?method=getCreditProfile • This endpoint tells Mule to – – Look up an EJB object at localhost:1099 – Use the JNDI name local/CreditAgency – Invoke the method getCreditProfile on the EJB object • Notice also the transformers and responseTransformers attibutes on the endpoint. These tell Mule how to marshal for the Application. – LoanQuoteRequestToCreditProfileArgs – Extracts the method arguments from the request as an array used to invoke getCreditProfile. – CreditProfileXmlToCreditProfile – Parses the response Xml and creates a CreditProfile object that will be set on the LoanQuoteRequest.
  • 27. Lender Gateway • Lender Service – The Lender Agency is a Mule component, that receives events directly using the VM transport. • Leander Gateway – The Lender Gateway marshals requests from the bus to the lender service.
  • 28. Lender Gateway Configuration Lender Service <mule-descriptor name="LenderService" implementation="org.mule.samples.loanbroker.esb.LenderService"> <inbound-router> <endpoint address="vm://lender.service"/> </inbound-router> </mule-descriptor> Lender Gatway <mule-descriptor name="LenderGateway” implementation="org.mule.components.simple.BridgeComponent"> <inbound-router> <endpoint address="jms://esb.lender.service"/> </inbound-router> <outbound-router> <router className="org.mule.routing.outbound.ChainingRouter"> <endpoint address="vm://lender.service"/> <endpoint address="jms://esb.banks"/> </router> </outbound-router> </mule-descriptor>
  • 29. Banking Gateway • The Banking Gateway is responsible for distributing requests to a list of lenders. • The ReciptientList router configured on this gateway is responsible for extracting the endpoints from the message and invoking them. The RecipientList is a type of Itinerary-based router that extracts its itinerary as a static list from the event. <mule-descriptor name="BankingGateway" implementation="org.mule.components.simple.BridgeComponent"> <inbound-router> <endpoint address="jms://esb.banks"/> </inbound-router> <outbound-router> <router className="org.mule.routing.outbound.StaticRecipientList"> <reply-to address="jms://esb.loan.quotes"/> </router> </outbound-router> </mule-descriptor>
  • 30. Banks • The banks in this example are just simple beans that return a fixed interest rate and are exposed as SOAP services. <mule-descriptor name="Bank1" inboundEndpoint="axis:http://localhost:10001/services" implementation="org.mule.samples.loanbroker.Bank"> </mule-descriptor> • Note to expose a component as an Axis service all you need to do is add an Axis endpoint!
  • 31. Choosing the best Quote • Once a back has a quote it passes it to Mule which will send the Quote on the reply-to endpoint specified by the Banking Gateway. • Looking back at the LoanBroker configuration, there is a response-router configured as - <response-router timeout="10000"> <endpoint address="jms://esb.loan.quotes"/> <router className="org.mule.samples.loanbroker.esb.routers. BankQuotesResponseAggregator"/> </response-router> • The BankQuoteResponseAggregator is responsible for picking the lowest quote. But before that happens Mule needs to make sure all responses are received for the request. • This is done using message correlation managed by Mule.
  • 32. Event Correlation • When a event is dispatched from the Banking Gateway a correlationId and correlationGroupSize is attached to the SOAP message. This is a function of the Recipient List router. It attaches the following information - – CorrelationId – and Id that associates all the dispatched events to the same group – CorrelationGroupSize – how many events are in the group. – CorrelationSequence – the order in which the events were dispatched. • The Response Router reads these correlation headers when events are received and correlates the events. • When the event group correlation is complete the response-router invokes itself where developers can plug in custom logic.
  • 33. Response Aggregation • The BankQuoteResponseAggregator implements a single method that works out the lowest quote before passing it back to Mule to route the response back to the client. protected UMOMessage aggregateEvents(EventGroup events) throws RoutingException { . . . . List list = events.getEvents(); for (Iterator iterator = list.iterator(); iterator.hasNext();) { event = (UMOEvent) iterator.next(); quote = (LoanQuote)event.getTransformedMessage(); logger.info("Processing quote: " + quote); if (lowestQuote == null) { lowestQuote = quote; } else if (quote.getInterestRate() < lowestQuote.getInterestRate()) { lowestQuote = quote; } } return new MuleMessage(lowestQuote, event.getProperties()); }
  • 34. Transports • Most Mule transports can be configured using just the endpoint address. i.e. tcp://localhost:45454 contains all the information necessary to make a TCP connection. • However for JMS and EJB we need to define configuration properties for each such as Jndi information. • This is done by configuring connectors in our MuleXml.
  • 35. Transport Configuration EJB Connector (OpenEJB – Local Server. See http://openejb.org) <connector name="ejbConnector" className="org.mule.providers.ejb.EjbConnector"> <properties> <property name="jndiInitialFactory" value="org.openejb.client.LocalInitialContextFactory"/> <property name="securityPolicy" value="security.policy"/> <map name="jndiProviderProperties"> <property name="openejb.base" value="."/> <property name="openejb.configuration" value="../conf/openejb.conf"/> </map> </properties> </connector> JMS Connector (ActiveMQ) <connector name="jmsConnector" className="org.mule.providers.jms.JmsConnector"> <properties> <property name="connectionFactoryJndiName" value="ConnectionFactory"/> <property name="jndiInitialFactory" value="org.activemq.jndi.ActiveMQInitialContextFactory"/> <property name="specification" value="1.1"/> </properties> </connector>
  • 36. Fault Tolerance • Exception Strategies – Can be defined on components and connectors – Can be defined globally of for each connector or component – Can handle different exception types differently. – Exception hierarchy provides all available information – Event payloads can be re-routed on exception • Connection Strategies – Control how connectors connect to underlying resources – Allow for flexible retry policies – Notifications of failed connections – Consistent endpoint state maintained – Can alter routing paths based on failed connections
  • 37. Scaling • SEDA Model – Mule is SEDA-based, which is an architecture designed for high concurrency and throughput. • JMS Clustering – Currently Mule can use JMS clustering to distribute events to a cluster of Mule Nodes. • Application Server Clustering – Mule can be embedded inside a JCA container and allow the App server to manage its resources and cluster instances. • New Clustering Support – The next release of Mule will provide clustering and distribution using JGroups/JBossCache. • Load Balancing using Mule – You can use a Mule instance to provide load-balancing over any transport.
  • 38. Summary • An ESB integrating a client application and 3 back office systems. • Combined a number of transports including HTTP, JMS, EJB and Web Services. • Easy to add in Exception handling, transactions, etc. All done through configuration. • All event routing, management, transformation is handled by Mule. • Very little code to write. Just domain-specific logic. • A fully functional ESB in about an hour!
  • 39. The Mule Project • Project was founded in 2003. • It was started after experiences with a large Financial ESB project. • There are now 10 developers who help support it and add new features. • Has an active user community. • Is being used in companies such as HP, Sony, Deutche Bank and CitiBank. • SymphonySoft has been started by Mule developers to help support and provide professional services to these projects. • For more information go to - http://mule.codehaus.org.
  • 40. Resources • EIP Book (Loan Broker Example) [1][2] – http://www.eaipatterns.com/ComposedMessagingExample.html – http://www.eaipatterns.com/index.html • Introduction to ESBs – Rick Robinson – http://www-106.ibm.com/developerworks/xml/library/ws-esbscen/ • ESB Learning Guide – http://searchwebservices.techtarget.com/general/1,295582,sid26_gci 1085711,00.html • Introduction to SEDA – Matt Welsh – http://www.eecs.harvard.edu/~mdw/papers/mdw-phdthesis.pdf • Mule User Guide – http://mule.codehaus.org/User+Guide
  • 41. Slides and Code • To get this Loan Broker ESB code and these slides go to - – http://mule.codehaus.org/LoanBroker • There are other examples too - – http://mule.codehaus.org/Examples