Service Oriented Integration With Apache ServiceMix
Bruce Snyder Principal Engineer IONA Technologies Agenda
• Enterprise Service Bus • 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 software 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); }}
------
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: Apache Camel
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(“
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(“
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