590 likes | 851 Views
TITLE SLIDE: HEADLINE. JBoss SOA Platform 5 Technical Deep Dive. Presenter name Title, Red Hat Date. Ray Ploski Principal Solutions Architect ray@redhat.com. Swiss Army Application Server. JMS. EJB. Servlet. JNDI. JSP. Transactions. SOA Edition. SMTP. Registry. Repository.
E N D
TITLE SLIDE: HEADLINE JBoss SOA Platform 5 Technical Deep Dive Presenter name Title, Red Hat Date Ray Ploski Principal Solutions Architect ray@redhat.com
Swiss Army Application Server JMS EJB Servlet JNDI JSP Transactions
SOA Edition SMTP Registry Repository Orchestration Wiretap HTTP XSLT XML2POJO Process Manager Filter CBR “Governance” Scripting Languages Simple Routers File FTP
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
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
Services, Process, Orchestration, Flow 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 Send Shipment a Parse XML b Transform c Apply Business Rules a Create Outbound Msg b Handle Response c Apply Business Rules 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 ESB Mediates & Provides Services
Action Action Action Action Action The Action Pipeline/Chain 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 JMS Business Logic FTP SOAP • 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
SOA = ESB + BPM + Rules (JBoss ESB) FTP Submit Order Issues Receive Order Validate Order CSR Teams Credit Check SOAP Inventory Check Send Shipment Handle Shipment File Validate Order Credit Check Inventory Check Send Shipment … Humans Customer CSR Sales Mgmt WHSE Mgmt Various Transports, Message Formats, Routing Logic, Business Rules, Scripting Languages J2EE AppServer Credit/Bank Legacy Partners External
ESB Transport Mediation Action Action Use a network-basedprotocol between JVMs Intake_Service Logic_Service Clients JMS Java DB SLSBPOJO JMS WS .NET InVM HTTP JavaScript Service to Serviceinvocation in the sameJVM
Action Action Action ASCIIXML Binary Action Action ESB Services & Actions B_Service DB EJB SOAP A_Service DB POJO FTP C_Service D_Service DB WS JMS JMS
Action Action ASCIIXML Binary Action Content Based Routing & Filtering Orders over 12K or from Platinum customers Platinum_Service SOAP Ordering Service DB POJO FTP Special_Handling EJB SOAP Rules 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
Warehouse Services Shipping Calc Shipping Calc Shipping Calc Inventory Check Inventory Check Inventory Check Inventory Update Order Validation Inventory Update Order Validation Inventory Update Credit Check Credit Check Registry& Messaging Rules Services Cluster Customer Inquiry Customer Inquiry Customer Update Customer Update Accounting Accounting Service Federation via Registry Order Services Process Store Routing Services Customer Services Transformation Services Cluster * JVM
Discount Service JMS Action Action ESB 1 Intake Service Discount Service SOAP Registry FTP Action Action ESB 2 Discount Service SOAP Action Action ESB 3 Automatic Load-balancing
Shipping Calc Shipping Calc Inventory Check Shipping Calc Inventory Check Inventory Update Inventory Check Inventory Update Inventory Update Customer Inquiry Customer Update Accounting Federated Management Architecture Order Services Order Validation Order Services Credit Check Warehouses JBoss Operations Agent Firewall Agents Network Server History Agent Agent Customer Services Rules Services Discount Calculation Priority Calculation Server Shipping Router ESB Node
Monitored Metrics Automatic Monitoring, Alerting & Management for Every Service: Start, Stop Message Count Messages Per Minute Bytes Succeeded Bytes Failed Messages Failed Processing Time Every Action: Message Count Messages Per Minute Bytes Succeeded Bytes Failed Messages Failed Processing Time And JMS destinations, datasources, HTTP resources,EJBs, Hibernate, etc.
ASCIIXML Binary Excel SOA Middleware Current Future Event Listeners and Actions provide transport mediation Pluggable Architecturefor integrating infrastructure mediation services Business Servicesruns within a container or standalone HTTP Transports JCA J2EE/Java EE 5 (S)FTP EJB Infrastructure Services Seam File POJOs Transformation Routing Security Management JMS* Drools ESB Email DSL Decision Table SQL Spring Hibernate Groovy Jython JCA/Inflow ServiceRegistry MessageStore Declarative OrchestrationEngine jPDL BPEL Event Notification BAM CEP(TP) Beanshell Socket JRuby DataGrid Web Services (Proxy) InVM Service Component Architecture SOAP Service Data Object ProcessStore Native(SI) Seam Browser BusinessData DataSources EJB MetaMatrix JMS* - JBoss Messaging, IBM WebsphereMQ, TIBCO EMS
BPMAction FilterAction CEPFusion BPMAction CEP with SOA Platform 5.x Intake_Services Normal_Processing_Service JCA DB Java JMS * JMS .NET WS JavaScript JVM2 HTTP JVM1 BusinessProcessEvents IdentificationSelectionRaw Events CEP_Stateful_Service Alert _Processing_Service JMS JMS CorrelationAggregation ComplexEvents JVM4 RSS Email N JVMs In-MemoryAggregateEvent DB Reference & Historical Datavia Hibernate and/or Data Services * JBoss Messaging, TIBCO EMS, WebSphereMQ, AMQP
BRMS: Governance of Rules Services Action Action Action Order JMS FTP SOAP Groovy -DiscoverMessageOrigin RuleServiceContentBasedRouter RuleService:Discount SmooksXML2POJO RuleService:Priority RuleAgent Cache BRMS RuleRepository Categorization/Classification, Editing, Validation & TestingVersioning, Audit – for Policy Managers & Business Analysts [1] https://jira.jboss.org/jira/browse/BRMS-238 [2] https://jira.jboss.org/jira/browse/SOA-1874
Open Source Heritage Apache CXF Apache Tomcat JBoss Web JBoss WS Apache Scout Apache jUDDI JBoss AS Messaging/HornetQ JOPR Groovy JBoss SOA Platform Drools XSLT/XML/JAXB jBPM Apache Commons Smooks JBoss ESB * Many more OSS projects not listed from:jboss.org, codehaus.org, sourcefourge.net, apache.org
New and Improved in SOA Platform 5 Based on EAP5/AS5 with Java EE 5 Admin Console: A new single-node console Individual Message Alerting Improved HTTP Gateway & UDP Gateway XSLT Transformer CBR Enhancements: XPath & Regex SchemaValidationAction SOAPProxy: Web Service Proxy Synchronous Service Invocation Action UDDIv3 Business Rule Engine 5 CEP Technology Preview SAML Technology Preview New Eclipse Plug-ins for JBoss Developer Studio
Single Message Alerting <service category="MyESBServices" name="SimpleService1" description="Hello World" alertTimeThreshold="420" alertLengthThreshold="10" > Service-Level: any message that takes longer than 420 milliseconds or is larger than 10 bytes creates an alert Action-level: any message that takes longer than 30 milliseconds or is larger than 50 bytes creates an alertThe Alert shows up in JON <action name="action3" class="org.jboss.soa.esb.samples.quickstart.messagealerts.DelayAction" process="delayMessage" alertTimeThreshold="30" alertLengthThreshold="50"> </action> quickstarts\messagealerts
HTTP Gateway Introduction Supports GET, PUT, POST and DELETE Supports access to the full query string/URL arguments Supports access to the full HTTP headers Supports manipulation of the full HTTP response <providers> <http-provider name="http"> <http-bus busid="secureFriends"> <!-- Only users in the "friend" role are allowed access via the "GET" method. Unspecified methods are not protected (i.e. are allowed)... --> <allowed-roles> <role name="friend" /> </allowed-roles> <protected-methods> <method name="GET" /> <method name="POST" /> </protected-methods> </http-bus> <!-- Global exception mappings file... --> <exception mappingsFile="/http-exception-mappings.properties" /> </http-provider> </providers> <listeners> <!-- Receives: http://<host>:<port>/Quickstart_http_gateway/http/sales/* but will be forced to authenticate because the "sales" bus has basic auth configured (above)... --> <http-gateway name="sales" busidref="secureFriends" urlPattern="sales/*" /> </listeners> quickstarts\http_gateway
HTTP Gateway Configuration <providers></providers> …<service category="lab" description="lab" invmScope="GLOBAL" name="Lab1"> <listeners> <http-gateway name="HttpGateway1" urlPattern="/stuff/happens/*"/> </listeners>…URL: http://localhost:8080/<project_name>/http/stuff/happens/go --------------------------------------------- OR ------------------------------------------------------- <providers> <http-provider name="HttpProvider1"> <http-bus busid="HttpProvider1"/> </http-provider>… <service category="lab" description="lab" invmScope="GLOBAL" name="Lab1"> <listeners> <http-gateway busidref="HttpProvider1" name="HttpGateway1" urlPattern="/hit/me/*"/> </listeners>…URL: http://localhost:8080/<project_name>/http/hit/me/go
UDP Gateway New UDP Gateway/listener based in Mina <listeners> <udp-listener name="udp-listener" host="localhost" port="9999" is-gateway="true"/> </listeners>
New XSLT Transformer <XML> <xsl:stylesheet> <XML> <XML> </XML> </xsl:stylesheet> </XML> </XML> <action name="proxy-transform-old-to-new" class="org.jboss.soa.esb.actions.transformation.xslt.XsltAction"> <property name="templateFile" value="/Proxy_Versioning_RequestTransform.xsl"/> <property name="failOnWarning" value="true"/> <property name="resultType" value="STRING"/> </action> XSLT 1.0 based on the underlying JVM implementation Makes simple XSLT usage easier
XSLT vs Smooks Transformer Use XsltAction when... Performing straightforward structural transforms on XML Use SmooksAction when... Processing XML containing data “sub-structures” within the XML Structure Processing non-XML data e.g. CSV, JSON, EDI, Custom formats You prefer to use a more Imperative style, Java based templating framework like FreeMarker “Model Driven Transforms” You need to bind data from your message (XML, CSV, JSON etc) into your Java Object model You need to process huge messages by Splitting and Routing the message To File, JMS, DB, ESB Endpoint, extend for custom endpoint types You need to perform some Rule-based validation on your message (XML, CSV, JSON, EDI etc) <trackingNumbers> Speedy:ZX5-20030294-731 Acme:Previous0987 Zoom:776-ASDAAAA-988 </trackingNumbers>
New Content Based Routers <action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="MyRouter"> <property name="cbrAlias" value="XPath"/> <property name="destinations"> <namespace prefix="ord" uri="http://org.jboss.soa.esb/Order" /> <route-to service-category="BlueTeam" service-name="GoBlue" expression="/ord:Order[@statusCode='0']" /> <route-to service-category="RedTeam" service-name="GoRed" expression="/ord:Order[@statusCode='1']" /> </property> </action> XPath Regex <action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="MyRouter"> <property name="cbrAlias" value="Regex"/> <property name="destinations"> <route-to service-category="BlueTeam" service-name="GoBlue" expression=".*blue.*" /> <route-to service-category="RedTeam" service-name="GoRed" expression=".*red.*" /> </property> </action>
XPath/Regex vs Drools-based CBR XPath – content is XMLexpression="/ord:Order[@statusCode='0']" Regex – content is a Stringexpression=".*blue.*" Drools – content is a POJO – highly complex rule "Highest Priority Orders" when OrderHeader( orderPriority >= 3) then System.out.println("HIGHEST PRIORITY"); destinations.add("SuperSpecialCustomerService"); end
SOAPProxy <action name="proxy-transform-old-to-new"class="org.jboss.soa.esb.actions.transformation.xslt.XsltAction"> <property name="templateFile" value="/Proxy_Versioning_RequestTransform.xsl"/> <property name="failOnWarning" value="true"/> <property name="resultType" value="STRING"/> </action> <action name="proxy-invoke-new-version" class="org.jboss.soa.esb.actions.soap.proxy.SOAPProxy"><!-- this is the NEW endpoint, because we transformed the OLD request to fit it --> <property name="wsdl" value="http://localhost:8080/Quickstart_webservice_proxy_versioning_ws/InvoicingWS?wsdl"/> <property name="wsdlTransform" value="/Proxy_Versioning_WsdlTransform.xml"/></action> Client ESB OriginalService Hide the original endpoint, provide transformation, versioning, routing, “virtualization”
SOAPProxy vs HttpRouter vs ... SOAPProxy action for internal (local) or remote Web Service endpoints – SOAP and WSDL HttpRouter action for a regular HTTP endpoints with fixed URLs RESTful Proxy? GroovyActionProcessor def url='http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStore.woa/wpa/MRSS/topalbums/limit=10/rss.xml' def stream=Thread.currentThread().getContextClassLoader().getResourceAsStream("rss.xml") def channel = new XmlParser().parse(stream).channel[0] def items = channel.item println channel.title.text() for ( item in items[0..9] ) { println item.title.text() println item.link.text() }
Various UDDIv3 SchemaValidationAction Synchronous Service Invocation SAML – Technology Preview jBPM Job Executor
JBDS 3.0 - Smooks Plug-In Inputs:XML Java/POJO XSD/WSDL CSV EDI JSON Custom Outputs:XML Java/POJO CSV
SOA and BPM Futures WS-BPEL 2.0 Engine & Tools New BPM Console Complex Event Processing Composite Data Services Data Grid (Infinispan) BPMN2 Engine & Tools Business Activity Monitoring
ESP + CEP via ESB, Rules & JON Many Streams Or Flows ESB: consumption, capture, transformation, routing, orchestrationRules: selection, aggregation, correlation, generation and publication Governance Tools Repository: for editing, versioning, testing and publishing new rules and SOA artifacts JON: start/stop services, monitor and alert on service and action-level performance, monitor and alert on business metric values