ESTUDIOS PROFESIONALES PARA EJECUTIVOS GUIA DE PROCESOS BPEL SISTEMAS DISTRIBUIDOS (IS18) 1. Iniciar la base de datos en caso no se haya hecho previamente. Se debe seleccionar el menú Iniciar Base de datos. 2. Asegurarse que la base de datos levanto correctamente. Se debe seleccionar Ir a la Página Inicial de Base de datos. 3. Ingresar al directorio donde se encuentra instalado el Oracle MiddleWare y ejecutar el comando para levantar los servidores. Verificar en el directorio g:\Oracle\Middleware 4. Al ejecutar el comando se abren dos ventanas. La primera levanta el servidor WebLogic y la segunda levanta el servidor SOA. La primera ventana tarda aproximadamente 2 minutos en terminar de ejecutarse, mientras que el servidor SOA tarda aproximadamente 9 minutos en levantarse completamente. Tener en consideración que de acuerdo al comando enviado, tardará “n” segundos antes de iniciar el servidor SOA. Por ejemplo al llamar al comando start_all 200, esto significa que luego de 200 segundos iniciará el servidor SOA. 5. Para verificar que el WebLogic se inició completamente se debe verificar que aparezca una ventana de comandos con un mensaje de RUNNING al final de la ventana. 6. Para verificar que el servidor SOA se inició correctamente se debe verificar que aparezca una ventana de comandos con un mensaje de accepting requests al final de la ventana. 7. En este momento estamos listos para iniciar el JDeveloper que nos permitirá realizar el proceso BPEL. WEB SERVICE EN JAVA 1. El objetivo de esta sección es crear un WebService que simulará devolver el precio de un producto. El Web service será realizado en Java a modo de ejemplo. 2. En JDeveloper cerrar todas las aplicaciones y proyectos existentes de tal manera que iniciemos desde cero. 3. Al cerrar todos los proyectos y aplicaciones nos mostrará una ventana similar a la siguiente: 4. Crear una nueva aplicación de tipo Generic Application con los siguientes parámetros 5. Presionar Next 6. Nombrar al proyecto PrjProveedor y presionar Finish. 7. En el proyecto PrjProveedor crear un Java Class 8. Nombrar al java Class de la siguiente manera: 9. Al presionar OK se crea una clase Proveedor que nos permitirá crear métodos que luego serán las operaciones de un servicio. 10. La clase proveedor debe tener una operación obtenerPrecio que debe devolver un objeto de tipo Cotización que tiene el código del producto, nombre del producto y precio del producto. Para poder devolver esta información es necesario crear una nueva clase llamada Cotización que tenga los atributos a devolver. 11. Al presionar OK Se crea la clase cotización. 12. Se deben agregar las propiedades de la clase Cotización y luego generar sus métodos 13. En este momento vamos a crear la operación en la clase Proveedor que devuelva la información de una venta recibiendo como input el código. 14. Generar el proyecto para asegurarnos que no existan errores 15. Revisar la ventana de mensajes para verificar que no existan errores: 16. En este momento estamos listos para generar un Web Service sobre la clase Proveedor 17. Presionar Next 18. Asegurarse que el Nombre del Web Service se llame ProveedorService y presionar Next 19. En la pantalla de Message Format se debe seleccionar SOAP 1.2 20. Seleccionar el método a publicar en el servicio. 21. Presionar finish 22. El Web service se ha generado y ahora debemos probar 23. Seleccionamos el menú Test Web Service para probar el Web Service del proveedor 24. El procedimiento que realiza el menú Test Web Service es a. Compila el Servicio b. Inicia el Weblogic interno (WebLogic incorporado al Jdeveloper) c. Despliega el servicio en el Weblogic interno d. Muestra una pantalla para probar el Web Service e. (WebLogic incorporado al Jdeveloper) 25. En este momento debemos hacer un alto para copiar la ruta del wsdl. Presionar el botón Open WSDL… 26. Copiar el WSDL URL en un archivo notepad de tal manera que lo tengamos para luego usarlo en el BPEL. Este punto es muy importante para la continuidad del proyecto. 27. Luego de haber copiado presionar OK y regresar a la ventana de testing para continuar con la prueba. 28. Ingresar un código en el campo arg0. A modo de ejemplo ingresar el código 135723 y presionar SendRequest 29. Como resultado nos muestra lo siguiente 30. En este momento ya tenemos el Web service proveedor que retorna los datos de un producto. 31. BPEL SINCRONO 1. El siguiente paso es crear un proyecto BPEL síncrono que consuma el Web Service del proveedor. 2. Crear un proyecto de tipo SOA. 3. Presionar OK 4. Nombrar al proyecto de la siguiente manera: 5. Presionar Next y crear un Empty Composite 6. Presionar Finish 7. Se crea un composite application con tres swin lanes para agregar los componentes: 8. El primer paso que debemos realizar es agregar el servicio de proveedor que se ha creado. Para realizar esto se debe agregar un componente WebService al swin lane derecho, sin embargo debemos conocer la ruta del WSDL previamente (Esto se realizó en la sección anterior). 9. Ingresar los siguientes datos 10. Al presionar OK se agrega un Web Service en el Swin lane derecho 11. El siguiente paso es crear un Componente BPEL. Sin embargo existen varias maneras de crear un proceso BPEL que puede ser basado en un WSDL, XSD, etc. En este caso vamos a usar un XSD que nos permita indicar cuáles son los INPUT y OUTPUT del proceso BPEL. 12. Abrir el notepad y crear un archivo XSD de nombre ProveedorSchema con las siguientes características: <?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jaxws.dev.java.net. RI's version is Oracle JAX-WS 2.1.4. --> <xs:schema xmlns:tns="http://prjschema/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://prjschema/"> <xs:element name="obtenerPrecio" type="tns:obtenerPrecio" /> <xs:element name="obtenerPrecioResponse" type="tns:obtenerPrecioResponse" /> <xs:complexType name="obtenerPrecio"> <xs:sequence> <xs:element name="arg0" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> <xs:complexType name="obtenerPrecioResponse"> <xs:sequence> <xs:element name="return" type="tns:cotizacion" minOccurs="0" /> </xs:sequence> </xs:complexType> <xs:complexType name="cotizacion"> <xs:sequence> <xs:element name="codigo" type="xs:string" minOccurs="0" /> <xs:element name="nombre" type="xs:string" minOccurs="0" /> <xs:element name="precio" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> 13. El archivo se debe guardar en C:\sd\AppProveedor\PrjProveedorBPEL\xsd 14. Regresar al composite y en la sección componentes agregar un BPEL Process con las siguientes características: 15. En input se debe buscar el archivo XSD que acabamos de crear y seleccionar la sección obtenerPrecio y presionar OK 16. En Output se debe seleccionar obtenerPrecioResponse 17. Presionar OK 18. No olvidar que en la ventana de creación del proceso BPEL se debe seleccionar de tipo síncrono y marcar el check de expose as a web service. 19. Presionamos OK 20. Se crea el Proceso BPEL y el servicio que se expone a los clientes 21. Procedemos a enlazar el BPEL con el ServicioProveedor 22. Hacemos doble click en el BPEL Process para poder definir las actividades a realizar 23. Nos muestra el editor del BPEL Process 24. Las actividades básicas que se muestran son receiveInput y replyOutput. Esto se crea por defecto dado que es un proceso Síncrono. 25. Debemos ahora enviar los datos recibidos en el proceso BPEL al servicioProveedor. Para realizar esto se debe crear una actividad de invoke la cual debe invocar al servicio ServicioProveedor 26. Hacer doble click en la actividad invoke para asignarle un nombre. Le colocamos de nombre invocaProveedor y presionamos OK. 27. Ahora se debe enlazar invocaProveedor con el servicio del proveedor. 28. Dado que esta actividad debe llamar a un servicio de manera síncrona. Esto significa que el la actividad invocaProveedor tiene una variable de entrada y una variable de salida que pasan por el mismo enlace. 29. Es por esta razón que se deben crear ambas variables en este momento. 30. Abrir la actividad InvocaProveedor y presionar el signo de sumar verde para crear las variables de input y output. Dejar los valores por defecto. 31. Presionar OK 32. En este momento se tiene cuatro variables. La variable que entra al proceso INPUT, la variable que sale del proceso OUTPUT y las variables de input y output creadas en el paso 30. 33. Necesitamos entonces hacer que los datos de la variable de Input sean pasados a la variable de input del proveedor para poder invocar el servicio. Entonces se debe agregar una actividad de asignación. 34. Abrir la actividad Assign para realizar el copiado de los valores de la variable de Input. 35. Presionar el símbolo de suma verde para poder agregar el proceso de copia. 36. En la pantalla de copiado se debe copiar el código entre ambas variables, dado que es el código que ingresa a la operación que se requiere usar. 37. Note como se copia de InputVariable a InvocaProveedor_obtenerPrecio_InputVariable. 38. Presionar OK 39. Presionar nuevamente OK en la variable de Assign. 40. En este momento ya se logró copiar los valores y le llegarán al Web Service. 41. La respuesta del Web Service es la cotización y esos valores se encuentran en la variable InvocaProveedor_obtenerPrecio_OutputVariable. 42. Entonces lo que tenemos que hacer ahora es el resultado de la llamada al servicio debemos de copiarlo a la variable de output que es la salida del proceso BPEL. Para realizar esto debemos crear otro Assign y luego copiar los valores como se hizo previamente. 43. Crear un Assign entre InvocaProveedor y Reply 44. Hacer doble click en el nuevo Assign y presionar el signo de más verde para crear una nueva copia de valores. 45. En este caso se debe copiar desde InvocaProveedor_obtenerPrecio_OutputVariable a la variable Output 46. Hacer un copy por cada atributo. Debe quedar de la siguiente manera: 47. Presionar OK. 48. Presionar el check verde para validar el proceso. 49. Compilar el proceso. 50. Asegurarse que no se muestren errores 51. Desplegar el aplicativo 52. Revisar los valores y presionar OK 53. En caso solicite usuario y password ingresar weblogic, welcome1 54. Asegurarse que el proceso fue desplegado correctamente. 55. Ingresar al Enterprise Manager para probar el aplicativo. 56. http://localhost:7001/em 57. Ingresar el usuario y password y buscar la aplicación desplegada. 58. Presionar Probar 59. Ingresar el valor de 135723 y presionar el botón probar Servicio Web CREAR UN PROCESO BPEL ASYNC 1. Crear un proyecto SOA 2. Nombrar el proyecto PrjProveedorBPELAsync 3. En El Swinlane de External References crear el Web Service ProveedorService 4. Crear un componente de acuerdo al schema ProveedorSchema de acuerdo a la siguiente estructura <?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.4. --> <xs:schema xmlns:tns="http://prjschema/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://prjschema/"> <xs:element name="obtenerPrecio" type="tns:obtenerPrecioTotal" /> <xs:element name="obtenerPrecioResponse" type="tns:obtenerPrecioTotalResponse" /> <xs:complexType name="obtenerPrecioTotal"> <xs:sequence> <xs:element name="codigo1" type="xs:string" minOccurs="0" /> <xs:element name="codigo2" type="xs:string" minOccurs="0" /> <xs:element name="codigo3" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> <xs:complexType name="obtenerPrecioTotalResponse"> <xs:sequence> <xs:element name="return" type="tns:cotizacion" minOccurs="0" /> </xs:sequence> </xs:complexType> <xs:complexType name="cotizacion"> <xs:sequence> <xs:element name="precioTotal" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> 5. Grabar el archivo en el directorio xsd del proyecto. 6. Refrescar presionando el ícono que mantiene dos flechas juntas: 7. Crear el Proceso BPEL de tipo Asincrono y crear las variables de entrada y salida. 8. Se muestra una composición de servicios de la siguiente manera 9. Unir el proceso con el Web Service Externo. 10. Doble click en el BPEL 11. Se puede observar que el BPEL Creado automáticamente tiene un receive y un callbackClient. La estructura de este BPEL nos está mostrando gráficamente que es un proceso asíncrono. 12. Dado que recibimos tres códigos para hacer un cálculo total vamos a realizar 3 llamadas al servicio ProveedorService y cada una con un código distinto. Entonces debemos tener 3 invoke que se llaman paralelamente. 13. Agregamos un flow que permite trabajar actividades paralelamente. 14. Por defecto aparecen 2 líneas, sin embargo debemos presionar la flecha azul que aparece con un símbolo más para tener 3 líneas paralelas. 15. En cada una de las líneas debemos agregar un invoke 16. Unimos cada invoke con el proveedor Service de tal manera que colocamos los siguientes valores para cada uno de ellos: a. nombre Invoke1 b. presionar el más verde para crear la variable de input c. presionar el más verde para crear la variable de output 17. Realizar el mismo procedimiento para el Invoke2 e Invoke3 18. El BPEL nos muestra las actividades de la siguiente manera: 19. Ahora es necesario decirle que se debe enviar al servicio. Por cada Invoke se debe crear una actividad de tipo ASSIGN 20. Abrir el Assign1 21. Crear una operación de copia. 22. Crear una operación de copia para el código1 y la variable de Input del Invoke1. 23. Se debe realizar lo mismo con el Invoke2 e Invoke3 24. Invoke2 25. Invoke3 26. Como la llamada al servicio ProveedorService se realiza sincrónicamente, entonces las variables se devuelven por el mismo canal. 27. Agregar un assign que evaluara los resultados de los precios de tal manera que sume los 3 valores y luego devuelve un valor final a la variable de salida del proceso. 28. Hacer doble click en Assign_4 para 29. Crear un copy operation 30. Cambiar en la lista variable por Expression 31. Presionar el ícono de la calculadora de tal manera que muestre la siguiente pantalla. 32. Sumar las 3 variables de precio de cada output 33. Presionar OK 34. Seleccionar en el lado derecho la variable precioTotal 35. Presionar OK para confirmar la asignación. 36. El BPEL Asincrono formado es el siguiente: 37. Compilar el proyecto. 38. Desplegar el proyecto 39. Probar el proyecto desde el Enterprise Manager.