Project Name - Austin Java Users Group

17 downloads 127 Views 3MB Size Report
May 3, 2011 - OpenESB/Glassfish/Sun Web Server approach to clustering. Enabling ... Performance Monitoring .... utility
Getting to Know OpenESB By Rob Ratcliff rd May 3 , 2011

About Me ● ● ●



● ●

Developing with Java since 1995 Founded the Austin Java Users Group in 2001 Been involved in system integration for 17 years – architected and still support a CORBA-based integration framework called MDOPT Used OpenESB to develop a generic planning service that delegated to other third party planning services Used Glassfish to support a planning service Lots of experience developing GUIs with Swing. Presented at JavaOne in 2007: http://www.futuretek.com/presents/javaone2007/TS-3723

MDOPT Architecture

Outline Introduction to OpenESB Java Business Integration (JBI) Normalized Message Router Binding Components Service Engines Developing a Geocoding Service Code walk through of a Travel Reservation Application Advanced Topics Versioning WSDL and Schemas An EJB approach to consuming services with different versions of the same schema OpenESB/Glassfish/Sun Web Server approach to clustering Enabling compression of the XML responses with a front end web server Current shortcomings and future direction of OpenESB

Why Use and ESB Desire dependent services to be decoupled  Need to support multiple protocols  Need to support multiple data formats  Desire best of breed services to be swapped out behind the scenes  Desire a common interface that acts as a proxy to other third party services  Draw from library of components and services 

History 

SeeBeyond  1992:

DataGate  1999: eGate  2003: ICAN/Java CAPS  2008: OpenESB/Glassfish ESB v2  2009: OpenESB v2.2 released  2008 OpenESB v3 (Project Fuji) started – M10+   

Sun bought SeeBeyond in 2005 for $387M Oracle bought Sun 2009 $7.4B put OpenESB into maintenance mode Open source community adopted OpenESB 2010 (LogiCoy, Pymma, ForgeRock)

Glassfish OpenESB Features 

Architecture embraces diverse protocols and data formats Binding Components (BC) to adapt protocols (FTP, HTTP, CORBA, file based, proprietary)  Service Engine (SE) to provide translation and high level business logic (XSLT, BPEL, Translators)  Normalized Message Router to decouple modules and provide uniform communication model 

   

Open source Based on Glassfish JEE application server with proven track record Based on Java Business Integration (JBI), WSDL, XML Schema and other open standards Product has been used in high volume telecom and health insurance projects

Glassfish OpenESB 

Open source framework and standards based software development products  Glassfish

ESB  JAVA, XML, WSDL, JAXWS, BPEL, JEE, JBI, JMS, etc

Allows services to be decoupled  Supports multiple protocols and formats  Very WSDL/XML/BPEL/XML-Schema centric – if you like XML, you'll like OpenESB 

Miscellaneous 

Other Services  Logging  Notification  Performance

Monitoring

Other Protocols supported such as File, FTP, JMS, CORBA  Service Engines – XSLT, POJO 

High Level Architecture

Ref: http://kalali.me/introducing-openesb-from-development-to-administration-and-management/

JBI Overview

Representative Binding Components Provides External Communication with other Services

CORBA(JBI4CORBA)  Database  HTTP/SOAP  REST  JMS  HL7 (and encoder) 

Email  Exec  File  Scheduler  LDAP  FTP 

Representative Service Engines BPEL – Business Process Orchestration Engine  JAVAEE – EJB communication  POJO – Local Java Object Interface  XSLT – XSLT style sheet engine, support XSLT 1.0 and 2.0  IEP – Intelligent Event Processor 

WSDL-Centric Messaging Model • Abstract service model - A service is defined using an abstract messaging model, without reference to a particular protocol or wire encoding • Concrete (bound) model - An abstract service that is bound to a particular protocol and communications end point.

Normalized Message Router - NMR 

In memory message router allows  Performance

improvement by reducing intercomponent messaging overhead of JMS (when no network is required)  Message streaming – pass by reference  Propagation of security and transaction context  Easy throttling

Normalized Message Router 

 

Key to interoperation between components Mediated Message Exchange Normalized Message 





