430 likes | 446 Views
Deep dive into Enterprise Service Bus (ESB) technology with a real-world scenario. Learn about ESB solutions, architecture, integration, infrastructure services, and more. Explore ESB components, transport mediation, and pluggable architecture for seamless integration.
E N D
Enterprise Service Bus Deep, Deep DiveBurr SutterOctober 2007
ASCII ASCII File System File System ASCII FTP MSG FTPGET MQ Data Socket JMSListener SQL TCP/IPSocket JDBC/ODBCSelectUpdate A Real World Scenario SourceSystem
JBoss ESB JMS ReceivingSystem N ASCII FTP ASCII ReceivingSystem N File System ReceivingSystem N The ESB Solution ASCII ASCII File System ReceivingSystem 1 File System SourceSystem XML JMS ReceivingSystem 2 XML ReceivingSystem 3 SOAP
ASCIIXML Binary Excel Enterprise Service Bus Event Listeners and Actions provide transport mediation Pluggable Architecturefor integrating infrastructure services Business Servicesruns within a container or standalone HTTP(S) Transports Business ServiceComponents FTP Infrastructure Services JCA Java EE 5 File Web Services Transformation Routing Security Management JMS EJB ESB Email Seam POJOs SQL Drools Hibernate ServiceRegistry UDDI MessageStore Declarative OrchestrationEngineBPEL jPDL Event Notification Custom Action Spring JCA/Inflow Groovy Socket Service Component Architecture Service Data Object SOAP ProcessStore BusinessData Native Web Browser Declarative Transformation includes:Message Normalization,Validation, Enrichment, Via XSLT, Groovy, Java, StringTemplate Java RDBMSLegacyCOTS
BusinessService HTTP/S Transformation Routing Security Management FTP JBoss ESB File JCA JMS Email CompositionEngine BPELjPDLScripting EventStore ServiceRegistry SOAP BusinessData Web Seam Notification JSR 181 POJOs ProcessStore Portal EJB3 POJO File SOAP ESB Routing Security CompositionEngineBPEL FTP ServiceRegistry JBoss ESB ProcessStore File Email SOAP CompositionEngineBPEL EventStore ServiceRegistry ProcessStore Notification ESBs Across The Enterprise Invoicing/Order Entry Web Order Entry Accounting Shared Distributed Registry Plus Lightweight ESB Architecture
Warehouse Services Customer Inquiry Shipping Calc Shipping Calc Customer Inquiry Shipping Calc Order Validation Order Validation Customer Update Inventory Check Customer Update Inventory Check Inventory Check Credit Check Credit Check Inventory Update Inventory Update Inventory Update Accounting Accounting Registry& Messaging Rules Services Cluster Service Federation Order Services Process Store Routing Services Customer Services Transformation Services Cluster * JVM
ASCIIXML Binary Excel Enterprise Service Bus Mid 2007 Future Partners Event Listeners and Actions provide transport mediation Pluggable Architecturefor integrating infrastructure services Business Servicesruns within a container or standalone HTTP(S) Transports Business ServiceComponents FTP Infrastructure Services JCA Java EE 5 File Web Services Transformation Routing Security Management JMS EJB ESB Email Seam POJOs SQL Drools Hibernate ServiceRegistry UDDI MessageStore Declarative OrchestrationEngineBPEL jPDL Event Notification Custom Action Spring JCA/Inflow Groovy Socket Service Component Architecture Service Data Object SOAP ProcessStore BusinessData Native Web Browser Declarative Transformation includes:Message Normalization,Validation, Enrichment, Via XSLT, Groovy, Java, StringTemplate Java RDBMSLegacyCOTS
Where’s the Logic? • As a scriptlet in your JSP • Behind your Swing Button Click Action Handler • In your Struts Action • In your DAOs • In your Stored Procedures
Browser The Modern Silo Web Pages: Struts, JSF, Tapestry DAO/JPA/SLSB/Spring Bean Hibernate App DB Query/Stored Procedure
Client Client Client Client Silos Across the Enterprise Manufacturing Accounting Warehouse CRM Ordering
Client Client Client Client Integrating Silos (Dump & Load) 5250 Web PHP SOAP RPG ASCII FTP DUMP ASCII FTP DB/2 400 MySQL Manufacturing Accounting FTP Warehouse CRM Ordering VisualBasic Struts VisualBasic DAO ASCII Stored Proc Oracle SQL Server ASCII
Intermediate those Silos Browser Rich B2B Legacy Service 1 Service 2 Service 3 Mediation DAO/JPA/SLSB/Spring Bean Hibernate App Mediation Service 4 Service 5 Service 6 Query/Stored Procedure DB
Web Web Struts JSF JBoss ESB Spring Seam iBatis EJB3 Hibernate Hibernate Oracle DB/2 Web Order Entry 2 Web Order Entry Splice Technique Interceptors AOP queue queue Callback Listeners
ESB Definition • There is NO J2EE-like specification with a TCK that can define and validate an ESB like there is for App Servers. • ESBs are categorized by their capabilities – some come from a heritage of EAI and others of MOM. • Capabilities: • Message delivery • Transport protocol mediation • Event capture • Intelligent routing • Orchestration • Transformation • BPM • Adapters • And much, much more…
JBossESB 4.2 provides • Message delivery • JMS (JBossMQ, JBoss Messaging, ActiveMQ, MQSeries, Oracle AQ) • (S)FTP, SOAP, HTTP, email, database, shared file system • Action chaining/pipeline • For custom service enablement & mediation • Transformation • XSLT, Java, Groovy, StringTemplate • Content-based routing • JBoss Rules, XPath DSL • Recipient List/Static Routing is also supported • Orchestration • BPM, Intelligent routing, EIPs and hot deployment • Registry • JAX-R based • UDDI support out-of-the-box (Scout and jUDDI) • Message Store • Gateways • Extensive examples and documentation • And more…
JBoss ESB 4.2 • Content Based Filter • Business Rules Services • Native Process Orchestration • Hibernate Gateway/Listener • HTTP Gateway/Listener • Groovy Scripting • Declarative Message Store • JCA Container • Spring Action AOP & POJO • Monitoring & Mgmt Tools • Additional EIP examples • JMX Microkernel • Federated Clustering • WS-* • SOAP • WSDL • 181 Annotated POJO Endpoints • EJB Endpoints • JAXB 2.0 • BPEL 2.0 • New Deployment Architecture • .esb Archive • Hot Deployable Core Services
ESB Transformation Engine • Validation • Enrichment • Inline transformations (Fragment based Processing) • Profile based XML/non-XML processing • Anything to Anything (XML, CSV, binary, X12, POJO) • Mix/Match transformers on a single message: • Java • Groovy • StringTemplate • XSLT • 4X performance boost over plain XSLT (Xalan): http://milyn.codehaus.org/Chiba+Integration
jboss-esb.xml • Configuration for one or more services which show up in the registry. • Deployed as the key element of a .esb archive in 4.2+ • Structure of a .esb archive META-INF jboss-esb.xml com.mycompany.soa.mycustom.actions MyCustomAction.class Tip: Use one of the quickstarts as your template for your new project. We do assume that you are comfortable with Ant. An Eclipse Project template is under Development and will be available in SVN soon (as of May 16, 2007)
Hello World – jboss-esb.xml 1 <?xml version = "1.0" encoding = "UTF-8"?> <jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd" parameterReloadSecs="5"> <providers> <jms-provider name="JBossMQ" connection-factory="ConnectionFactory"> <jms-bus busid="quickstartGwChannel"> <jms-message-filter dest-type="QUEUE" dest-name="queue/quickstart_helloworld_Request_GW"/> </jms-bus> <jms-bus busid="quickstartEsbChannel"> <jms-message-filter dest-type="QUEUE" dest-name=" queue/quickstart_helloworld_Request_ESB"/> </jms-bus> </jms-provider> </providers>
Hello World – jboss-esb.xml 2 <services> <service category="FirstServiceESB" name="SimpleListener" description="Hello World"> <listeners> <jms-listener name="JMS-Gateway" busidref="quickstartGwChannel" maxThreads="1" is-gateway="true"/> <jms-listener name="helloWorld" busidref="quickstartEsbChannel" maxThreads="1"/> </listeners> <actions> <action name="action1" class="quickstart.helloworld.MyListenerAction" process="displayMessage"/> </actions> </service> </services> </jbossesb>
Hello World - action package org.jboss.soa.esb.samples.quickstart.helloworld; import org.jboss.soa.esb.message.Message; public class MyListenerAction { public Message displayMessage(Message message) { System.out.println("Body: " + new String(message.getBody().getContents())); // modify the contents, do anything Java can do… return message; // always return the message for the “chain” } public MyListenerAction(ConfigTree config) { // this constructor will be used to handle any jboss-esb.xml } // custom property configuration }
Action Action Action Action Action Action Pipeline (in a Service) Actions are reusable mediation components that can be chained together to form the capabilities of a registered service. Actions can be dynamically added/removed at runtime. My_Registered_Service Business Logic Component FTP • Business Logic: • POJO • EJB • WS • Rules • JCA with Adapters • Anything with Java API Transformation CSV to XML RoutingSplitter or BPM Logging Audit Trail Business Logic Invocation Transformation XML to POJO This box can also represent the ESB’s JVM – actions are “in VM”
Enterprise Integration Patterns File Transfer Recipient List Channel Router/CBR Message Splitter Message Filter Aggregator Message Store Translator/Transformer Enricher Wire Tap Process Manager Content Filter More information at www.enterpriseintegrationpatterns.com
ASCIIXML Binary Action Action Action Action Action Routing, Services & Actions A_Service DB EJB SOAP B_Service DB POJO FTP C_Service D_Service DB WS JMS JMS
ASCIIXML Binary Action Action Action Content Based Routing Orders over 12K or from Platinum customers Platinum_Service SOAP Ordering_Service DB POJO FTP Special_Handling EJB SOAP DB Randomly grab orders for review – tracer and Keep a total of all orders flowing through the system Orders from customers in certain states/countries
Content Based Routing Engine • Currently based on JBoss Rules – supports XPATH DSL • Access to the complete Header and Body/Contents for evaluation • Zero to many destinations rule "Routing Rule using XPATH Greater" when xpathGreaterThan"/Order/@totalAmount", "50.0" then Log : "Really It's EXPRESS Shipping"; Destination : “express"; end rule "Routing Rule using XPATH Less" when xpathLessThan"/Order/@totalAmount", "50.0" then Log : "Really It's NORMAL Shipping"; Destination : “normal"; end Destination is determined by the jboss-esb.xml
Inbound Splitter JMS Aggregator_Service Blue Red Green JMS JMS JMS JMS Action Action Action Action Action Splitter/Aggregator Quickstart Also demonstrates, federated ESB, multi-JVM capabilities
Load Balancing & Fail-Over The same discount_service.esb can be deployed to multiple ESB instances/nodes. Each one is a new EPRs in the registry. The routing engine is clever enough to load-balance and fail-over between the various EPRs. Should no EPR be available, it will scheduled the message for redelivery, waiting N seconds and retrying all possible EPRs found at that time.
Deployment Options • 1) ESB “within” an Application Server – Users have existing investments in the J2EE/Java EE App Servers and wish to run the ESB as a set of components in that App Server. • JBoss ESB can run “within” the JBoss Enterprise Application Platform 4.2 • 2) ESB “beside” an Application Server – Users wish to leave their existing application server environments untouched but still add mediation, SOA & integration capabilities. • JBoss ESB has its own lightweight engine/container for the hosting mediation services. It can run “beside” your existing middleware from your vendor of choice. • 3) ESB “standalone” in a J2SE environment – this option is primarily for development & testing purposes, it is not recommended for production as of the 4.2 release.
Management & Monitoring • 4.2 Release is focused on JMX instrumentation, the ability to monitor the health and load of every distributed service as well as start, stop & restart them remotely.
Orchestration (Got Flow) Simple Order Handling Process Customer Submit Order Issues CustomerService Receive Order Validate Order CSR Teams Credit Agency Credit Check Warehouse Inventory Check Send Shipment Shipper Handle Shipment Customers submit orders via web browser, FTP and Web Services. The system receives and validates the order, errors are sent to the appropriate CSR Team A credit check request is made, any areas of concern are sent to the appropriate CSR Team An inventory check request across multiple warehouses is sent, lack of availability goes to the CSRs. Assuming the order is valid, checks credit and available inventory, pick tickets are printed, shipping labels are printed, someone throws the parts into a crate or places on a pallet and puts the package by the loading dock. Various shipping companies are employed.
Customer Submit Order Issues CustomerService Receive Order Validate Order CSR Teams Credit Agency Credit Check Inventory Check Send Shipment Warehouse Shipper Handle Shipment Validate Order Credit Check a Parse XML b Transform c Apply Business Rules a Create Outbound Msg b Handle Response c Apply Business Rules Send Shipment a Determine Shipper(s) b Print Labels c Print Pick Tickets d Create & Send ASNs Inventory Check a Send to N Warehouses b Handle N Responses c Determine Best WHSEs d Handle Drop-Ships Service Oriented Orchestration ESB Mediates & Provides Services
Submit Order Issues Receive Order Validate Order CSR Teams FTP Credit Check Inventory Check Send Shipment SOAP Handle Shipment File Validate Order Credit Check Inventory Check Send Shipment … Service Orchestration & BPM Humans Customer CSR Sales Mgmt WHSE Mgmt Various Transports J2EE AppServer Credit/Bank Legacy Partners External An ESB Service is visible in the UDDI registry automatically. A single ESB Service may or may not expose a WSDL. It may use out-of-the-box actions, custom actions and/or consume external services from various sources. Focus on the reuse of existing infrastructure and assets.
Validation_Service DB DAO Pricing_Service DB POJO Order_Service DB EJB Action Action Action Action Orchestrated/Composed Services JVM BPM External Actor ExternalActor External Actor