Service Oriented Integration With Apache ServiceMix

Bruce Snyder Principal Engineer IONA Technologies Agenda

• Java Business Integration • Apache ServiceMix ESB

www.javapolis.com What is an ESB?

www.javapolis.com 4 What is an ESB?

"An Enterprise Service Bus (ESB) is a new architecture that exploits Web services, messaging middleware, intelligent routing, and transformation. ESBs act as a lightweight, ubiquitous integration backbone through which services and application components flow.” (Gartner)

www.javapolis.com What is an ESB?

An ESB acts as a shared messaging layer for connecting applications and other services throughout an enterprise computing infrastructure. It supplements its core 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)

www.javapolis.com What is an ESB?

An ESB is an open standards, message-based, distributed, integration solution that provides routing, invocation, and mediation services to facilitate the interactions of disparate distributed information technology resources (applications, services, information, platforms) in a reliable manner. (Brenda Michelson, Elemental Links)

www.javapolis.com Do I need an ESB?

ESB Planning Process

www.javapolis.com 8 What is JBI?

www.javapolis.com 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)

www.javapolis.com 10 Java Business Integration

www.javapolis.com 11 Java Business Integration

www.javapolis.com 12 JBI Normalized Message

www.javapolis.com 13 JBI Packaging

www.javapolis.com 14 Apache ServiceMix

www.javapolis.com 15 Apache ServiceMix Architecture

www.javapolis.com 16 ServiceMix Features

 Automatic message mediation  Even in a distributed model  Multiple protocol support  File, FTP, HTTP/S, JMS, SOAP, VM, TCP, XMPP  Support many engines  Camel, CXF, Drools, POJOs, Scripting, XSLT, WS- Notification  Flows  STP, SEDA, JMS, JCA  Security - JAAS, WS-Security  Transactionality

www.javapolis.com 17 Apache Software Foundation

www.javapolis.com 18 Message Routing

www.javapolis.com 19 Message Routing

www.javapolis.com 20 Example

www.javapolis.com 21 Configuration

www.javapolis.com 22 file-poller-su

www.javapolis.com 23 eip-wiretap-su

www.javapolis.com 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); }}

------

com.mycompany.persistence

www.javapolis.com 25 eip-cbr-su

...

www.javapolis.com 26 eip-cbr-su ...

www.javapolis.com 27 jms-producer-su

www.javapolis.com 28 jms-producer-su

...

www.javapolis.com 29 JBI Packaging

www.javapolis.com 30 Distribution of ServiceMix Containers

www.javapolis.com 31 What’s Coming in ServiceMix 4.0 Apache ServiceMix 4.0

www.javapolis.com 32 Building Blocks

 Runtime: OSGi (Apache Felix)  Message Broker: Apache ActiveMQ  SOAP Support: Apache CXF  Routing Engine:

www.javapolis.com 33 What is Apache Camel?

www.javapolis.com 34 What is EIP?

www.javapolis.com 35 Example Pattern: Content Based Router

RouteBuilder builder = new RouteBuilder() { public void configure() { from("seda:a").choice().when(header("foo") .isEqualTo("bar")).to("seda:b") .when(header("foo").isEqualTo("cheese")) .to("seda:c").otherwise().to("seda:d"); } };

www.javapolis.com 36 Example Pattern: Content Based Router

www.javapolis.com 37 Camel Makes Routing Much Easier!

from(“http://localhost:8080/requests/”). tryBlock(). to(“activemq:queue:requests”). setOutBody(constant(“”)). handle(Throwable.class). setFaultBody(constant(“”));

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(“”)). handle(Throwable.class). setFaultBody(constant(“”));

from(“activemq:queue:responses?transacted=true”). process(responseTransformer). to(“jdbc:store”);

from(“http://localhost:8080/pull/”). to(“jdbc:load”);

www.javapolis.com 38 Eclipse Tooling

Eclipse SOA Tools Platform (STP) Project

www.javapolis.com 39 Thank You for Attending!

http://open.iona.com/

www.javapolis.com 40