SlideShare a Scribd company logo
A workhorse named Mule




        
The speaker
   Mule in Action, co­author
   Project despot of Mule JCR Transport
       Common Retry Policies
       HTML Dashboard
   Mule Community Committee Member
   Lead of NxBRE
   Judge for the Jolt Awards
   And a few other stuff...
                       
Non­agenda
   eMule
   Mule pre 2.2.0, EE
   Tutorial
   Works on my machine
   Alternative configurations




                      
Agenda
   Introduction
   Exploration
   Construction
   In Action




                    
Introduction




       
What is Mule?



”Mule is a lightweight messaging framework and 
        highly distributable object broker”




                  
What? No ESB? No SOA?
   ESB is a deployment topology
       Mule can be deployed as ESB
       But also: ESN, Hub and spoke...
   SOA can leverage an ESB
       Just an extra tool in a tool box
       Mule has no dogma nor methodology

   More on this later...

                        
And what about Java?
   Written in Java
       Leverages zillions of Java open source 
        libraries
   Can do a lot without Java though
       XML and Groovy can go a long way




                       
Genesis
   Founded by Ross Mason
   SourceForge project created in April 2003
   Version 1.0 in April 2005
       Moved to CodeHaus
   Architecture based on:
       EIP
       SEDA


                      
EIP
   Enterprise Integration Patterns
       Hohpe & Woolf (2004)
   Gave Mule its lingo
       Endpoints, Transformers...
       Routers, Bridge...
   Gives us patterns & iconography




                    http://www.enterpriseintegrationpatterns.com
                         
SEDA
   Staged Event­Driven Architecture
       Welsh (2001)
   Disciplined approach to overload management
       Event­driven application
       Stages connected by queues
   Graceful degradation under load
   By default Mule is asynchronous and SEDA


                        
What's in a name?
”After  working  on  a  couple  of  bespoke  ESB 
systems,  I  found  that  there  was  a  lot  of 
infrastructure  work  to  be  done  before  you  can 
really start thinking about implementing any logic. 
I regard this infrastructure work as 'donkey work'
as  it  needs  doing  for  every  project.  I  preferred 
Mule over Donkey and Ass just didn't seem right.
A  Mule  is  also  commonly  referred  to  as  a  carrier 
of load, moving it form one place to another. The 
load  we  specialise  in  moving  is  your  enterprise 
information.”
                                                Ross Mason
Donkey work
              Integration


App 1          Broker       App 2




                App 3



           
Mule work
        Adaptation, Transformation & Routing


App 1                  Mule                    App 2




                       App 3



                    
Mule's dual nature




          
Mule's dual nature



”Mule is a lightweight messaging framework and 
        highly distributable object broker”




                  
Lightweight messaging 
          framework




                 Mule

                 Your
               Application




            
Highly distributable object broker


                 Mule




                 Mule




              
Dual competition
   Integration 
    frameworks
       Camel                ✔   Strictly EIP
       Spring Integration   ✔   DI oriented
   ESBs
       Apache, WSO2,        ✔   Web service 
        OW, JBoss                oriented
       Big vendors          ✔   Tooling
                                  ✔   Doodleware
                        
Dual offer
   Community Edition
       Stable “enough”
       Upgrades can be rocky
   Enterprise Edition
       Supported, stabler
       Enterprise features
                MQSeries connectors, retry policies
                Monitoring tool (MuleHQ)
                              
Key benefits I
   Proven product
       Used in many world­class applications
   Sound architecture
       Drastically refined in Mule 2
   Numerous protocols and extensions
       From MuleSource and MuleForge
   Spring & Maven oriented


                        
Key benefits II
   Good tooling
       Mule IDE
       Galaxy
   Active community
       Support, MuleForge
   Shared code base CE / EE
   Professional support available


                       
Main drawbacks
   Unified messaging abstraction
       Acts as a potential keyhole on the real deal
   Brings its own idiosyncrasies
       Like any framework...
   Standards based but not standards compliant
       But what standards? JBI? SCA?
       Not fully EIP but uses much of its lingo


                        
Exploration




      
”A messaging framework”
   Mule is about abstraction and adaptation
       Message
       Protocol
   As a framework
       You can code to it
                Wisely
       You can extend almost every aspect of it
                Wisely
                           
Message abstraction


        MuleMessage
          Payload
         Properties
         Attachment
         Exception




           
Message abstraction
   Payload
       HTTP body, File content
   Properties
       HTTP Headers, JMS properties
   Attachments
       SOAP parts, Email parts
   Exception
       Related to the current message processing
                       
Protocol abstraction
   Handled by ”transports”
       Connectors and endpoints
       Message adapters and transformers
   Inbound interactions
       Receive (event)
       Request (polling)
   Outbound interactions
       Send (request/response)
       Dispatch (asynchronous)
                       
Protocol adaptation
   At connector level
       Handles interactions 
   At message level
       Message adaptation
                Raw data access
       Specific additional transformation
                e.g. Object ↔ JMS Message transformers


                             
Protocol adaptation
                             Inbound

Protocol    Adaptation        Mule   Transformation    Mule
Specific                     Message                  Message




                          
Protocol adaptation
                        Outbound

 Mule   Transformation  Mule     Adaptation   Protocol
Message                Message                Specific




                     
Unified payloads?
   File transport
       Stream
       java.io.File
   JMS transport
       Map, String...
   IMAP transport
       String


                          
xmlns:context="http://www.springframework.org/schema/context"
      xmlns:file="http://www.mulesource.org/schema/mule/file/2.2"
      xmlns:jms="http://www.mulesource.org/schema/mule/jms/2.2"
      xmlns:xm="http://www.mulesource.org/schema/mule/xml/2.2"
      xsi:schemaLocation="
       http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/
spring-context-2.5.xsd
       http://www.mulesource.org/schema/mule/core/2.2
http://www.mulesource.org/schema/mule/core/2.2/mule.xsd
       http://www.mulesource.org/schema/mule/file/2.2
http://www.mulesource.org/schema/mule/file/2.2/mule-file.xsd
       http://www.mulesource.org/schema/mule/jms/2.2 http://www.mulesource.org/schema/mule/jms/2.2/
mule-jms.xsd
       http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/
mule-xml.xsd"
        >

   <notifications dynamic="true">
                                 Need help!
       <notification event="ENDPOINT-MESSAGE"/>
   </notifications>

   <global-property name="jms.url" value="vm://localhost"/>

   <jms:activemq-connector name="jmsConnector" specification="1.1" brokerURL="${jms.url}"/>

    <file:connector name="FileConnector"
                   streaming="false"
                   autoDelete="true"
                   pollingFrequency="1000">
       <file:expression-filename-parser/>
   </file:connector>

   <model name="jmsInboundModel">
       <service name="jmsInboundService">
           <inbound>
               <jms:inbound-endpoint topic="backup-reports" >
                   <transformers>
                       <jms:jmsmessage-to-object-transformer/>
                   </transformers>
               </jms:inbound-endpoint>
              
           </inbound>                  
Mule's anatomy




        
Mule's anatomy


     Service      Service

               Mule

     Service      Service




          
Mule service
   Wider definition than strict SOA
       Both inbound and outbound are considered
   Service can have business logic or not
       Message routing is done by services
   Role defined by messaging style
       Four main styles



                       
Request Response


                   Request
      Client                  Service
                   Response




                
