Download Evaluación de plataformas para el desarrollo de WS
Document related concepts
no text concepts found
Transcript
Evaluación de plataformas para el desarrollo de WS Manuel Palomo Duarte Antonio García Domínguez Índice ● Evaluación de herramientas – ● Herramientas complementarias – ● Active BPEL Engine, Glassfish (OpenESB), Apache ODE soapUI, Eclipse Web Tools Platform/BPEL, ... Creación de mockups – BPELUnit, WSDL2Java, respuestas SOAP, ... ● Trabajo futuro ● Comentarios finales Evaluación de sistemas ● Active BPEL Engine (+ Tomcat + JDK 5) – – Sistema completamente libre: ● Active BPEL: GPL + LGPL + posiblemente otras ● Tomcat: Apache License Se analiza la estructura de los .bpr: ● ● – Incluyen los ficheros .bpel, .wsdl, .ppd, referencias a WSDL externos El .ppd indica, con WS-Addressing dónde está y cómo acceder a cada partner Plataforma elegida Evaluación de sistemas ● Glassfish (OpenESB) – También libre – Glassfish Incorpora un servidor de aplic. J2EE pero necesita un motor BPEL – Glassfish + OpenESB (+ NetBeans) – Es muy pesado (incorpora CORBA, BBDD, ...) – El editor que trae para BPEL, WSDL, etc está muy bien Evaluación de sistemas ● Apache ODE (+ Tomcat) – También libre – No tiene interfaz web para controlar los servicios (hay que hacerlo desde Axis) – El despligue de un proceso BPEL es similar a ActiveBPEL – Se ve menos maduro que ActiveBPEL (acaba de publicarse su primera versión estable) Herramientas complementarias ● soapUI ● Eclipse Web Tools Platform: – ● Permite trabajar con Ajax, Xml, EJB, ... (pero no BPEL) Eclipse BPEL: – Quiere proporcionar soporte para crear, editar, probar y depurar procesos BPEL – No está desarrollado completamente todavía – Será independiente del motor BPEL ● soapMonitor (pertenece a Axis2) ● ActiveBPEL Designer Ejecución de casos de prueba ● ● BPEL es un lenguaje concurrente: – Al llegar determinados mensajes se crean instancias paralelas – Cada servicio puede tener una respuesta para cada caso de prueba (sin relación 1 a 1 con las entradas que reciba) Solución: – Tener en cada momento una sola instancia en ejecución y preparar el entorno (mockups) específico para ella Control de Estado ● Uno de los retos es el control de estado: – Puede ser que quiera invocar dos veces un mismo servicio con iguales parámetros pero que cada vez me de un valor distinto. Ejemplos: ● Predicción meteorológica ● Seleccionar datos aleatorios de un conjunto – Se puede solucionar añadiendo marcas de tiempo y correlación (hay que cambiar el WSDL) – ¿Los ejemplos de BPEL lo necesitan? Creación de mockups ● Varias alternativas – Crear procesos BPEL – Crear WS mockups – ● WSDL2Java (del proyecto Apache AXIS2) ● Apache CXF, ZoleraSOAP (no evaluados) Crear respuestas SOAP ● ● Hacerlas nosotros (necesita servidor HTTP + Proxy) Sistemas ya realizados (para usar) – Usar BPELUnit – Usar custom calls de ActiveBPEL Mockups BPEL ● ● Ventaja: – Es muy fácil realizar un procesos BPEL que al recibir un mensaje devuelvan otro – Pueden implementar estado con un bucle de espera de mensajes. Probado en ActiveBPEL, pero aviso de falta de correlación (lo soluciona incrustando un ID en la cabecera SOAP) Problema: – Hay que instalarlos, desplegarlos y lanzar una instancia para cada caso de prueba Mockups WS: WSDL2Java ● WSDL2Java – Funciona: ● Se invoca wsdl2java.sh ● Se pone la respuesta que dará en un método ● Se compila y se instala – Para que nos sirviera habría que convertir la especificación del caso de prueba a código Java para incluirlo en el método – Implementar el control de estado parece fácil – Algunas opciones cambian de AXIS a AXIS2 Respuestas SOAP propias ● Como SOAP va sobre HTTP hay que tener un servidor HTTP: – Tomcat es pesado y no es fácil de manejar – Sería mejor un servidor ligero que pueda dar respuestas HTTP predefinidas: ● ● ● Fallo, WS no encontrado, conexión con el WS, timeout... Se implementa dicho servidor Se crea las respuestas SOAP automáticamente indicando su cuerpo Ejemplo de respuesta SOAP <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envel ope/"> <soapenv:Body> <ns2:servicioAsesorRiesgoOperationResponse xmlns:ns2="http://j2ee.netbeans.org/wsdl/servicioAse sorRiesgo"> <riesgo>bajo</riesgo> </ns2:servicioAsesorRiesgoOperationResponse> </soapenv:Body> </soapenv:Envelope> Uso de BPELUnit ● ● ● Permite hacer pruebas unitarias de procesos desplegados en BPEL Se puede incorporar el motor ActiveBPEL a BPELUnit (es GNU/GPL) Podría facilitar el desarrollo: – ● ● Integración con Eclipse, tareas para Ant Se han ejecutado varios casos de prueba sobre él correctamente Línea de trabajo hasta ahora, parece interesante Demostración uso de BPELUnit ● ● Requisitos software: – BPELUnit 1.0 (la más reciente) – ActiveBPEL 4.1 (motor BPEL) – Tomcat 5.5.25 (contenedor servlets) – Ant 1.7.0 – Sun JDK 5.0 o superior (incluye JVM) Configuración: – BPELUNIT_HOME tiene la ruta a BPELUnit – CATALINA_HOME tiene la ruta a Tomcat – JAVA_HOME tiene la ruta a la JVM Uso custom ActiveBPEL ● ● ActiveBPEL incorpora custom invoke handler: – Se enlaza/asocia (bind) las definiciones WSDL al manejador que indiquemos (escrito en Java) – El motor no invoca al servicio, sino el código Java de su máquina que tiene asociado Descubierta esta semana, no evaluada por ahora Trabajo futuro I ● ● Analizador del árbol XML de BPEL: – Permite conocer valores límite – Permite instrumentar el código – Según parece está ya realizado por Antonia Reina, miembro del proyecto (US) Incluir asertos en el código BPEL: – El estándar permite extender BPEL – Hay que buscar una sintaxis adecuada ● BPELUnit usa expresiones XPath booleanas Ejemplo XPath <sendReceive port="BookingProcessPort" operation="process" service="client:BookingProcess"> <send> <data> <client:bookme> <client:employeeID>848</client:employeeID> </client:bookme> </data> </send> <receive> <condition> <expression> client:bookinganswer/client:booked/text() </expression> <value>'true'</value> </condition> </receive> </sendReceive> Trabajo futuro II ● ● Instrumentador de código BPEL – Analizar las variables de la composición – Enviar sus valores a WS de log antes y después de cada operación de interés Añadir características de BPEL a Daikon – ● Timeout, compensaciones, etc ¿Los ejemplos de BPEL necesitan control de estado? – Si usamos ejemplos sencillos no Comentarios finales ● Cuidado con el código que usamos: – – El estándar final BPEL 2.0 ha cambiado algunos detalles de la sintaxis: ● Asignaciones con Xpath (no getVariableData) ● Atributo query ahora es un elemento anidado Hay ejemplos BPEL que usan extensiones de algunos motores concretos (Oracle BPEL)