Tutorial de BPEL con OpenESB (II)
Indice
Tutorial de BPEL con OpenESB (II)
Esta es la segunda parte del tutorial. La primera se encuentra en Tutorial de BPEL con OpenESB (I).
Desplegar el módulo BPEL en el ESB
En OpenESB, todo módulo de la categoría SOA será desplegado en el contenedor de JBI dentro de una Composite Application. Por ello creamos en NetBeans un poryecto de este tipo desde el menú File | New Project | SOA | Composite Aplication y lo nombramos AplicacionTuLibroOnline:
Composite Application de OpenESB
A continuación añadimos los módulos SOA que componen nuestra aplicación, pulsando con el botón derecho sobre la carpeta JBI Modules | Add JBI Module…
Añadir módulo SOA
seleccionamos el proyecto ServiciosVenta y pulsamos el botón Add Project JAR Files:
Seleccionamos nuestro proyecto BPEL
A continuación compilamos los proyectos introducidos seleccionando Clean and Build haciendo botón derecho sobre el nombre del proyecto, AplicacionTuLibroOnline. El resultado se mostrará en el editor CASA (Composite Application Service Assembly):
Editor de OpenESB para composición de aplicaciones (CASA)
Guardamos el proyecto y lo desplegamos, haciendo de nuevo botón derecho sobre el nombre del proyecto | Deploy. El proceso BPEL será ahora un web service publicado en: http://localhost:9080/VentaLibrosWSDLService/VentaLibrosWSDLPort?WSDL
WSDL del web service implementado con BPEL
Resulta interesante ver el despliegue de los distintos artefactos que estamos utilizando. En la sección Services en el panel izquierdo de NetBeans vemos que las aplicaciones web que contienen los web services están desplegadas en el contenedor de aplicaciones web de GlassFish, y que la aplicación compuesta SOA está desplegada dentro del contenedor de JBI (Java Business Integration):
Artefactos deplegados en OpenESB
Nuestra aplicación BPEL se apoya en las siguientes dos funcionalidades del ESB (implementadas como módulos JBI):
- Conectividad a servicios por HTTP: HTTP Binding Component (sun-http-binding)
- Motor de ejecución del código fuente BPEL que hemos editado gráficamente: BPEL Service Engine (sun-bpel-engine)
JBI, el core del ESB de OpenESB
Probar el proceso de compra
Podemos enviar mensajes SOAP sobre HTTP al servicio desarrollando un cliente o simulándolo con alguna aplicación como soapUI. También es posible generar test unitarios con jUnit desde el propio proyecto AplicacionTuLibroOnline, carpeta Test (véase documentación de OpenESB: Testing The Composite Application)
Utilizando soapUI (tutorial: soapUI: jugando con web services) creamos el mensaje de SOAP request al servicio web con los datos para comprar un libro:
Mensaje SOAP request de compra
El servicio nos responde con la información de la compra efectuada:
Mensaje SOAP response con información de la compra
Hagamos otra prueba solicitando 10 unidades del producto (aunque el almacén no sirve pedidos de más de 5 libros):
Compra de 10 unidades de un libro
El resultado será un mensaje de notificación de la falta de stock para el pedido.
La editorial no puede servir un pedido tan grande…
A la vista de estos resultados, el proceso de negocio ha sido implementado en BPEL con éxito.
Conclusión
BPEL (aka BPEL4WS o BPEL for Web Services) es un estándar para la orquestación de servicios web. Su código fuente está basado en XML y extensiones al lenguaje XPath, y puede ser ejecutado en motores que habitualmente están incluidos en implementaciones ESB de libre uso o comerciales.
Como hemos visto, OpenESB ofrece en NetBeans un editor gráfico que permite modelar fácilmente procesos de negocio y en GlassFish ESB el soporte para su ejecución. Extrapolando el ejemplo del tutorial a procesos de negocio reales, podemos hacernos una idea del potencial que ofrecen este tipo de tecnologías para los entornos empresariales en los que tales procesos cambian con frecuencia según sus estrategias de mercado.
Te felicito por el ejemplo, me ayuda mucha a comprender BPEL, ahora estoy implementando un Web Services con WS-Security!
Gracias
Hola Iván, excelente tu trabajo, sin embargo no pude hacerlo correr en Netbeans 6.5.1, por favor si tuvieras alguna solución, te estaré agradecido. El error es el siguiente:
——————————————————————
Deploying a service assembly…
host=localhost
port=4848
file=D:\\\\Mis documentos\\\\NetBeansProjects\\\\AplicacionTuLibroOnline/dist/AplicacionTuLibroOnline.zip
ERROR: Successful execution of Deploy: D:\\\\Mis documentos\\\\NetBeansProjects\\\\AplicacionTuLibroOnline/dist/AplicacionTuLibroOnline.zip
WARNING: (JBIMA0404) La implementación del conjunto de servicios AplicacionTuLibroOnline se ha realizado parcialmente; no se han podido implementar algunas unidades de servicio.
* Component: sun-http-binding
ERROR: (SOAPBC_DEPLOY_2) HTTPBC-E00201: Error en la implementación. javax.wsdl.WSDLException: WSDLException (at /definitions/types/xsd:schema): faultCode=OTHER_ERROR: An error occurred trying to resolve schema referenced at \\\’\\\’http://localhost:8080/TiendaElectronica/AlmacenService?xsd=1\\\’\\\’, relative to \\\’\\\’file:/C:/Archivos de programa/glassfish-v2.1/domains/domain1/jbi/service-assemblies/AplicacionTuLibroOnline.2/AplicacionTuLibroOnline-sun-http-binding/sun-http-binding/META-INF/ServiciosVenta/src/ServicioAlmacen/localhost_8080/TiendaElectronica/AlmacenService.wsdl\\\’\\\’.: java.net.URISyntaxException: Illegal character in path at index 17: file:/C:/Archivos de programa/glassfish-v2.1/domains/domain1/jbi/service-assemblies/AplicacionTuLibroOnline.2/AplicacionTuLibroOnline-sun-http-binding/sun-http-binding/META-INF/ServiciosVenta/src/ServicioAlmacen/localhost_8080/TiendaElectronica/AlmacenService.wsdl
D:\\\\Mis documentos\\\\NetBeansProjects\\\\AplicacionTuLibroOnline\\\
bproject\\\\build-impl.xml:213: Deployment failure.
BUILD FAILED (total time: 3 seconds)
——————————————————————
Nota.- Cabe aclarar que los servicios corren bien, el problema se da cuando le doy deploy a AplicacionTuLibroOnline. Tengo activados los componentes sun-bpel-engine y sun-http-binding.
Hola Iván, junto con felicitarte y agradecerte este tutorial, tengo el mismo problema que \\\»marceloqo\\\» ¿como se podría solucionar ese detalle?
Saludos!
Estimado, excelente, tremendo aporte….. un muy buen ejemplo..