Asynchronous


                 Dispatch
    Client                  Service




              
Synchronous


         Request                 Request
Client                 Service              Service
         Response                Response




                    
Async Request Response


         Request                  Dispatch

Client                  Service              Service

         Response                 Response




                     
Combined styles


         Request                 Dispatch
Client                 Service              Service
         Response




                    
Other inbound styles
                   Listen

      Source                 Service



                    Poll

      Source                 Service


                   Request

      Source                 Service


                
Mule's service anatomy



               Service
                 ?




            
Mule's service anatomy

Inbound                     Outbound




Routing         Component   Routing




Response




             
Mule's service routing anatomy

       Inbound                                         Outbound

                       Transformers




                                                               Transformers
  Endpoints




                                                                              Endpoints
              Router




                                                      Router
                                          Component




    Response




                                       
Endpoints
   Communication ”touch points”
   Configured
       Locally in services
                Inbound and outbound
       Globally
                Named
                “Unbound”
                Used locally in or out

                               
Endpoints
   Inbound
    <jms:inbound-endpoint topic="events" />
   Outbound
    <file:outbound-endpoint path="./events" />
   Global
    <jms:endpoint name="events.in" topic="events" />
    ...
    <inbound-endpoint ref="events.in" />


                      
Endpoints URI
   Two equivalent endpoints:
    <jms:inbound-endpoint topic="events" />

    <inbound-endpoint
                 address="jms://topic/events" />
   Prefer rich XML schema style
       Generic style exists for extensibility
   In code, URI style prevails


                         
Routers
   Routing behavior for endpoints
       Smart “switching” and filtering
       Aggregation, multicasting...
   Configured locally in services
   Different families
       Inbound
       Outbound
       Async­reply
                          
Routers
<inbound>
  <jms:inbound-endpoint topic="events" />
  <jdbc:inbound-endpoint
                        queryKey="eventsQuery"/>
</inbound>

<outbound>
  <multicasting-router>
    <jms:outbound-endpoint topic="events"/>
    <file:outbound-endpoint path="./events" />
  </multicasting-router>
<outbound>



                    
Transformers
   Message payload
       Generic
                Bytes to string, compression, XSLT...
       Transport
                JMS to object, String to email...
   Message properties
       CRUD
   Round trip alter egos

                               
Transformers
   Configured
       Locally on endpoints
                In / response and out
       Globally
                Named
                Used locally in or response
   Sometimes invisible (transport)
   Can be composed
       Rolling your own is rare
                              
Transformers
<xm:xslt-transformer name="DocbookToFO"
                     xsl-file="docbook-fo.xsl" />
...

<inbound-endpoint ref="docs.in.sync" >
  <transformers>
    <gzip-uncompress-transformer />
    <transformer ref="DocbookToFO" />
  </transformers>

  <response-transformers>
    <gzip-compress-transformer />
  </response-transformers>
</inbound-endpoint>

                    
Components
   Messaging behavior
       Bridge, Log
       Reflection message builder
       Remote service proxy
   Business behavior
       Instantiation by Mule or Spring
       Pure POJO or Mule aware
   Can be pooled
                        
Components
<log-component />

<test:component/>

<component>
  <singleton-object class="com.acme.Component" />
</component>

<component>
  <spring-object bean="yourBean" />
</component>

<pooled-component class="com.acme.Component" />


                     
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/
spring-context-2.5.xsd
       http://www.mulesource.org/schema/mule/core/2.2
http://www.mulesource.org/schema/mule/core/2.2/mule.xsd
       http://www.mulesource.org/schema/mule/file/2.2
http://www.mulesource.org/schema/mule/file/2.2/mule-file.xsd
       http://www.mulesource.org/schema/mule/jms/2.2 http://www.mulesource.org/schema/mule/jms/2.2/
mule-jms.xsd
       http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/
mule-xml.xsd"
        >

   <notifications dynamic="true">
       <notification event="ENDPOINT-MESSAGE"/>
   </notifications>




                                  Pwned!
   <global-property name="jms.url" value="vm://localhost"/>

   <jms:activemq-connector name="jmsConnector" specification="1.1" brokerURL="${jms.url}"/>

    <file:connector name="FileConnector"
                   streaming="false"
                   autoDelete="true"
                   pollingFrequency="1000">
       <file:expression-filename-parser/>
   </file:connector>

   <model name="jmsInboundModel">
       <service name="jmsInboundService">
           <inbound>
               <jms:inbound-endpoint topic="backup-reports" >
                   <transformers>
                       <jms:jmsmessage-to-object-transformer/>
                   </transformers>
               </jms:inbound-endpoint>
           </inbound>
           <outbound>
               <pass-through-router>
                   <file:outbound-endpoint path="./data/reports"
                                           outputPattern="BACKUP-REPORT-#[function:dateStamp]"/>
               </pass-through-router>  
Service configuration

<service name="eventsWriter">
  <inbound>
    <jms:inbound-endpoint topic="events" />
  </inbound>

  <outbound>
    <pass-through-router>
      <file:outbound-endpoint path="./events" />
    </pass-through-router>
  </outbound>
</service>



                    
Service configuration

<service name="eventsWriter">
  <inbound>
    <jms:inbound-endpoint topic="events" />
  </inbound>

 <bridge-component />

  <outbound>
    <pass-through-router>
      <file:outbound-endpoint path="./events" />
    </pass-through-router>
  </outbound>
</service>


                    
Anything else?
   Connectors
       Transport specific configuration
   Model
       Shared configuration & behavior for services
   Interceptors
       To add cross­cutting concerns around 
        components


                        
The mysterious Mule client




          
The mysterious Mule client
   Why a client?
   In­memory access to an instance
       Message generation
       Functional testing
   Remote access to an instance
       Proprietary remote invoker
   Raw transport usage


                        
Mule client interactions (some)
   Dispatch
    muleClient.dispatch("jms://queue", map, null);
   Send
    MuleMessage response =
     muleClient.send("vm://channel", payload, props);
   Request
    MuleMessage requested =
     muleClient.request("file://events/01.dat", 0);


                      
Construction




       
What do we build?
   Standalone                    Embedded
       Project structure             Java application
   NetBoot                           Web application
       Repository artifacts          EJB application
                                           JCA resource




                        
Just ship it!
   A Mule project is just a bunch of XML files
       Tinker with them a little
       Ship them to production
       And you are good to go!


       Right?



                         
     
No escape from SD laws!
   Practices
       Middleware development
       TDD
       Repeatable builds
       Repeatable deployments
   Tools
       SCM
       Continuous integration
                       
Middleware development 
                    practices
   Do not get coupled with the middleware
       Contain Mule related code to Mule aware 
        classes
                Transformers, interceptors
   Caching
   Time­outs
   Efficient logging and manageability


                              
Unit Testing
   For components, transformers...
   Outside of Mule
   xUnit




                       
Functional Testing
   For routing, configuration...
   Test­scoped instance
       Mule client
       Test component
       Substitution endpoints
       In­memory infrastructure
       Jitr


                       
Integration Testing
   For Mule instance in situation
   Complex because heterogeneous
       Test messages
       Test services
       Secondary endpoints
       soapUI, HermesJMS
   Test Driven EAI
       Hohpe & Istvanik (2002)
                                     http://bit.ly/tdeai
Other Testing
   Load tests
       Use JMeter
   Profiling
       Use the YourKit Profiler Pack




                       
