Introduction to ESBs: Mule UC San Diego CSE 294 November 14, 2008 Barry Demchak
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, [Mul] 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) [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 myUMO (xml→xml) [Mule]
Mule Transports AS400 DQ EJB 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 <filter expression="msg/header/resultcode = 'success'" className="org.mule.routing.filters.xml.JXPathFilter"/ >
Filtering Outbound (outbound) <filter expectedType="java.lang.Exception" className="org.mule.routing.filters.PayloadTypeFilter"/> <left-filter expectedType="java.lang.String" className="org.mule.routing.filters.PayloadTypeFilter"/> <right-filter pattern="the quick brown (.*)" className="org.mule.routing.filters.RegExFilter"/>
Nested Router Allows synchronous callouts that can be intercepted and routed
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 X X √ √ √ √ √
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