24
Introduction to ESBs: Mule

Mule esb introduction

Embed Size (px)

Citation preview

Introduction to ESBs:Mule

Agenda

• What is an ESB?• Java Business Integration (JBI)• Mule Architecture• Mule in the Real World

Source Material

• [Ric] Mark Richards, “The Role of the Enterprise Service Bus”, NFJS, Oct 23, 2006. http://www.infoq.com/presentations/Enterprise-Service-Bus

• [Mul] Mule Architecture Guide. http://mule.mulesource.org/display/MULE/Architecture+Guide

• September [mule-user archive]

Problems Addressed by ESBs• Integration of existing systems• Refactorable in real time• Flexibility to change as requirements change• Decentralized (service-location transparency)• Scalable (point solutions to full enterprise)• Sharing of services across enterprise• Ability to separate Business Services from

Service Implementations• Leverages standards

Definition(s)

Gartner Group

Giant exercise in Separation of Concerns

[Ric]

Definitions (more)

www.datapower.co

m

[Ric]

ESB Features

• Routing• Message Transformation• Message Enhancement• Protocol Transformation• Service Mapping

Message Processing Process Choreography Service Orchestration Transaction Management Security

[Ric]

An ESB Blueprint

General case

Client calls Choreographer Client calls Mediator

vs

[Ric]

Java Business Integration (JBI)• JSR-208 Standard• Defines service engines (SE – choreographers,

transformers, security, etc) and binding components (BC – xml, http, etc)

• Concerned with how internal customers (not external services) interact with service providers

COTS

[Ric]

JBI Example

• XSLT – message transformation• PXE – choreography• Groovy – scripting

[Ric]

JBI Case Study: Service Mix

Service Mix

Binding Components

Service Engines

[Ric]

Mule Architecture

[Mule]

Mule Flow View

• Channel – a method of connecting between two points (not part of Mule)

• Connector – a transport provider (e.g., http, jms, soap, smtp, etc) implementing message receive and message dispatch

• Transformer – converts message structure/format (e.g., http to xml)

• Router – moves messages amongst UMOs and connectors

[Mule]

Mule Connector View

http://myapp.com pop3://[email protected]→xml xml→pop3

myUMO (xml→xml)

[Mule]

Mule Transports

• AS400 DQ• EJB• E-mail• File• FTP• HTTP• IMAP• JDBC

JMS Multicast POP3 Quartz

RMI Servlet SMTP SOAP

SSL Stream TCP UDP VFS VM WSDL XMPP

UMO Execution

• Requires a component resolver (e.g., Spring or Pico) for– Instantiation of UMOs– Configuration of UMOs

• Event processing– Asynchronous– Synchronous– Request-Response

[Mule]

Mule Programming Model

Application logic

Application glue

Mule glue

[Mule]

Mule Routers

[Mule]

Selective Consumer (inbound)• Applies one or more filters to incoming payload, then

branch based on filter

<inbound-router>

<catch-all-strategy className="org.mule.routing.ForwardingCatchAllStrategy">

<endpoint address="jms://topic:error.topic"/></catch-all-strategy>

<router className="org.mule.routing.inbound.SelectiveConsumer">

<filter expression="msg/header/resultcode = 'success'"

className="org.mule.routing.filters.xml.JXPathFilter"/></router>

</inbound-router>

Filtering Outbound (outbound)<outbound-router>

<catch-all-strategy className="org.mule.routing.ForwardingCatchAllStrategy"><endpoint="jms://error.queue"/></catch-all-strategy>

<router className="org.mule.routing.outbound.FilteringOutboundRouter"><endpoint address="smtp://[email protected]"/><filter expectedType="java.lang.Exception"className="org.mule.routing.filters.PayloadTypeFilter"/></router>

<router className="org.mule.routing.outbound.FilteringOutboundRouter"><endpoint address="jms://string.queue"/><filter className="org.mule.routing.filters.logic.AndFilter"><left-filter expectedType="java.lang.String"className="org.mule.routing.filters.PayloadTypeFilter"/><right-filter pattern="the quick brown (.*)"className="org.mule.routing.filters.RegExFilter"/></filter></router>

</outbound-router>

Nested Router• Allows synchronous callouts that can be intercepted and routed

<mule-descriptor name="InvokerComponent" implementation="org.mule.foo.Invoker"><inbound-router>

<endpoint address="jms://Invoker.in"/></inbound-router>

<nested-router><binding interface="org.mule.foo.HelloInterface">

<endpoint address="axis:http://192.168.2.14:81/services/HelloWebComponent?method=helloMethod" remoteSync="true"/>

</binding></nested-router>

<outbound-router><router

className="org.mule.routing.outbound.OutboundPassThroughRouter"><endpoint address="jms://Invoker.out"/>

</router></outbound-router>

</mule-descriptor>

Dog Days with Mule

• September [mule-user archive]– How to get a hold of Endpoint object from the

component? {mule}– Failed to throw UserDefined Exception {jaxws}– Failed to invoke lifecycle “start” using CXF in JBOSS

{cxf}– Problem in loading xsd files {mule}– Problems with RemoteDispatcher {mule}– Inject MuleClient Singleton with Spring {mule}– Mule transaction support {mule}

ESB Features

• Routing• Message Transformation• Message Enhancement• Protocol Transformation• Service Mapping

Message Processing Process Choreography Service Orchestration Transaction Management Security

XX

√√√√

Take Away Messages• Mule’s generality results in great flexibility, but at the cost of

great complexity for users

• Mule is the focal point of ambiguity and difficulties with many standards-based packages

• Mule delivers (to a degree) on:– Integration, flexibility, decentralized operation, scalability

• Mule doesn’t deliver (so much) on:– Runtime refactoring, conceptualization