3er Congreso Interamericano de Administración Universitaria Visión de Web Services con J2EE Héctor Jiménez Arquitectura e Integración de aplicaciones Dirección de Tecnología QoS Labs
Agenda Introducción a Web Services Web Services: que son, estándares e implementaciones Desarrollo de Web Services en Java Arquitectura de Web Services en J2EE JAX-RPC Ejemplos de implementación de servicio con JAXRPC Modelos de programación para clientes de Web Services Web Services y Seguridad Estándares e implementaciones en J2EE Ejemplos
Agenda Integración e Interoperabilidad J2EE usando Web Services Procesos de negocio en Web Services (BPEL) WS-I Consideraciones generales Ejemplo de Web Services en Sector Financiero Trayectoria de Web Services Adopción de tecnología de Web Services actual: simple, EAI y B2B Colaboración en negocio: ebxml, EDI, RosettaNet, BizTalk
Comenzamos Introducción a Web Services Desarrollo de Web Services en Java Web Services y Seguridad Integración e Interoperabilidad J2EE usando Web Services Trayectoria de Web Services
Introducción a Web Services Qué es un Web Service: Infraestructura independiente de lenguaje y plataforma para comunicación aplicación aplicación desacoplada e interoperable sobre una Internet Independiente de lenguaje y plataforma: Separación de la especificación y la implementación Desacoplada: Basa en mensajes con interacción síncrona y asíncrona Sobre una Internet: No existe control centralizado, se usan protocolos bien establecidos y consideraciones de seguridad Interoperable: Basado en estándares Aplicación Aplicación: Internet tradicional es Aplicación Humano (SMTP, FTP, HTTP); esquemas RPC (procedural), ORB y COM (objetos), MOM (mensajes jms/mq) para aplicación aplicación dentro de una Internet sin considerar interoperar con otros sistemas
Introducción a Web Services Comunicación entre Aplicaciones en Web Services Protocolo de Transporte: HTTP/HTTPS Codificación de datos Protocolo SOAP (Simple Object Access Protocol) y Esquema XML (DTD/XSD) Descripción de interfaces o puntos de acceso a aplicación WSDL (Web Services Description Language) Descripción de servicio y descubrimiento UDDI (Universal Description, Discovery and Integration) Seguridad WS-Security, XML Signature y XML Encription (Especificaciones JSR)
Introducción a Web Services Protocolo SOAP Protocolo basado en XML para intercambio de información Mensaje SOAP Parte principal (text/xml) Sobre SOAP (Envelope) Encabezado (Header) Enrutamiento Seguridad Attachment.. Attachment Cuerpo (Body) Contenido
Introducción a Web Services Protocolo SOAP POST /axis/services/messageservice HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.2RC1 Host: localhost:5050 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 409 <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:body> <ns1:e1 xmlns:ns1="urn:foo">hola</ns1:e1> <ns2:e1 xmlns:ns2="urn:foo">mundo</ns2:e1> <ns3:e3 xmlns:ns3="urn:foo">datos adicionales</ns3:e3> </soapenv:body> </soapenv:envelope>
Introducción a Web Services Definición de Web Services: WSDL Propuesta de IBM y Microsoft <definitions> <message> <porttype> Define el servicio llamado ServicioSumaNumeros y los nombres de espacio para el documento XML (targetnamespace) Define 2 mensajes: Solicitud y Respuesta c/u con 1 parámetro (part) de tipo String que está definido según el estándar de XML Schema con el namespace xsd referenciado en <definitions> Define una operación llamada suma que se compone de un mensaje de entrada (param) y otro de salida (valor) identificado con el namespace xsd1. Los patrones de operaciones son: input, input y output, output e input y output (notificación) que pueden incluir un fault <binding> Especifica cómo el puerto se va a transmitir (HTTP GET, HTTP POST o SOAP) y el estilo o formado el mensaje: RPC o Document. Especifica la ubicación del servicio y una descripción <service>
Introducción a Web Services Ejemplo de definición de servicio en WSDL: Servicio de Suma de Números
Introducción a Web Services Formas de serialización de datos Se usan definiciones de XML Schema (Literal) para determinar cómo codificar los datos Se usa reglas de codificación de SOAP (Encoding) Resultado de 4 combinaciones: Document/Literal, RPC/Encoding, Document/Encoding, RPC/Literal SOAP Document/Literal encoding más aceptado y usado, recomendado por Web Services Interop (WS-I) Basic Profile. Usar RPC cuando: dentro de misma empresa (ambiente confiado), se requiere confiabilidad, se tiene suficiente ancho de banda, proceso de negocio corto, comunicación síncrona y punto a punto (en vez de endto-end ).
Introducción a Web Services Formas de interpretación de documentos SOAP RPC (Remote Procedure Call): cada atributo part del WSDL de la operación indica un parámetro o un valor de respuesta que se encuentra dentro del cuerpo del mensaje de SOAP <binding name="sumanumerosbinding" type="tns:sumanumerosport"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="suma"> <input> <soap:body use="encoded" namespace=http://www.qoslabs.com encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace=http://www.qoslabs.com encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> <fault name="error"> <soap:fault name="error" use="literal"/> </fault> </operation> </binding>
Introducción a Web Services Formas de interpretación de documentos SOAP Document: El mensaje es directamente el body de SOAP <binding name="sumanumerosbinding" type="tns:sumanumerosport"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="suma"> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> <fault name="error"> <soap:fault name="error" use="literal"/> </fault> </operation> </binding>
Introducción a Web Services Esquemas XML Sistema o lenguaje de definición de tipos de datos para XML. Tradicionalmente definido en DTD / XML Infoset (abstracto), evolución a espacios de nombres (Namespaces) con XML 1.0 <?xml version="1.0" encoding="utf-16"?> <ns:estudiante xmlns:ns="xyzzy:abc"> <nombre>david</nombre> <edad>21</edad> </ns:estudiante> XML Schema Definition Languaje (XSD) permite asociar tipos de datos con elementos y atributos <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:tns="xyzzy:abc" targetnamespace="xyzzy:abc"> <xsd:complextype name="persona" > <xsd:sequence><xsd:element name="nombre" type="xsd:string"/> <xsd:element name="edad" type="xsd:double" /> </xsd:sequence> </xsd:complextype> <xsd:element name="estudiante" type="tns:persona" /> </xsd:schema>
Introducción a Web Services Esquemas XML Mapeo entre un esquema XML y la programación del sistema no es fácil Estructuras de datos no soportadas en esquema XML (arreglos, referencias, etc) Sistema Clase Java Esquema ComplexType Clase Java ComplexType Cuerpo (Body)
Donde vamos? Introducción a Web Services Desarrollo de Web Services en Java Web Services y Seguridad Integración e Interoperabilidad J2EE usando Web Services Trayectoria de Web Services
Desarrollo de Web Services en Java Arquitectura de Web Services en J2EE: JAXRPC Basada en JAXRPC 1.1 (Java API for XML-Based RPC) y JSR 101. Especificación para la construcción de aplicaciones y servicios Web que incorpora funcionalidad RPC basada en XML de acuerdo al estándar SOAP 1.1. Versión 2.0 de especificación JAXRPC en proceso de revisión por Java Community Process (Junio 2004) Conjunto de puertos que operan sobre mensajes, los puertos operan dentro de un contenedor J2EE. Implementación JAX-RPC 1.1 especifica uso de Servlet para acceso a puerto de servicio, JSR 109 emplea EJB 2.1. Implementación incluída en JWSDP 1.4 (Java Web Services Developer Pack) Herramientas: WSDL desde/hacia Java Serialización de tipos de Java desde/hacia XML Empaquetamiento para aplicaciones web J2EE Modelos de programación de clientes
Desarrollo de Web Services en Java Arquitectura de Web Services en J2EE: JAXRPC Cliente JAXRPC Java < WSDL Documento WSDL WSDL > Java Puerto Servicio JAXRPC Código Generado Runtime JAXRPC (Stub) wscompile wsdeploy Contenedor Runtime JAXRPC (Tie) SOAP HTTP
Desarrollo de Web Services en Java Mapeo WSDL < > Java en JAXRPC <porttype name="servicio"> <operation name="operacion"> <input message="tns:consulta"/> <output message="tns:respuesta"/> </operation> </porttype> porttype = Interfaz Abstracta en Java operation = Metodo de clase message = parámetros y valores de regreso según codificación public interface Servicio extends java.rmi.remote { public String Operacion(String param) throws java.rmi.remoteexception; }
Desarrollo de Web Services en Java A partir de definición WSDL ó a partir de clases java Uso de herramientas (IDE, Ant) Pasos generales para generación de Web Service wsdl2java Generación de clases de tipos y operaciones wscompile.sh -import -d./classes -keep -s./src -f:serializeinterfaces,wsi -verbose -model./ ServicioSumaNumeros_model.xml.gz./config.xml Modificar código generado (implementación de lógica de web service) - recompilar Generar clases de servicio wscompile.sh -gen:server -classpath./classes -d./classes -keep -s./src -verbose config.xml Crear estructura de aplicación web (WAR) Instalación de aplicación web en servlet container
Desarrollo de Web Services en Java Ejemplo de implementación de servicio (Suma Numeros)
Desarrollo de Web Services en Java Modelos de programación para clientes de Web Services Stub Se genera(n) clase(s) al compilar y están ligadas a transporte del XML (HTTP o SOAP) Se implementa javax.xml.rpc.stub Se utilizan clases particulares de API de implementación (JAXRPC, AXIS) Mejor rendimiento, método menos dinámico Ejemplo de cliente Stub
Desarrollo de Web Services en Java Modelos de programación para clientes de Web Services Dynamic Proxy: Interfaz WSDL creada al momento de compilación pero la implementación de proxy en cliente se hace en runtime Se genera al vuelo durante ejecución de cliente, no al compilar El servicio proporciona la definición (WSDL) que el proxy acuerda durante ejecución Más fácil de programar pero mas lento que Stub Ejemplo de cliente Proxy
Desarrollo de Web Services en Java Modelos de programación para clientes de Web Services Dynamic Invocation Interface (DII): Tanto el WSDL como la implementación misma del cliente se hace en runtime Control completo al programador del cliente Método más dinámico pero mayor complejidad en programación Cliente encuentra servicio e invoca vía Broker Usar cuando no se conoce la definición hasta ejecución (no al compilar) Ejemplo de cliente DII
Donde vamos? Introducción a Web Services Desarrollo de Web Services en Java Web Services y Seguridad Integración e Interoperabilidad J2EE usando Web Services Trayectoria de Web Services
Web Services y Seguridad Seguridad en Web Services: Panorama general de estándares W3C (World Wide Web Consortium) XML Encription, XML Signature, SOAP IETF (Internet Engineering Task Force) SSL, TLS, HTTP sobre SSL/TLS, HTTPS OASIS (Organization for the Advancement of Structured Information Standards) Web Services Security (WSS), SOAP message level security, SAML
Web Services y Seguridad Seguridad en Web Services: Panorama general de estándares Draft Inicial Draft Maduro V1 Completa Estabilidad
Web Services y Seguridad Seguridad en Web Services: Implementación en J2EE JAXRPC utiliza XWS-Security APIs para seguridad en Web Services bajo los siguientes estándares: XML-DSig (Apache/W3C) para firmas digitales XML-Enc (Apache/W3C) para encripción de mensajes Tokens de usuario y certificados X.509 para autenticación basados en OASIS WSS Username Token Profile 1.0 y OASIS WSS X509 Certificate Token Profile 1.0 JSR 105 es estándar para firmas digitales y JSR 106 es estándar para encripción, no usados por JAXRPC (versiones futuras) Base de datos certificados basada en JKS (Java Key Store)
Web Services y Seguridad Capas de seguridad Nivel Transporte: Autentificación básica, autentificación por certificado sobre SSL/TLS. Codificación de usuario/contraseña en stub de cliente, puerto de servicio en HTTPS con J2EE security constraints. Nivel Mensaje: Información de seguridad dentro de mensaje SOAP (encabezado) por ejemplo: la firma de contenido, certificado x.509 de remitente. Problemas con administración de infraestructura PKI en B2B Formatos de mensaje en desarrollo por OASIS por lo cual es EA en XWS-Security de JWSDP JAXRPC utiliza Handlers: puntos de intercepción en el procesamiento del mensaje entre cliente y servicio
Web Services y Seguridad Ejemplo de implementación de WSS (Pago Electronico): Encripción de mensajes SOAP Autentificación vía certificados X.509 Cliente Msg Firmado = SpK1(M),PK1 Server (Tomcat) Msg Encriptado = EPK2(M) JKS contiene: a)pk1 y PK1 de cliente b)pk2 de server JKS contiene: a)pk2 y PK2 de server b)pk1 de cliente Hash de msg a partir de pk1 y envío de PK1 (para verific por parte de server) Encripción de msgusando PK2 Desencripción usando pk2 p = Llave privada P = Llave pública
Donde vamos? Introducción a Web Services Desarrollo de Web Services en Java Web Services y Seguridad Integración e Interoperabilidad J2EE usando Web Services Trayectoria de Web Services
Integración e Interoperabilidad Procesos de negocio con Web Services Especificación de Business Process Execution Languaje (BPEL) for Web Services 1.1 por IBM BPEL es un lenguaje en XML para describir el comportamiento de un proceso de negocio basado en Web Services Acceso a ciertos procesos de negocio para otras empresas de manera estándar: proveedores, distribuidores, cadena de aprovisionamiento Ejemplo de implementación ActiveBPEL
Integración e Interoperabilidad WS-I Esfuerzo para proveer interoperabilidad para Web Services entre aplicaciones, lenguajes de programación y plataformas: Microsoft, IBM, Sun No genera especificaciones o estándares, más bien genera perfiles, marcos de referencias para pruebas de interoperabilidad (conformance) J2EE 1.4 provee compatibilidad para Web Services según WS-I para: WSDL, SOAP y WSS. Implementado en JWSDP Provee escenarios de compatibilidad, herramientas para el análisis de configuraciones (WSDl/UDDI) así como para monitoreo de mensajes
Integración e Interoperabilidad Consideraciones generales de integración para Web Services Abuso de Web Services en sistemas (sobrecarga adicional) Limitaciones en el uso de tipos de estructuras de datos cuando se utilizan diferentes implementaciones (.NET, Java) Implementaciones de estándares de Web Services carecen de WSS Federación de identidad no madura entre implementaciones, requiere de infraestructura de identidad Mecanismo adecuado para Service Oriented Architectures (SOA), principalmente como enlace entre los procesos de negocio de empresas
Web Services Sector Financiero Web Service para Sector Financiero Arquitectura SOA Estandarización de estructura de transacciones: IFX Seguridad en transacciones Crecimiento hacia exterior/interior con procesos de negocio Ejemplos de implementación
Web Services Sector Financiero App WF Mainframe Msg App Orq WS J2EE Web App Consumidores WSS BD IDs LDAP Sincronización Auditoría Identidad Rep1 Rep2 Rep3 Rep4
Donde vamos? Introducción a Web Services Desarrollo de Web Services en Java Web Services y Seguridad Integración e Interoperabilidad J2EE usando Web Services Trayectoria de Web Services
Trayectoria Web Services Adopción de tecnología de Web Services actual Actualmente se implementan (México) muy pocos Web Services y son simples, orientados a consumidores, sin estado Principalmente en EUA se ha iniciado la implementación de Web Services estilo EAI (Enterprise Application Integration), con frontera la misma organización A corto plazo: B2B, implementando Web Services para extranet con el fin de habilitar integración con los procesos de negocio de la empresa hacia socios, clientes y otros
Trayectoria Web Services Colaboración de negocio: ebxml, EDI, RosettaNet y BizTalk Limitantes en WSDL, SOAP y UDDI: no resuelven colaboración de negocio, no hay repositorio de objetos de negocio EDI muy pesado, requiere de VPN y personalización para cada negocio RosettaNet provee definiciones muy rígidas y no ofrece descubrimiento BizTalk es propietario, una sola plataforma y no existe concepto de colaboración de negocio o perfil de socios ebxml: crear una comunidad de comercio electrónica donde empresas de cualquier tamaño puedan localizarse y llevar a cabo negocio a través del intercambio de mensajes XML Especificaciones para Procesos de negocio, modelo de registro y servicios, mensajería y colaboración entre socios JAXR provee API para registros basados en ebxml
Colaboración de negocio: ebxml Trayectoria Web Services
Trayectoria Web Services Colaboración de negocio: ebxml Web Services + ebxml Tipo Request/Response Colaboración Comunicación RPC/Document Síncrona/Asíncrona Descr. Servicio WSDL CPP, CPA (WSDL dentro de CPP/CPA) Protocolo SOAP, XML ebxml Message Service sobre SOAP, XML o BPSS Estándar de Ninguno EDIFACT, OAGI, BODs, contenido UBL, etc Localización UDDI Registry ebxml Registry
Trayectoria Web Services Rendimiento: Fast Web Service Protocolo vs. Tiempo 20 elementos
Preguntas