Asynchronous testing challenge




            
Asynchronous testing (lucky)
             Test Thread   Mule Thread


              Start Mule

      Send test message
                           Process message
      Perform assertions


              Stop Mule




                      
Asynchronous testing
           Test Thread   Mule Thread


            Start Mule

    Send test message


    Perform assertions
                         Process message
            Stop Mule




                    
Asynchronous testing                    Fixed


           Test Thread    Mule Thread

            Start Mule

    Send test message
                          Process message
        Await latch (n)
                          Latch down
    Perform assertions

            Stop Mule



                                        http://bit.ly/tasync
Unleashing Mule




         
Unleashing Mule I
   Generic knowledge
       Maven
       Spring




                      
Maven
   Mule is available as a set of artifacts
       Core, transports, modules
       With petazillions of dependencies
       Distribution packs them all
   Specific archetypes
       New project
       New transport
       Galaxy publication
                         
Spring
   Code is independent from Spring
   Configuration is fully Spring XML
       With specific schemas
   Use Spring configuration practices
       DI, properties, multiple files...
   Use Spring goodness
       Specific elements,  MBean exporter...
   Mule's context can use a Spring parent
       Bean reuse
                         
Unleashing Mule II
   Specific knowledge
       VM Transport
       Transport configuration
       Expressions
       Scripting
       Entry point resolvers
       Notifications


                         
VM Transport
   In­memory named pipe
   Direct or queuing
   Can be disk persistent
   What you can not solve with one service
       You solve it with two services
       And a VM Queue in between!



                         
Transport configuration
   Know the underlying transport
       Understand what Mule hides & controls
   Learn the configuration options
       Including alternative adapters, transformers
   Leverage the transport­specific properties
       Inbound and outbound
   Read the source code


                        
Expressions
   Dynamic properties in configuration
       #[evaluator:expression]
       Filters, transformers, endpoint URIs
   Usually evaluated on the current message
       Standalone and Mule­wide evaluators exist
   Many evaluators available
       Groovy, XPath, Map Payload, OGNL...
   Can also be invoked from code

                        
<message-properties-transformer name="SetTo">
  <add-message-property key="toAddresses"
     value="#[xpath:/Receipts/SendToEmail]" />
</message-properties-transformer>

...

<smtp:outbound-endpoint
  host="${smtp.host}"
  port="${smtp.port}"
  from="${smtp.fromAddress}"
  subject="${smtp.subject}"
  transformer-refs="SetTo StringToEmailMessage" />




                    
Scripting
   Any JSR­223 engine
       Groovy bundled with the scripting module
       Rhino bundled with JDK 1.6
   Transformers, components, expressions
       Good for non­generic ones
       Concise syntax (i.e. non­Java)
       Inlined or standalone scripts
   Spring Scripted Beans are also an option
                        
<scripting:transformer name="toUpperCase">
  <scripting:script engine="groovy">
    return payload.toUpperCase()
  </scripting:script>
</scripting:transformer>

<scripting:component>
  <scripting:script engine="js">
    if (payload.search("STATUS: CRITICAL") != -1) {
      message.setProperty("PRIORITY", 'HIGH')
    }
    return message
  </scripting:script>
</scripting:component>

<expression-filter evaluator="groovy"
 expression="message.payloadAsBytes.length>1024" />


                    
Entry point resolvers
   Secret behind Mule­free components
   Locate the method to call
   Several resolvers available
       Reflection, array, no argument, method name
   By default, Mule uses a set of resolvers
   Add a transformation in front to better resolve
       By type or directly by name


                       
Notifications
   Internal notification framework
   Extreme diversity of events
       Mule lifecycle, routing, errors, time­outs...
   Standard consumers
       JMX, Log4J, publish to endpoint
   Custom consumers
       Components, interceptors...


                         
In Action




     
The tough questions




           
The tough questions
   SOAP or REST?           Monitoring
   Transactions            Auditing
   Exception handling      High availability
   Security                Hot reload
   Scheduling              Governance
   Orchestration           Performance



                     
SOAP or REST?
   SOAP transports          REST transports
       CXF                      Abdera
       Axis                     Jersey
                                 Restlet




                       
Transactions
   Supported by a handful of transports
       VM, JDBC, JMS
   Mostly useful for bridging
       Like Queue to Topic
   Consider eventual consistency
       Conversation based
       Idempotent services
       Compensation
                        
Exception handling
   Exceptions are handled at several levels
       Connector and service
       Retry policies
   Different strategies
       Logging, dispatch to endpoint
       Transaction roll­back
   Exception based outbound router
       Localized error handling via fallback
                          
Security
   Secure endpoints
       Authentication and authorization
   Secure payload
       Encryption
   Security manager
       Can delegate to Spring Security
       Can use JAAS
   Transport security handled at connector level
                        
Scheduling
   Based on Quartz
   In inbound router
       To regularly send a fix payload
       To request an endpoint (polling)
   In outbound router 
       To schedule a delayed dispatch



                         
Orchestration
   Trivial, short lived
       Message flow is the orchestration
                Component binding, chaining router
   Complex, long lived
       Messages trigger worflow steps
                jBPM (native)
       Orchestrator triggers services
                ActiveBPEL (via WS)

                              
Chaining router
<service name="WeatherDispatchService">
  <inbound>
    <inbound-endpoint ref="WeatherRequest" />
  </inbound>

  <outbound>
    <chaining-router>
      <outbound-endpoint ref="WeatherChannel" />
      <jms:outbound-endpoint queue="weather" />
    </chaining-router>
  </outbound>
</service>




                    
Monitoring
   Standard Java middleware
       Monitor JVM with SNMP or JMX
       Monitor Mule with JMX
       Monitor external channels
                Queues filling up, DB not refreshed...
   EE relies on MuleHQ
       Based on Hyperic


                              
Auditing
   Hard with distributed heterogeneous systems
   Watermark messages with correlation ID
       Standard with JMS
       Ad hoc with other transports
   Always log correlation ID with all messages
   Mule takes great care of correlation ID



                       
High availability
   Easily achieved with stateless instances
       Redundancy & network load balancer
   Clustering needed with stateful instances
       EE will offer GigaSpaces
       Terracotta
       DB, in some cases
                ID store for idempotent receiver


                              
Mythical hot reload
   Everybody wants it
       Really?
   Mule configuration can be hot reloaded
       Since 2.2.2
   Mule libraries are OSGi bundles
       But Mule is not (yet) running on OSGi



                       
Governance
   Publicly exposed services are commitments
   Required by compliance rules
   Galaxy
       Repository and registry
       Versioning
       Backwards compatibility check
       Galaxy EE is HA


                       
Governance EE




        
Performance




       
Performance I
   Beware benchmarks
   SEDA is tricky to tune
       Many thread pools
                Some not directly handled by Mule
   Threading 
       Configured with profiles
       Affected by transactions, synchrony
       Follow MuleSource's methodology
                             
Performance II
   Consider streaming
       Smooks for efficient processing
   Tune the transports
       HTTP chunking, JMS acking...
   Profile first!
       YourKit Profiler Pack



                         
The big picture




        
     
To ESB or not? I
   ESB in the middle of all service calls
       Looks good on slides
       But a big mess inside
   Remember Jim Webber
       “Guerilla SOA”
       ESB == “Egregious Spaghetti Boxes”



                                             http://bit.ly/g­soa