Abstract Message (payload – usually XML, but can be any data type) Message Properties (metadata)

Message Exchange Pattern 

Support for simple communications primitives

Endpoint Identification Endpoints in JBI are uniquely identified – – –

PortType PartnerLink Role name

These three values correspond – – –

Interface-name Service-name Endpoint-name (Provider or Consumer)

NMR Message API

NMR Service API

Life Cycle Management

NetBeans Schema Editor

NetBeans WSDL Editor

BPEL Editor

BPEL Input/Output Mapper

Exposing the Service in a Composite Application

Deployed to Glassfish Server

Development of a Geocoder Application

Developing a Geocoder Application 

Creating a new schema with the XML Schema Editor



Creating new abstract WSDLs with the WSDL Editor



BPEL Editor 

Creating a process flow



Enhancing BPEL by calling out to local Java static methods



Creating and calling a POJO



Calling an external service



Calling the XSLT engine to transform your XML



Composite Application Editor



Adding Concrete Implementation to the BPEL Process Flow



Customizing the BCs with the Binding Component Editor



Deployment to Glassfish



Glassfish Admin interface walk-through



Creating a SOAP client to communicate with the service and integration with World Wind

Geocoder Process Flow

HTTPBC SOAP Client

HTTPBC

BPEL Process Flow HTTPBC

Yahoo Geocoder

Google Geocoder

Walk Through of the Travel Reservation Application

Walk Through and Demo of the Geocoder Application

HINTS Use only document literal web services  Use fully qualified XSDs (elementFormDefault="qualified“)  Use elements for document literal web services only  Add reference to the actual jar of the Java utility library to the BPEL project for Java call outs 

Advanced Topics

Schema and WSDL Versioning Come up with a versioning scheme early in the development  Some approaches 

 Transform

inputs and output based on version identifier (e.g. Google Maps)  Version Namespace • Provide versioned WSDL end point (Bing Maps) • Change namespace of Schema

Supporting Evolving Interfaces and Data Structure 



Two typical approaches to handle versioning  Change the target namespace of the Schema or WSDL to incorporate a “Version Identifier”. Example: http://www.austinjug.org/geocoder/v2/p3  Add a “Version” element to the Schema definition Example: v2.3 Context based routing used to convert one version to another version or couple to a given version of the service “Unix Pipe” based approach

IONO's Recommendations ➢ Place the major version number in the WSDL target namespace, and in the name of the WSDL file. ➢ Version data types according to XSD conventions, and import types into your WSDL contract ➢ Avoid embedding versioning information in message names ➢ Embed major-minor version in the interface (portType) name to allow backward compatible interfaces ➢ Embed major-minor version in the service name (service name follows same convention as the interface

IONO's Recommendations Continued ➢ Facilitate the addition of new operations as minor point releases ➢ Create a new service for each version of an interface ➢ Facilitate change of existing operations only as major point releases ➢ Regard any change to the XSD type system as a major release ➢ Keep major releases of deprecated services live until they are no longer in use Reference: Adrian Trenaman blogs.iona.com/sos/20070410-WSDL-Versioning-Best-Practise.pdf

Bing Maps Geocoder Example Web service versioned: http://dev.virtualearth.net/webservices/v1/metadata/geocodeservice /geocodeservice.wsdl

SchemaLocation: http://dev.virtualearth.net/webservices/v1/metadata/geocodeservice /GeocodeService.xsd http://dev.virtualearth.net/webservices/v1/metadata/geocodeservice /GeocodeService3.xsd

Namespaces: http://dev.virtualearth.net/webservices/v1/geocode/contracts http://schemas.microsoft.com/2003/10/Serialization/Arrays (Looks like they stopped using dates recently...makes messy packages.)

Using EJB Clients Eliminate Namespace Collisions Create public interface that's independent of the remote service's schema ● EJB implementation does not expose JAXB objects created from remote service ● Servlet looks up EJB via JNDI to invoke service via the EJB ● Servlet's classloader is not polluted by the remote service's JAXB objects ●

GeocoderService

Geocode Request

Oracle IPlanet Web Server Load Balancer

GeocoderService

Setting Up Clustering       

AS_ADMIN_PROFILE=developer by default, change this to “cluster” ant –f setup-cluster.xml glassfish/bin/asadmin start-domain domain1 glassfish/nodeagents/localhost/agent/bin/startser v Create clusters using the admin interface Add favorite load balancer (not trivial) Note: ${default_port} of JBI service is replaced automatically by clustered instance to the actual port used

Adding GZIP Compression Compressing XML is essential in reducing bandwidth – XML compresses by 80-1 for some cases!  HTTPBC does not support compression currently  Use Web server (Apache or Sun) acting as the load balancer to proxy the requests and provide compression 



Add prefix to JBI end points to redirect all JBI service requests to the correct port

Current Developments in OpenESB 

Ported to NetBeans 6.9 recently (very much improved over 6.7.1)



Project Fuji in the works – Supports Glassfish version 3 – Andi Egloff left Oracle and joined ForgeRock as chief architect to develop Fuji in January, 2011. (OpenESB underlies OpenIDM)



OpenESB Summit Next Monday (May 9th in Los Angeles and workshop in Montreal, Quebec May 12th and soon in Bangelore.



Open source community looking for volunteers!

Opportunities for Improvement     

 

Tend to duplicate schema and WSDL definitions across the various JBI modules NetBeans OpenESB modules are a little buggy and sometimes need to be restarted to synchronize state Creating WSDL/Schema for each interface is a little tedious Must know WSDL and Schema very well and decent knowledge of XSL and BPEL Refactoring WSDL, Schemas and BPEL require manual editing sometimes to handle all dependencies (seems better in NB 6.9) Importing a schema into a WSDL document doesn’t automatically add the schemaLocation attribute Not ported to Glassfish 3.x yet

Opportunities to Improve Glassfish 2.1 1) Too many dependencies on native libraries 2) Load balancer is native code and is not open source 3) Time consuming to setup load balancer, especially with the open source version of Glassfish 2.1 4) Can't restart admin server from web interface 5) Node agent can't be started from web interface Note: Many of these have been improved with v3.1! – ssh used across machines – OSGI based – Seems snappier and more robust in terms of status updates

