Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Service Oriented Integration
 With Apache ServiceMix
       Bruce Snyder
       bsnyder@apache.org
       21 Nov 2008
    ...
Agenda




            Enterprise Service Bus
            Java Business Integration
            Apache ServiceMix ESB

...
What is
 an
ESB?      3
What is an ESB?



"An Enterprise Service Bus (ESB) is a new architecture that exploits Web
services, messaging Service Bu...
What is an ESB?


An ESB acts as a shared messaging layer for connecting applications and other
services throughout ana sh...
What is an ESB?



An ESB is an open standards, message-based, distributed, integration solution
 An ESB is an open standa...
Do I need an ESB?

          ESB Planning Process




                                 7
What
 is
JBI?   8
What is JBI?




JBI defines an architecture that allows the construction of
integration systems from plug-in components, ...
Java Business Integration




                            10
Java Business Integration




                            11
JBI Normalized Message




                         12
JBI Packaging




                13
Apache ServiceMix




       http://servicemix.apache.org/
                                       14
Apache ServiceMix Architecture




                                 15
ServiceMix Features

   Supports many protocols
        File, FTP, HTTP/S, JMS, SMTP, SOAP, TCP, XMPP
   Support many e...
Apache Software Foundation




 Apache
 Software
Foundation
                             17
Message Routing




                  18
Message Routing




                  19
Example




          20
Configuration




                21
file-poller-su



<beans xmlns:file='http://servicemix.apache.org/file/1.0'
       xmlns:myApp="http://com.mycompany/myapp...
eip-wiretap-su



<beans xmlns:eip="http://servicemix.apache.org/eip/1.0"
       xmlns:myapp="http://mycompany.com/myapp">...
camel-persist-su