To ESB or not? II
   “A good ESB is a dead ESB”?
       Decision points: http://bit.ly/to­esb­or­not
   “MuleSource is Open for Integration.”
       Don't get confused on branding/naming
   ESB is a topology not a tool
       There are others...



                           
Topology
   ESB
         JMS backbone
   ESN
         Direct service to service
   Hub & Spoke
         Centralized broker
   Client / Server
   ...
                          
Methodology
   None officially preached by MuleSource
       But lots of experience with many clients
   Fits with the one in­house
       Nespresso Open Architecture (NesOA)
   Read MuleSource's articles
       To get the gist of their approach
       Pragmatism first!


                        
Bottom­up SOA
  ” I’ve seen firsthand that the more successful
  enterprises that have adopted SOA have done so
  at the grassroots level.

  (...) Certainly many of our customers choose Mule
  not on a strategic initiative, but because they have
  pockets of successful implementations and decide
  to work with us to help pull the pieces together.”



http://bit.ly/bup­soa
                                              Ross Mason
Time to hit it!




        
Getting started
   www.mulesource.org
       Download CE, browser user guide
   www.mulesource.com
       Professional support
   http://code.google.com/p/muleinaction/
       Mule in Action source code



                       
Going further
   Submit bug reports
   Improve the on­line documentation
   Contribute transports, modules, examples
       MuleForge
   Blog about your Mule adventure
       Let MuleSource know



                      
Books




     
Thank you!
   VIJUG
   Manning Publications
   VIJUG's sponsors

   ... and you!




                     
Questions?


    david@muleinaction.com

    http://muleinaction.com

       http://dossot.net




           

More Related Content

What's hot

Mule connectors
Mule  connectorsMule  connectors
Mule connectors
charan teja R
 
mulesoft at a glance
mulesoft at a glancemulesoft at a glance
mulesoft at a glance
Khasim Saheb
 
A Short Introduction of Mule ESB
A Short Introduction of Mule ESBA Short Introduction of Mule ESB
A Short Introduction of Mule ESB
Swapnil Sahu
 
Mule esb
Mule esbMule esb
Mule esb
charan teja R
 
Mule Fundamentals
Mule FundamentalsMule Fundamentals
Mule Fundamentals
Khasim Cise
 
Mule esb made system integration easy
Mule esb made system integration easy Mule esb made system integration easy
Mule esb made system integration easy
javeed_mhd
 
Mule technology
Mule technologyMule technology
Mule technology
Praneethchampion
 
Cloud hub architecture
Cloud hub architectureCloud hub architecture
Cloud hub architecture
Shanky Gupta
 
Mule ESB
Mule ESBMule ESB
Mule ESB
Rajkattamuri
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API Proxy
Vince Soliza
 
Mule connectors
Mule  connectorsMule  connectors
Mule connectors
D.Rajesh Kumar
 
Integration with Microsoft Azure using Mule ESB
Integration with Microsoft Azure using Mule ESBIntegration with Microsoft Azure using Mule ESB
Integration with Microsoft Azure using Mule ESB
Sanjeet Pandey
 
Mule in a nutshell
Mule in a nutshellMule in a nutshell
Mule in a nutshell
Ravinder Singh
 
Mule esb overview
Mule esb overviewMule esb overview
Mule esb overview
Swami Satish
 
Mule Esb
Mule EsbMule Esb
Mule Esb
javeed_mhd
 

What's hot (16)

Mule connectors
Mule  connectorsMule  connectors
Mule connectors
 
mulesoft at a glance
mulesoft at a glancemulesoft at a glance
mulesoft at a glance
 
A Short Introduction of Mule ESB
A Short Introduction of Mule ESBA Short Introduction of Mule ESB
A Short Introduction of Mule ESB
 
Mule esb
Mule esbMule esb
Mule esb
 
Mule Fundamentals
Mule FundamentalsMule Fundamentals
Mule Fundamentals
 
Mule esb made system integration easy
Mule esb made system integration easy Mule esb made system integration easy
Mule esb made system integration easy
 
Mule technology
Mule technologyMule technology
Mule technology
 
Cloud hub architecture
Cloud hub architectureCloud hub architecture
Cloud hub architecture
 
Mule
MuleMule
Mule
 
Mule ESB
Mule ESBMule ESB
Mule ESB
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API Proxy
 
Mule connectors
Mule  connectorsMule  connectors
Mule connectors
 
Integration with Microsoft Azure using Mule ESB
Integration with Microsoft Azure using Mule ESBIntegration with Microsoft Azure using Mule ESB
Integration with Microsoft Azure using Mule ESB
 
Mule in a nutshell
Mule in a nutshellMule in a nutshell
Mule in a nutshell
 
Mule esb overview
Mule esb overviewMule esb overview
Mule esb overview
 
Mule Esb
Mule EsbMule Esb
Mule Esb
 

Viewers also liked

OAuth 2.0 authentication
OAuth 2.0 authentication OAuth 2.0 authentication
OAuth 2.0 authentication
Shanky Gupta
 
Mule data weave_6
Mule data weave_6Mule data weave_6
Mule data weave_6
kunal vishe
 
Trans xml into_another_xml
Trans xml into_another_xmlTrans xml into_another_xml
Trans xml into_another_xml
Swati Deshpande
 
Anypoint mule main 3.7
Anypoint mule main 3.7Anypoint mule main 3.7
Anypoint mule main 3.7
Madhu Pk
 
Mule data weave_8
Mule data weave_8Mule data weave_8
Mule data weave_8
kunal vishe
 
OAuth 2.0 authorization
OAuth 2.0 authorization OAuth 2.0 authorization
OAuth 2.0 authorization
Shanky Gupta
 
Mule data weave_4
Mule data weave_4Mule data weave_4
Mule data weave_4
kunal vishe
 
Mule data weave_3
Mule data weave_3Mule data weave_3
Mule data weave_3
kunal vishe
 
Mule caching strategy with redis cache
Mule caching strategy with redis cacheMule caching strategy with redis cache
Mule caching strategy with redis cache
Priyobroto Ghosh (Mule ESB Certified)
 
Mule data weave_7
Mule data weave_7Mule data weave_7
Mule data weave_7
kunal vishe
 
Passing java arrays in oracle stored procedure from mule esb flow
Passing java arrays in oracle stored procedure from mule esb flowPassing java arrays in oracle stored procedure from mule esb flow
Passing java arrays in oracle stored procedure from mule esb flow
Priyobroto Ghosh (Mule ESB Certified)
 
Mule data weave_2
Mule data weave_2Mule data weave_2
Mule data weave_2
kunal vishe
 
RAML
RAMLRAML
Mule esb beginner’s guide
Mule esb beginner’s guideMule esb beginner’s guide
Mule esb beginner’s guide
D.Rajesh Kumar
 
Processing files sequentially in mule
Processing files sequentially in muleProcessing files sequentially in mule
Processing files sequentially in mule
Priyobroto Ghosh (Mule ESB Certified)
 
Introduction to dataweave
Introduction to dataweaveIntroduction to dataweave
Introduction to dataweave
Swati Deshpande
 
Variables in dataweave
Variables in dataweaveVariables in dataweave
Variables in dataweave
Swati Deshpande
 
Mule data weave_10
Mule data weave_10Mule data weave_10
Mule data weave_10
kunal vishe
 