References 

OpenESB 2.2 Downloads: http://www.logicoy.com/download_glass



OpenESB 2.3 Downloads: http://hudson.openesb-dev.org:8080/hudson/job/openesb-installerslegacy/



OpenESB 2.3 Project Website: https://openesb-dev.org/



JBI Specification: JSR-000208 Java Business Integration 1.0 Final Release



Tutorials Tom Barrett's Tutorials: http://tinyurl.com/yk6oxsd http://wiki.open-esb.java.net/Wiki.jsp?page=OpenESBIntroductionTutorial http://blogs.sun.com/kevansplace/entry/how_to_use_the_xslt



Tons of blogs and tutorials, just Google OpenESB (I'll email a list of references out to the AustinJUG list as well)



Versioning: blogs.iona.com/sos/20070410-WSDL-Versioning-Best-Practise.pdf

Detailed Outline

Glassfish OpenESB Introduction to OpenESB and rationale for choosing an ESB Overview of Java Business Integration (JBI) and the OpenESB Architecture Normalized Message Router Service Engines Binding Components Composite Applications Demonstration of creating and deploying a representative sample service that supports multiple protocols with behind the scenes explanations Creating a new schema with the XML Schema Editor Creating new abstract WSDLs with the WSDL Editor BPEL Editor Creating a process flow Enhancing BPEL by calling out to local Java static methods Creating and calling a POJO Calling an external service Calling the XSLT engine to transform your XML Composite Application Editor Joining the BPEL process with the concrete services Customizing the BCs with the Binding Component Editor Deployment to Glassfish Glassfish Admin interface walk-through Creating a SOAP client to communicate with the service Advanced concepts Versioning Services and Schemas Namespace and WSDL naming tricks Version IDs An EJB approach to consuming services with different versions of the same schema OpenESB/Glassfish/Sun Web Server approach to clustering Enabling compression of the XML responses with a front end web server Current shortcomings and future direction of OpenESB