public class PersistOrderRoute extends RouteBuilder {
    public void configure() {
   from("jbi:endpoi...
eip-cbr-su


<beans xmlns:eip="http://servicemix.apache.org/eip/1.0"
       xmlns:myapp="http://mycompany.com/myapp">

  <...
eip-cbr-su

...
      <eip:routing-rule>
        <eip:predicate>
          <eip:xpath-predicate
            xpath="/messag...
jms-producer-su


<beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
       xmlns:myapp="http://mycompany.com/myapp
 ...
jms-producer-su



...
      <jms:endpoint service="myapp:queue3"
                    endpoint="myProvider"
              ...
JBI Packaging




                29
Visualization




                30
Distribution of ServiceMix Containers




                                        31
Eclipse IDE Tooling For ServiceMix

   Eclipse SOA Tooling Platform (STP) Project
        http://eclipse.org/stp

   Sp...
Eclipse Tooling




         Eclipse SOA Tools Platform (STP) Project

                                               33
What is Apache Camel?




    http://activemq.apache.org/camel/
                                        34
What is EIP?




               35
Example Pattern: Content Based Router




RouteBuilder builder = new RouteBuilder() {
   public void configure() {
     fr...
Example Pattern: Content Based Router

<camelContext id="buildSimpleRouteWithChoice"
    xmlns="http://activemq.apache.org...
Camel Makes Routing Much Easier!

                   from(“http://localhost:8080/requests/”).
                       tryBl...
What’s Coming in ServiceMix 4.0




  Apache
 ServiceMix
     4.0                          39
ServiceMix 4.0 Building Blocks

   Runtime: OSGi (Apache Felix)
        JBI support still intact!
        NMR is a OSGi...
Thank You for Attending!




   Questions?

                           41
Upcoming SlideShare
Loading in …5
×

Service-Oriented Integration With Apache ServiceMix

4,318 views

Published on

Published in: Technology
  • Be the first to comment

Service-Oriented Integration With Apache ServiceMix

  1. 1. Service Oriented Integration With Apache ServiceMix Bruce Snyder bsnyder@apache.org 21 Nov 2008 Malmo, Sweden
  2. 2. Agenda  Enterprise Service Bus  Java Business Integration  Apache ServiceMix ESB 2
  3. 3. What is an ESB? 3
  4. 4. What is an ESB? "An Enterprise Service Bus (ESB) is a new architecture that exploits Web services, messaging Service Bus (ESB) is a and transformation. ESBs "An Enterprise middleware, intelligent routing, new architecture that act as a lightweight, ubiquitous integration backbone through which software exploits Web services, messaging middleware, intelligent services and application components flow.” (Gartner) routing, and transformation. ESBs act as a lightweight, ubiquitous integration backbone through which software services and application components flow.” (Gartner) 4
  5. 5. What is an ESB? An ESB acts as a shared messaging layer for connecting applications and other services throughout ana sharedcomputing infrastructure. It supplements its An ESB acts as enterprise messaging layer for connecting core asynchronous messaging services throughout an enterprise applications and other backbone with intelligent transformation and routing to ensure messages are passed reliably. Services participate in the ESB using either web services messaging supplements its core computing infrastructure. It standards or JMS (LooselyCoupled.com) asynchronous messaging backbone with intelligent transformation and routing to ensure messages are passed reliably. Services participate in the ESB using either web services messaging standards or JMS (LooselyCoupled.com) 5
  6. 6. What is an ESB? An ESB is an open standards, message-based, distributed, integration solution An ESB is an open standards, message-based, distributed, that provides routing, invocation, and mediation services to facilitate the interactions of disparate distributed information technology resources and integration solution that provides routing, invocation, (applications, services, information, platforms) in a reliable manner. (Brenda Michelson, Elemental Links) facilitate the interactions of disparate mediation services to distributed information technology resources (applications, services, information, platforms) in a reliable manner. (Brenda Michelson, Elemental Links) 6
  7. 7. Do I need an ESB? ESB Planning Process 7
  8. 8. What is JBI? 8
  9. 9. What is JBI? JBI defines an architecture that allows the construction of integration systems from plug-in components, that interoperate through the method of mediated message exchange. (JBI 1.0 Spec) 9
  10. 10. Java Business Integration 10
  11. 11. Java Business Integration 11
  12. 12. JBI Normalized Message 12
  13. 13. JBI Packaging 13
  14. 14. Apache ServiceMix http://servicemix.apache.org/ 14
  15. 15. Apache ServiceMix Architecture 15
  16. 16. ServiceMix Features  Supports many protocols  File, FTP, HTTP/S, JMS, SMTP, SOAP, TCP, XMPP  Support many engines  Apache Camel, Apache CXF, Apache ODE, Drools, OS Workflow, POJOs, Quartz, Scripting, Saxon XQuery and XSLT, WS-Notification  Support for Security  JAAS, WS-Security  Web Container/App Server Integration  Geronimo, JBoss, Jetty, Tomcat, Weblogic, Websphere 16
  17. 17. Apache Software Foundation Apache Software Foundation 17
  18. 18. Message Routing 18
  19. 19. Message Routing 19
  20. 20. Example 20
  21. 21. Configuration 21
  22. 22. file-poller-su <beans xmlns:file='http://servicemix.apache.org/file/1.0' xmlns:myApp="http://com.mycompany/myapp"> <file:poller service="myapp:file" endpoint="poller" file="file:///Users/bsnyder/poller/inbox" targetService="myapp:wiretap" targetEndpoint="logger" /> </beans> 22
  23. 23. eip-wiretap-su <beans xmlns:eip="http://servicemix.apache.org/eip/1.0" xmlns:myapp="http://mycompany.com/myapp"> <eip:wire-tap service="myapp:wiretap" endpoint="endpoint"> <eip:target> <eip:exchange-target service="myapp:cbr" /> </eip:target> <eip:inListener> <eip:exchange-target service="myapp:persist" /> </eip:inListener> </eip:wire-tap> </beans> 23
  24. 24. camel-persist-su public class PersistOrderRoute extends RouteBuilder { public void configure() { from("jbi:endpoint:http://mycompany.com/persist/order") .convertBodyTo(Order.class) .to("jpa:com.mycompany.Order?persistenceUnit=order-proc") .convertBodyTo(Order.class); }} ------------------------------------------------- <beans xmlns:camel=”http://activemq.apache.org/camel"> <camel:camelContext id="camel"> <package>com.mycompany.persistence</package> </camel:camelContext> </beans> 24
  25. 25. eip-cbr-su <beans xmlns:eip="http://servicemix.apache.org/eip/1.0" xmlns:myapp="http://mycompany.com/myapp"> <eip:content-based-router service="myapp:cbr" endpoint="endpoint"> <eip:rules> <eip:routing-rule> <eip:predicate> <eip:xpath-predicate xpath="/message/cheese/text() = 'gouda'" /> </eip:predicate> <eip:target> <eip:exchange-target service="myapp:queue1" /> </eip:target> </eip:routing-rule> ... 25
  26. 26. eip-cbr-su ... <eip:routing-rule> <eip:predicate> <eip:xpath-predicate xpath="/message/cheese/text() = 'swiss'" /> </eip:predicate> <eip:target> <eip:exchange-target service="myapp:queue2" /> </eip:target> </eip:routing-rule> <eip:routing-rule> <eip:target> <eip:exchange-target service="myapp:queue3" /> </eip:target> </eip:routing-rule> </eip:rules> </eip:content-based-router> 26
  27. 27. jms-producer-su <beans xmlns:jms="http://servicemix.apache.org/jms/1.0" xmlns:myapp="http://mycompany.com/myapp xmlns:amq="http://activemq.org/config/1.0"> <jms:endpoint service="myapp:queue1" endpoint="myProvider" role="provider" destinationStyle="queue" jmsProviderDestinationName="queue1" connectionFactory="#connectionFactory" /> <jms:endpoint service="myapp:queue2" endpoint="myProvider" role="provider" destinationStyle="queue" jmsProviderDestinationName="queue2" connectionFactory="#connectionFactory"/> 27
  28. 28. jms-producer-su ... <jms:endpoint service="myapp:queue3" endpoint="myProvider" role="provider" destinationStyle="queue" jmsProviderDestinationName="queue3" connectionFactory="#connectionFactory"/> <amq:connectionFactory id="connectionFactory" brokerURL="tcp://localhost:61616" /> </beans> 28
  29. 29. JBI Packaging 29
  30. 30. Visualization 30
  31. 31. Distribution of ServiceMix Containers 31
  32. 32. Eclipse IDE Tooling For ServiceMix  Eclipse SOA Tooling Platform (STP) Project  http://eclipse.org/stp  Spagic  http://spagic.com/  SOPERA ServiceMixTools  http://sopera.de/en/products/sopera-servicemixtools/ Eclipse SOA Tools Platform (STP) Project 32
  33. 33. Eclipse Tooling Eclipse SOA Tools Platform (STP) Project 33
  34. 34. What is Apache Camel? http://activemq.apache.org/camel/ 34
  35. 35. What is EIP? 35
  36. 36. Example Pattern: Content Based Router RouteBuilder builder = new RouteBuilder() { public void configure() { from("activemq:TEST.QUEUE").choice() .when(header("foo").isEqualTo("bar")). to("bean:MyBean?methodName=processMessage") .when(header("foo").isEqualTo("cheese")). to("file:/opt/dropbox") .otherwise().to("log:Test"); } }; 36
  37. 37. Example Pattern: Content Based Router <camelContext id="buildSimpleRouteWithChoice" xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="file:/Users/bsnyder/smxdropbox"/> <choice> <when> <predicate> <header name="foo"/> <isEqualTo value="bar"/> </predicate> <to uri="ftp://hostname:1234/"/> </when> <when> <predicate> <header name="foo"/> <isEqualTo value="cheese"/> </predicate> <to uri="mina:tcp:remotehost:9876"/> </when> <otherwise><to uri="imap:mymailhost:110"/></otherwise> </choice> </route> </camelContext> 37
  38. 38. Camel Makes Routing Much Easier! from(“http://localhost:8080/requests/”). tryBlock(). to(“activemq:queue:requests”). setOutBody(constant(“<ack/>”)). handle(Throwable.class). setFaultBody(constant(“<nack/>”)); from((“activemq:queue:requests?transacted=true”). process(requestTransformer). to(“http://host:8080/Request”). filter(xpath(“//nack”)). process(nackTransformer). to(“jdbc:store”); from(“http://localhost:8080/responses/”). tryBlock(). to(“activemq:queue:responses”). setOutBody(constant(“<ack/>”)). handle(Throwable.class). setFaultBody(constant(“<nack/>”)); from(“activemq:queue:responses?transacted=true”). process(responseTransformer). to(“jdbc:store”); from(“http://localhost:8080/pull/”). to(“jdbc:load”); 38
  39. 39. What’s Coming in ServiceMix 4.0 Apache ServiceMix 4.0 39
  40. 40. ServiceMix 4.0 Building Blocks  Runtime: OSGi (Apache Felix)  JBI support still intact!  NMR is a OSGi service  Message Broker: Apache ActiveMQ  Web Services: Apache CXF  Routing Engine: Apache Camel 40
  41. 41. Thank You for Attending! Questions? 41

×