Mule ESB - Consuming RESTful WS with RAML Definition
Mule ESB - Consuming RESTful WS with RAML DefinitionMule ESB - Consuming RESTful WS with RAML Definition
Mule ESB - Consuming RESTful WS with RAML Definition
Giuseppe De Michele
 

Viewers also liked (20)

Mule 2.2.1-users-guide
Mule 2.2.1-users-guideMule 2.2.1-users-guide
Mule 2.2.1-users-guide
 
OAuth 2.0 authentication
OAuth 2.0 authentication OAuth 2.0 authentication
OAuth 2.0 authentication
 
Mule data weave_6
Mule data weave_6Mule data weave_6
Mule data weave_6
 
Trans xml into_another_xml
Trans xml into_another_xmlTrans xml into_another_xml
Trans xml into_another_xml
 
Anypoint mule main 3.7
Anypoint mule main 3.7Anypoint mule main 3.7
Anypoint mule main 3.7
 
Mule data weave_8
Mule data weave_8Mule data weave_8
Mule data weave_8
 
OAuth 2.0 authorization
OAuth 2.0 authorization OAuth 2.0 authorization
OAuth 2.0 authorization
 
Mule data weave_4
Mule data weave_4Mule data weave_4
Mule data weave_4
 
Mule data weave_3
Mule data weave_3Mule data weave_3
Mule data weave_3
 
Mule caching strategy with redis cache
Mule caching strategy with redis cacheMule caching strategy with redis cache
Mule caching strategy with redis cache
 
Mule data weave_7
Mule data weave_7Mule data weave_7
Mule data weave_7
 
Passing java arrays in oracle stored procedure from mule esb flow
Passing java arrays in oracle stored procedure from mule esb flowPassing java arrays in oracle stored procedure from mule esb flow
Passing java arrays in oracle stored procedure from mule esb flow
 
Mule data weave_2
Mule data weave_2Mule data weave_2
Mule data weave_2
 
RAML
RAMLRAML
RAML
 
Mule esb beginner’s guide
Mule esb beginner’s guideMule esb beginner’s guide
Mule esb beginner’s guide
 
Processing files sequentially in mule
Processing files sequentially in muleProcessing files sequentially in mule
Processing files sequentially in mule
 
Introduction to dataweave
Introduction to dataweaveIntroduction to dataweave
Introduction to dataweave
 
Variables in dataweave
Variables in dataweaveVariables in dataweave
Variables in dataweave
 
Mule data weave_10
Mule data weave_10Mule data weave_10
Mule data weave_10
 
Mule ESB - Consuming RESTful WS with RAML Definition
Mule ESB - Consuming RESTful WS with RAML DefinitionMule ESB - Consuming RESTful WS with RAML Definition
Mule ESB - Consuming RESTful WS with RAML Definition
 

Similar to A Workhorse Named Mule

ESB and SOA
ESB and SOAESB and SOA
ESB and SOA
WSO2
 
The Middleware technology that connects the enterprise
The Middleware technology that connects the enterpriseThe Middleware technology that connects the enterprise
The Middleware technology that connects the enterprise
Kasun Indrasiri
 
Django è pronto per l'Enterprise
Django è pronto per l'EnterpriseDjango è pronto per l'Enterprise
Django è pronto per l'Enterprise
PyCon Italia
 
Mule esb
Mule esbMule esb
Mule esb
chetan singhal
 
Understanding the WSO2 Platform and Technology
Understanding the WSO2 Platform and TechnologyUnderstanding the WSO2 Platform and Technology
Understanding the WSO2 Platform and TechnologyWSO2
 
What is Mule ESB
What is Mule ESB What is Mule ESB
What is Mule ESB
Nam Le Dinh
 
Soaosbcourse_content
Soaosbcourse_contentSoaosbcourse_content
Soaosbcourse_content
XAVIERCONSULTANTS
 
SOA Summer School: Best of SOA Summer School – Encore Session
SOA Summer School: Best of SOA Summer School – Encore Session SOA Summer School: Best of SOA Summer School – Encore Session
SOA Summer School: Best of SOA Summer School – Encore Session
WSO2
 
Ss Wrap Up Session 13 Aug
Ss Wrap Up Session 13 AugSs Wrap Up Session 13 Aug
Ss Wrap Up Session 13 AugWSO2
 
Microservices in a Streaming World
Microservices in a Streaming WorldMicroservices in a Streaming World
Microservices in a Streaming World
Hans Jespersen
 
Enterprise Use Case - Selecting an Enterprise Service Bus
Enterprise Use Case - Selecting an Enterprise Service Bus Enterprise Use Case - Selecting an Enterprise Service Bus
Enterprise Use Case - Selecting an Enterprise Service Bus WSO2
 
Mule fundamentals muthu guru rathinesh g
Mule fundamentals muthu guru rathinesh gMule fundamentals muthu guru rathinesh g
Mule fundamentals muthu guru rathinesh g
Muthu Guru Rathinesh G
 
Mule soft ppt
Mule soft pptMule soft ppt
Mule soft ppt
Vinoth Moorthy
 
Mule esb usecase
Mule esb usecaseMule esb usecase
Mule esb usecase
charan teja R
 
Jimwebber soa
Jimwebber soaJimwebber soa
Jimwebber soad0nn9n
 
Mule and web services
Mule and web servicesMule and web services
Mule and web services
Manav Prasad
 
Service Oriented Development With Windows Communication Foundation 2003
Service Oriented Development With Windows Communication Foundation 2003Service Oriented Development With Windows Communication Foundation 2003
Service Oriented Development With Windows Communication Foundation 2003
Jason Townsend, MBA
 

Similar to A Workhorse Named Mule (20)

Riding with camel
Riding with camelRiding with camel
Riding with camel
 
ESB and SOA
ESB and SOAESB and SOA
ESB and SOA
 
Soa limitations
Soa limitationsSoa limitations
Soa limitations
 
The Middleware technology that connects the enterprise
The Middleware technology that connects the enterpriseThe Middleware technology that connects the enterprise
The Middleware technology that connects the enterprise
 
Django è pronto per l'Enterprise
Django è pronto per l'EnterpriseDjango è pronto per l'Enterprise
Django è pronto per l'Enterprise
 
Mule esb
Mule esbMule esb
Mule esb
 
Understanding the WSO2 Platform and Technology
Understanding the WSO2 Platform and TechnologyUnderstanding the WSO2 Platform and Technology
Understanding the WSO2 Platform and Technology
 
What is Mule ESB
What is Mule ESB What is Mule ESB
What is Mule ESB
 
Soaosbcourse_content
Soaosbcourse_contentSoaosbcourse_content
Soaosbcourse_content
 
Wso2 tutorial
Wso2 tutorialWso2 tutorial
Wso2 tutorial
 
SOA Summer School: Best of SOA Summer School – Encore Session
SOA Summer School: Best of SOA Summer School – Encore Session SOA Summer School: Best of SOA Summer School – Encore Session
SOA Summer School: Best of SOA Summer School – Encore Session
 
Ss Wrap Up Session 13 Aug
Ss Wrap Up Session 13 AugSs Wrap Up Session 13 Aug
Ss Wrap Up Session 13 Aug
 
Microservices in a Streaming World
Microservices in a Streaming WorldMicroservices in a Streaming World
Microservices in a Streaming World
 
Enterprise Use Case - Selecting an Enterprise Service Bus
Enterprise Use Case - Selecting an Enterprise Service Bus Enterprise Use Case - Selecting an Enterprise Service Bus
Enterprise Use Case - Selecting an Enterprise Service Bus
 
Mule fundamentals muthu guru rathinesh g
Mule fundamentals muthu guru rathinesh gMule fundamentals muthu guru rathinesh g
Mule fundamentals muthu guru rathinesh g
 
Mule soft ppt
Mule soft pptMule soft ppt
Mule soft ppt
 
Mule esb usecase
Mule esb usecaseMule esb usecase
Mule esb usecase
 
Jimwebber soa
Jimwebber soaJimwebber soa
Jimwebber soa
 
Mule and web services
Mule and web servicesMule and web services
Mule and web services
 
Service Oriented Development With Windows Communication Foundation 2003
Service Oriented Development With Windows Communication Foundation 2003Service Oriented Development With Windows Communication Foundation 2003
Service Oriented Development With Windows Communication Foundation 2003
 

Recently uploaded

Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 

Recently uploaded (20)

Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 

A Workhorse Named Mule

  • 2. The speaker  Mule in Action, co­author  Project despot of Mule JCR Transport  Common Retry Policies  HTML Dashboard  Mule Community Committee Member  Lead of NxBRE  Judge for the Jolt Awards  And a few other stuff...    
  • 3. Non­agenda  eMule  Mule pre 2.2.0, EE  Tutorial  Works on my machine  Alternative configurations    
  • 4. Agenda  Introduction  Exploration  Construction  In Action    
  • 6. What is Mule? ”Mule is a lightweight messaging framework and  highly distributable object broker”    
  • 7. What? No ESB? No SOA?  ESB is a deployment topology  Mule can be deployed as ESB  But also: ESN, Hub and spoke...  SOA can leverage an ESB  Just an extra tool in a tool box  Mule has no dogma nor methodology  More on this later...    
  • 8. And what about Java?  Written in Java  Leverages zillions of Java open source  libraries  Can do a lot without Java though  XML and Groovy can go a long way    
  • 9. Genesis  Founded by Ross Mason  SourceForge project created in April 2003  Version 1.0 in April 2005  Moved to CodeHaus  Architecture based on:  EIP  SEDA    
  • 10. EIP  Enterprise Integration Patterns  Hohpe & Woolf (2004)  Gave Mule its lingo  Endpoints, Transformers...  Routers, Bridge...  Gives us patterns & iconography   http://www.enterpriseintegrationpatterns.com  
  • 11. SEDA  Staged Event­Driven Architecture  Welsh (2001)  Disciplined approach to overload management  Event­driven application  Stages connected by queues  Graceful degradation under load  By default Mule is asynchronous and SEDA    
  • 12. What's in a name? ”After  working  on  a  couple  of  bespoke  ESB  systems,  I  found  that  there  was  a  lot  of  infrastructure  work  to  be  done  before  you  can  really start thinking about implementing any logic.  I regard this infrastructure work as 'donkey work' as  it  needs  doing  for  every  project.  I  preferred  Mule over Donkey and Ass just didn't seem right. A  Mule  is  also  commonly  referred  to  as  a  carrier  of load, moving it form one place to another. The  load  we  specialise  in  moving  is  your  enterprise  information.”     Ross Mason
  • 13. Donkey work Integration App 1 Broker App 2 App 3    
  • 14. Mule work Adaptation, Transformation & Routing App 1 Mule App 2 App 3    
  • 17. Lightweight messaging  framework Mule Your Application    
  • 19. Dual competition  Integration  frameworks  Camel ✔ Strictly EIP  Spring Integration ✔ DI oriented  ESBs  Apache, WSO2,  ✔ Web service  OW, JBoss oriented  Big vendors ✔ Tooling ✔ Doodleware    
  • 20. Dual offer  Community Edition  Stable “enough”  Upgrades can be rocky  Enterprise Edition  Supported, stabler  Enterprise features  MQSeries connectors, retry policies  Monitoring tool (MuleHQ)    
  • 21. Key benefits I  Proven product  Used in many world­class applications  Sound architecture  Drastically refined in Mule 2  Numerous protocols and extensions  From MuleSource and MuleForge  Spring & Maven oriented    
  • 22. Key benefits II  Good tooling  Mule IDE  Galaxy  Active community  Support, MuleForge  Shared code base CE / EE  Professional support available    
  • 23. Main drawbacks  Unified messaging abstraction  Acts as a potential keyhole on the real deal  Brings its own idiosyncrasies  Like any framework...  Standards based but not standards compliant  But what standards? JBI? SCA?  Not fully EIP but uses much of its lingo    
  • 25. ”A messaging framework”  Mule is about abstraction and adaptation  Message  Protocol  As a framework  You can code to it  Wisely  You can extend almost every aspect of it  Wisely    
  • 26. Message abstraction MuleMessage Payload Properties Attachment Exception    
  • 27. Message abstraction  Payload  HTTP body, File content  Properties  HTTP Headers, JMS properties  Attachments  SOAP parts, Email parts  Exception  Related to the current message processing    
  • 28. Protocol abstraction  Handled by ”transports”  Connectors and endpoints  Message adapters and transformers  Inbound interactions  Receive (event)  Request (polling)  Outbound interactions  Send (request/response)  Dispatch (asynchronous)    
  • 29. Protocol adaptation  At connector level  Handles interactions   At message level  Message adaptation  Raw data access  Specific additional transformation  e.g. Object ↔ JMS Message transformers    
  • 30. Protocol adaptation Inbound Protocol Adaptation Mule Transformation Mule Specific Message Message    
  • 31. Protocol adaptation Outbound Mule Transformation Mule Adaptation Protocol Message Message Specific    
  • 32. Unified payloads?  File transport  Stream  java.io.File  JMS transport  Map, String...  IMAP transport  String    
  • 33. xmlns:context="http://www.springframework.org/schema/context" xmlns:file="http://www.mulesource.org/schema/mule/file/2.2" xmlns:jms="http://www.mulesource.org/schema/mule/jms/2.2" xmlns:xm="http://www.mulesource.org/schema/mule/xml/2.2" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/ spring-context-2.5.xsd http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd http://www.mulesource.org/schema/mule/file/2.2 http://www.mulesource.org/schema/mule/file/2.2/mule-file.xsd http://www.mulesource.org/schema/mule/jms/2.2 http://www.mulesource.org/schema/mule/jms/2.2/ mule-jms.xsd http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/ mule-xml.xsd" > <notifications dynamic="true"> Need help! <notification event="ENDPOINT-MESSAGE"/> </notifications> <global-property name="jms.url" value="vm://localhost"/> <jms:activemq-connector name="jmsConnector" specification="1.1" brokerURL="${jms.url}"/> <file:connector name="FileConnector" streaming="false" autoDelete="true" pollingFrequency="1000"> <file:expression-filename-parser/> </file:connector> <model name="jmsInboundModel"> <service name="jmsInboundService"> <inbound> <jms:inbound-endpoint topic="backup-reports" > <transformers> <jms:jmsmessage-to-object-transformer/> </transformers> </jms:inbound-endpoint>   </inbound>  
  • 35. Mule's anatomy Service Service Mule Service Service    
  • 36. Mule service  Wider definition than strict SOA  Both inbound and outbound are considered  Service can have business logic or not  Message routing is done by services  Role defined by messaging style  Four main styles    
  • 37. Request Response Request Client Service Response    
  • 38. Asynchronous Dispatch Client Service    
  • 39. Synchronous Request Request Client Service Service Response Response    
  • 40. Async Request Response Request Dispatch Client Service Service Response Response    
  • 41. Combined styles Request Dispatch Client Service Service Response    
  • 42. Other inbound styles Listen Source Service Poll Source Service Request Source Service    
  • 43. Mule's service anatomy Service ?    
  • 44. Mule's service anatomy Inbound Outbound Routing Component Routing Response    
  • 45. Mule's service routing anatomy Inbound Outbound Transformers Transformers Endpoints Endpoints Router Router Component Response    
  • 46. Endpoints  Communication ”touch points”  Configured  Locally in services  Inbound and outbound  Globally  Named  “Unbound”  Used locally in or out    
  • 47. Endpoints  Inbound <jms:inbound-endpoint topic="events" />  Outbound <file:outbound-endpoint path="./events" />  Global <jms:endpoint name="events.in" topic="events" /> ... <inbound-endpoint ref="events.in" />    
  • 48. Endpoints URI  Two equivalent endpoints: <jms:inbound-endpoint topic="events" /> <inbound-endpoint address="jms://topic/events" />  Prefer rich XML schema style  Generic style exists for extensibility  In code, URI style prevails    
  • 49. Routers  Routing behavior for endpoints  Smart “switching” and filtering  Aggregation, multicasting...  Configured locally in services  Different families  Inbound  Outbound  Async­reply    
  • 50. Routers <inbound> <jms:inbound-endpoint topic="events" /> <jdbc:inbound-endpoint queryKey="eventsQuery"/> </inbound> <outbound> <multicasting-router> <jms:outbound-endpoint topic="events"/> <file:outbound-endpoint path="./events" /> </multicasting-router> <outbound>    
  • 51. Transformers  Message payload  Generic  Bytes to string, compression, XSLT...  Transport  JMS to object, String to email...  Message properties  CRUD  Round trip alter egos    
  • 52. Transformers  Configured  Locally on endpoints  In / response and out  Globally  Named  Used locally in or response  Sometimes invisible (transport)  Can be composed  Rolling your own is rare    
  • 53. Transformers <xm:xslt-transformer name="DocbookToFO" xsl-file="docbook-fo.xsl" /> ... <inbound-endpoint ref="docs.in.sync" > <transformers> <gzip-uncompress-transformer /> <transformer ref="DocbookToFO" /> </transformers> <response-transformers> <gzip-compress-transformer /> </response-transformers> </inbound-endpoint>    
  • 54. Components  Messaging behavior  Bridge, Log  Reflection message builder  Remote service proxy  Business behavior  Instantiation by Mule or Spring  Pure POJO or Mule aware  Can be pooled    
  • 55. Components <log-component /> <test:component/> <component> <singleton-object class="com.acme.Component" /> </component> <component> <spring-object bean="yourBean" /> </component> <pooled-component class="com.acme.Component" />    
  • 56. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/ spring-context-2.5.xsd http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd http://www.mulesource.org/schema/mule/file/2.2 http://www.mulesource.org/schema/mule/file/2.2/mule-file.xsd http://www.mulesource.org/schema/mule/jms/2.2 http://www.mulesource.org/schema/mule/jms/2.2/ mule-jms.xsd http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/ mule-xml.xsd" > <notifications dynamic="true"> <notification event="ENDPOINT-MESSAGE"/> </notifications> Pwned! <global-property name="jms.url" value="vm://localhost"/> <jms:activemq-connector name="jmsConnector" specification="1.1" brokerURL="${jms.url}"/> <file:connector name="FileConnector" streaming="false" autoDelete="true" pollingFrequency="1000"> <file:expression-filename-parser/> </file:connector> <model name="jmsInboundModel"> <service name="jmsInboundService"> <inbound> <jms:inbound-endpoint topic="backup-reports" > <transformers> <jms:jmsmessage-to-object-transformer/> </transformers> </jms:inbound-endpoint> </inbound> <outbound> <pass-through-router> <file:outbound-endpoint path="./data/reports" outputPattern="BACKUP-REPORT-#[function:dateStamp]"/>   </pass-through-router>  
  • 57. Service configuration <service name="eventsWriter"> <inbound> <jms:inbound-endpoint topic="events" /> </inbound> <outbound> <pass-through-router> <file:outbound-endpoint path="./events" /> </pass-through-router> </outbound> </service>    
  • 58. Service configuration <service name="eventsWriter"> <inbound> <jms:inbound-endpoint topic="events" /> </inbound> <bridge-component /> <outbound> <pass-through-router> <file:outbound-endpoint path="./events" /> </pass-through-router> </outbound> </service>    
  • 59. Anything else?  Connectors  Transport specific configuration  Model  Shared configuration & behavior for services  Interceptors  To add cross­cutting concerns around  components    
  • 61. The mysterious Mule client  Why a client?  In­memory access to an instance  Message generation  Functional testing  Remote access to an instance  Proprietary remote invoker  Raw transport usage    
  • 62. Mule client interactions (some)  Dispatch muleClient.dispatch("jms://queue", map, null);  Send MuleMessage response = muleClient.send("vm://channel", payload, props);  Request MuleMessage requested = muleClient.request("file://events/01.dat", 0);    
  • 64. What do we build?  Standalone  Embedded  Project structure  Java application  NetBoot  Web application  Repository artifacts  EJB application  JCA resource    
  • 65. Just ship it!  A Mule project is just a bunch of XML files  Tinker with them a little  Ship them to production  And you are good to go!  Right?    
  • 66.    
  • 67. No escape from SD laws!  Practices  Middleware development  TDD  Repeatable builds  Repeatable deployments  Tools  SCM  Continuous integration    
  • 68. Middleware development  practices  Do not get coupled with the middleware  Contain Mule related code to Mule aware  classes  Transformers, interceptors  Caching  Time­outs  Efficient logging and manageability    
  • 69. Unit Testing  For components, transformers...  Outside of Mule  xUnit    
  • 70. Functional Testing  For routing, configuration...  Test­scoped instance  Mule client  Test component  Substitution endpoints  In­memory infrastructure  Jitr    
  • 71. Integration Testing  For Mule instance in situation  Complex because heterogeneous  Test messages  Test services  Secondary endpoints  soapUI, HermesJMS  Test Driven EAI  Hohpe & Istvanik (2002)     http://bit.ly/tdeai
  • 72. Other Testing  Load tests  Use JMeter  Profiling  Use the YourKit Profiler Pack    
  • 74. Asynchronous testing (lucky) Test Thread Mule Thread Start Mule Send test message Process message Perform assertions Stop Mule    
  • 75. Asynchronous testing Test Thread Mule Thread Start Mule Send test message Perform assertions Process message Stop Mule    
  • 76. Asynchronous testing Fixed Test Thread Mule Thread Start Mule Send test message Process message Await latch (n) Latch down Perform assertions Stop Mule     http://bit.ly/tasync
  • 78. Unleashing Mule I  Generic knowledge  Maven  Spring    
  • 79. Maven  Mule is available as a set of artifacts  Core, transports, modules  With petazillions of dependencies  Distribution packs them all  Specific archetypes  New project  New transport  Galaxy publication    
  • 80. Spring  Code is independent from Spring  Configuration is fully Spring XML  With specific schemas  Use Spring configuration practices  DI, properties, multiple files...  Use Spring goodness  Specific elements,  MBean exporter...  Mule's context can use a Spring parent  Bean reuse    
  • 81. Unleashing Mule II  Specific knowledge  VM Transport  Transport configuration  Expressions  Scripting  Entry point resolvers  Notifications    
  • 82. VM Transport  In­memory named pipe  Direct or queuing  Can be disk persistent  What you can not solve with one service  You solve it with two services  And a VM Queue in between!    
  • 83. Transport configuration  Know the underlying transport  Understand what Mule hides & controls  Learn the configuration options  Including alternative adapters, transformers  Leverage the transport­specific properties  Inbound and outbound  Read the source code    
  • 84. Expressions  Dynamic properties in configuration  #[evaluator:expression]  Filters, transformers, endpoint URIs  Usually evaluated on the current message  Standalone and Mule­wide evaluators exist  Many evaluators available  Groovy, XPath, Map Payload, OGNL...  Can also be invoked from code    
  • 85. <message-properties-transformer name="SetTo"> <add-message-property key="toAddresses" value="#[xpath:/Receipts/SendToEmail]" /> </message-properties-transformer> ... <smtp:outbound-endpoint host="${smtp.host}" port="${smtp.port}" from="${smtp.fromAddress}" subject="${smtp.subject}" transformer-refs="SetTo StringToEmailMessage" />    
  • 86. Scripting  Any JSR­223 engine  Groovy bundled with the scripting module  Rhino bundled with JDK 1.6  Transformers, components, expressions  Good for non­generic ones  Concise syntax (i.e. non­Java)  Inlined or standalone scripts  Spring Scripted Beans are also an option    
  • 87. <scripting:transformer name="toUpperCase"> <scripting:script engine="groovy"> return payload.toUpperCase() </scripting:script> </scripting:transformer> <scripting:component> <scripting:script engine="js"> if (payload.search("STATUS: CRITICAL") != -1) { message.setProperty("PRIORITY", 'HIGH') } return message </scripting:script> </scripting:component> <expression-filter evaluator="groovy" expression="message.payloadAsBytes.length>1024" />    
  • 88. Entry point resolvers  Secret behind Mule­free components  Locate the method to call  Several resolvers available  Reflection, array, no argument, method name  By default, Mule uses a set of resolvers  Add a transformation in front to better resolve  By type or directly by name    
  • 89. Notifications  Internal notification framework  Extreme diversity of events  Mule lifecycle, routing, errors, time­outs...  Standard consumers  JMX, Log4J, publish to endpoint  Custom consumers  Components, interceptors...    
  • 92. The tough questions  SOAP or REST?  Monitoring  Transactions  Auditing  Exception handling  High availability  Security  Hot reload  Scheduling  Governance  Orchestration  Performance    
  • 93. SOAP or REST?  SOAP transports  REST transports  CXF  Abdera  Axis  Jersey  Restlet    
  • 94. Transactions  Supported by a handful of transports  VM, JDBC, JMS  Mostly useful for bridging  Like Queue to Topic  Consider eventual consistency  Conversation based  Idempotent services  Compensation    
  • 95. Exception handling  Exceptions are handled at several levels  Connector and service  Retry policies  Different strategies  Logging, dispatch to endpoint  Transaction roll­back  Exception based outbound router  Localized error handling via fallback    
  • 96. Security  Secure endpoints  Authentication and authorization  Secure payload  Encryption  Security manager  Can delegate to Spring Security  Can use JAAS  Transport security handled at connector level    
  • 97. Scheduling  Based on Quartz  In inbound router  To regularly send a fix payload  To request an endpoint (polling)  In outbound router   To schedule a delayed dispatch    
  • 98. Orchestration  Trivial, short lived  Message flow is the orchestration  Component binding, chaining router  Complex, long lived  Messages trigger worflow steps  jBPM (native)  Orchestrator triggers services  ActiveBPEL (via WS)    
  • 99. Chaining router <service name="WeatherDispatchService"> <inbound> <inbound-endpoint ref="WeatherRequest" /> </inbound> <outbound> <chaining-router> <outbound-endpoint ref="WeatherChannel" /> <jms:outbound-endpoint queue="weather" /> </chaining-router> </outbound> </service>    
  • 100. Monitoring  Standard Java middleware  Monitor JVM with SNMP or JMX  Monitor Mule with JMX  Monitor external channels  Queues filling up, DB not refreshed...  EE relies on MuleHQ  Based on Hyperic    
  • 101. Auditing  Hard with distributed heterogeneous systems  Watermark messages with correlation ID  Standard with JMS  Ad hoc with other transports  Always log correlation ID with all messages  Mule takes great care of correlation ID    
  • 102. High availability  Easily achieved with stateless instances  Redundancy & network load balancer  Clustering needed with stateful instances  EE will offer GigaSpaces  Terracotta  DB, in some cases  ID store for idempotent receiver    
  • 103. Mythical hot reload  Everybody wants it  Really?  Mule configuration can be hot reloaded  Since 2.2.2  Mule libraries are OSGi bundles  But Mule is not (yet) running on OSGi    
  • 104. Governance  Publicly exposed services are commitments  Required by compliance rules  Galaxy  Repository and registry  Versioning  Backwards compatibility check  Galaxy EE is HA    
  • 107. Performance I  Beware benchmarks  SEDA is tricky to tune  Many thread pools  Some not directly handled by Mule  Threading   Configured with profiles  Affected by transactions, synchrony  Follow MuleSource's methodology    
  • 108. Performance II  Consider streaming  Smooks for efficient processing  Tune the transports  HTTP chunking, JMS acking...  Profile first!  YourKit Profiler Pack    
  • 110.    
  • 111. To ESB or not? I  ESB in the middle of all service calls  Looks good on slides  But a big mess inside  Remember Jim Webber  “Guerilla SOA”  ESB == “Egregious Spaghetti Boxes”     http://bit.ly/g­soa
  • 112. To ESB or not? II  “A good ESB is a dead ESB”?  Decision points: http://bit.ly/to­esb­or­not  “MuleSource is Open for Integration.”  Don't get confused on branding/naming  ESB is a topology not a tool  There are others...    
  • 113. Topology  ESB  JMS backbone  ESN  Direct service to service  Hub & Spoke  Centralized broker  Client / Server  ...    
  • 114. Methodology  None officially preached by MuleSource  But lots of experience with many clients  Fits with the one in­house  Nespresso Open Architecture (NesOA)  Read MuleSource's articles  To get the gist of their approach  Pragmatism first!    
  • 115. Bottom­up SOA ” I’ve seen firsthand that the more successful enterprises that have adopted SOA have done so at the grassroots level. (...) Certainly many of our customers choose Mule not on a strategic initiative, but because they have pockets of successful implementations and decide to work with us to help pull the pieces together.” http://bit.ly/bup­soa     Ross Mason
  • 117. Getting started  www.mulesource.org  Download CE, browser user guide  www.mulesource.com  Professional support  http://code.google.com/p/muleinaction/  Mule in Action source code    
  • 118. Going further  Submit bug reports  Improve the on­line documentation  Contribute transports, modules, examples  MuleForge  Blog about your Mule adventure  Let MuleSource know    
  • 119. Books    
  • 120. Thank you!  VIJUG  Manning Publications  VIJUG's sponsors  ... and you!    
  • 121. Questions? david@muleinaction.com http://muleinaction.com http://dossot.net