Guías para la Práctica (3): Uso de ActiveBPEL y Eclipse BPEL ...
Guías para la Práctica (3): Uso de ActiveBPEL y Eclipse BPEL ...
Guías para la Práctica (3): Uso de ActiveBPEL y Eclipse BPEL ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Introducción<strong>Active<strong>BPEL</strong></strong> es un motor open-source que implementa<strong>BPEL</strong>4WS 1.1 y WS-<strong>BPEL</strong> 2.0.Mantenido por <strong>la</strong> empresa Active Endpoints, quecomercializa versiones avanzadas <strong>de</strong>l mismo.Otras opciones: JBOSS BPM, Apache ODE.<strong>Eclipse</strong> <strong>BPEL</strong> Designer es un plugin <strong>para</strong> <strong>Eclipse</strong> quepermite crear gráficamente flujos <strong>BPEL</strong>.Hay algunas incompatibilida<strong>de</strong>s:E.g. Las rutas Xpath generadas en <strong>la</strong>s expresiones por<strong>Eclipse</strong> <strong>BPEL</strong> Designer pue<strong>de</strong>n no funcionar directamente en<strong>Active<strong>BPEL</strong></strong> (no necesarias en nuestra práctica).Los utilizaremos <strong>para</strong> <strong>la</strong> implementación <strong>de</strong> <strong>la</strong>práctica (parte opcional).Veremos primero <strong>Active<strong>BPEL</strong></strong> y <strong>de</strong>spués <strong>Eclipse</strong> <strong>BPEL</strong>Designer.
Deploy <strong>de</strong> procesos (1)Instrucciones en docs/<strong>de</strong>ploy_bpel.txtCrear un directorio con los siguientes componentes:wsdl. Contiene los ficheros .wsdl que <strong>de</strong>scriben el servicio webresultante <strong>de</strong> nuestro proceso <strong>BPEL</strong> y los servicios web utilizadospor éste.bpel. Contiene el fichero .bpel que <strong>de</strong>fine nuestro flujo.META-INF. Contiene el fichero wsdlCatalog.xml, quei<strong>de</strong>ntifica los ficheros wsdl necesarios.Fichero .pdd que <strong>de</strong>scribe meta-información <strong>de</strong> <strong>de</strong>ployment.Empaquetado:jar cf mybpel.bpr mybpel.pdd wsdl META-INF bpelDeploy:cp mybpel.bpr $CATALINA_HOME/bprEsperar unos segundos hasta que <strong>Active<strong>BPEL</strong></strong> <strong>de</strong>tecte el procesoy finalice su <strong>de</strong>ploy.
Deploy <strong>de</strong> procesos (2)Ver docs/fileFormats.txtmyBpel.pddEspecifica nombre y localización <strong>de</strong>l proceso <strong>BPEL</strong>.Define un elemento partnerLink <strong>para</strong> cada partner<strong>de</strong>l proceso, especificando su rol y un elementoEndPointReference (especificación WS-Addressing)<strong>para</strong> indicar cómo localizarlo.También especifica un conjunto <strong>de</strong> referencias alos ficheros .wsdl utilizados por el proceso.
Deploy <strong>de</strong> procesos (3)
Deploy <strong>de</strong> procesos (4)
Deploy <strong>de</strong> procesos (5)El elemento process especifica el nombre (cualificado conespacio <strong>de</strong> nombres) y <strong>la</strong> localización <strong>de</strong>l fichero .bpel en elfichero .bpr.Habrá un elemento partnerLink <strong>para</strong> cada PartnerLink<strong>de</strong>finido en nuestro proceso <strong>BPEL</strong>.La primera <strong>de</strong>finición <strong>de</strong> partnerLink <strong>de</strong>l ejemplo i<strong>de</strong>ntifica anuestro proceso (myRole). El valor <strong>de</strong>l atributo service será elnombre <strong>de</strong> nuestro servicio. El atributo binding dice cómo seinvocará (‘RPC’ o ‘MSG’). ‘RPC’ es un estilo obsoleto, por lo queusamos MSG.La segunda <strong>de</strong>fine el PartnerLink <strong>para</strong> el InternalCRM. Elespacio <strong>de</strong> nombres <strong>de</strong>be ser el targetnamespace <strong>de</strong>l fichero.wsdl <strong>de</strong>l servicio.El atributo PortName <strong>de</strong>be tomar el valor <strong>de</strong>l tipo <strong>de</strong> puerto<strong>de</strong>finido en el fichero .wsdl <strong>de</strong>l servicio.El contenido <strong>de</strong>l elemento ServiceName <strong>de</strong>be ser el nombre<strong>de</strong>l servicio <strong>de</strong>finido en el fichero .wsdl.
Deploy <strong>de</strong> procesos (6)En el elemento wsdlReferences habrá unsub-elemento wsdl por cada fichero .wsdlque utilice nuestro flujo (incluyendo serviciosweb <strong>de</strong> apoyo y <strong>de</strong>finición <strong>de</strong> partner linktypes).El valor <strong>de</strong>l atributo namespace se ignora.El valor <strong>de</strong>l atributo location es una “c<strong>la</strong>ve”<strong>para</strong> el fichero wsdlCatalog.xml.
Deploy <strong>de</strong> procesos (7)wsdlCatalog.xml
Deploy <strong>de</strong> procesos (y 8)Una entrada wsdlEntry por cada fichero wsdlutilizado.Una entrada schemaEntry por cada fichero .xsdutilizado.C<strong>la</strong>sspath i<strong>de</strong>ntifica <strong>la</strong> ruta al fichero wsdl <strong>de</strong>s<strong>de</strong> <strong>la</strong>ruta dón<strong>de</strong> se genera el fichero .bpr.Location es el valor <strong>de</strong> un atributo location <strong>de</strong>un elemento <strong>de</strong>ntro <strong>de</strong> <strong>la</strong> secciónwsdlReferences <strong>de</strong>l fichero .pdd.Sólo necesario <strong>para</strong> los wsdl.
Administración y <strong>de</strong>puraciónHeramienta <strong>de</strong> administración en:http://maquina:puerto/BpelAdminDepuración en Deployment:Ver salida <strong>de</strong>l Tomcat por <strong>la</strong> salida estándar.A veces los errores son más explicativos.Ver ‘Deployment Log’ en <strong>la</strong> herramienta <strong>de</strong> administración.Ver ‘Deployed processes’ <strong>para</strong> ver si el proceso ha sidoinsta<strong>la</strong>do con éxito.Depuración en Ejecución:Pue<strong>de</strong> activarse el log escogiendo <strong>la</strong> opción ‘Configuration’ ymarcando <strong>la</strong> casil<strong>la</strong> <strong>de</strong> ‘Logging Enabled’.Cada ejecución recibe un id (pue<strong>de</strong> verse <strong>la</strong> lista con <strong>la</strong>opción ‘Active Processes’).Haciendo click en el proceso, pue<strong>de</strong> acce<strong>de</strong>rse a una trazagráfica <strong>de</strong> su ejecución, viendo el estado <strong>de</strong> cada variable y<strong>de</strong> cada actividad, así como acce<strong>de</strong>r al log generado(pinchando en <strong>la</strong> lupa <strong>de</strong> <strong>la</strong> parte superior izquierda).
Pasos <strong>para</strong> <strong>la</strong> práctica (1)1. Crear los servicios web <strong>de</strong> apoyo (Mock)1. CRM Interno (basado en el existente).2. Herramienta comunicación corporativa.3. Asignación <strong>de</strong> recursos inci<strong>de</strong>ncias.NOTA: No es necesario consi<strong>de</strong>rar excepciones.2. Colocar los ficheros wsdl <strong>de</strong> los servicios web <strong>de</strong>apoyo en el directorio wsdl <strong>de</strong> mi proyecto <strong>BPEL</strong>.1. Colocar también los ficheros xsd <strong>de</strong> apoyo.
Pasos <strong>para</strong> <strong>la</strong> práctica (2)3. Usar <strong>Eclipse</strong> <strong>BPEL</strong> Designer <strong>para</strong> crear el flujo.Normalmente generará:1. Fichero wsdl <strong>de</strong>scribiendo <strong>la</strong> interfaz que ofrecerá el servicioweb resultado <strong>de</strong> mi proceso <strong>BPEL</strong>. Normalmente tendrá <strong>la</strong><strong>de</strong>finición <strong>de</strong> tipos, mensajes, tipos <strong>de</strong> puerto y elpartnerlinktype que mo<strong>de</strong><strong>la</strong> <strong>la</strong> interacción con el cliente.2. Un fichero WSDL l<strong>la</strong>mado MyProcessArtifacts.wsdlque <strong>de</strong>finirá los PartnerLinkTypes <strong>para</strong> los servicios webexternos utilizados por el proceso <strong>BPEL</strong>.3. El fichero MyProcess.bpel.4. Pue<strong>de</strong>n ser necesarios algunos pequeños cambios<strong>de</strong>bido a bugs <strong>de</strong> <strong>Eclipse</strong> <strong>BPEL</strong> Designer (explicadosmás a<strong>de</strong><strong>la</strong>nte).5. Colocar los nuevos ficheros en su sitio y empaquetare insta<strong>la</strong>r nuestro proceso <strong>BPEL</strong>.
Pasos <strong>para</strong> <strong>la</strong> práctica (y 3)6. Crear un cliente <strong>para</strong> invocar el servicio web <strong>de</strong>nuestro proceso <strong>BPEL</strong>.1. Nuestro servicio colgará <strong>de</strong>:http://maquina:puerto/active-bpel/services/2. Recordad que <strong>la</strong> traza <strong>de</strong> ejecución pue<strong>de</strong> verse en <strong>la</strong> adminweb <strong>de</strong> <strong>Active<strong>BPEL</strong></strong>, haciendo click en <strong>la</strong> lista <strong>de</strong> ‘ActiveProcesses’.
<strong>Eclipse</strong> <strong>BPEL</strong> Designer<strong>BPEL</strong> es un lenguaje pensado <strong>para</strong> ser creadográficamente (escribir el XML directamente es tediosoy propenso a errores).<strong>Eclipse</strong> <strong>BPEL</strong> Designer permite diseñar gráficamenteflujos <strong>BPEL</strong> y validarlos.Es in<strong>de</strong>pendiente <strong>de</strong>l motor <strong>de</strong> ejecución utilizado.Actualmente, no hace el <strong>de</strong>ploy <strong>de</strong>l proceso nipermite ejecutarlo / <strong>de</strong>purarlo <strong>de</strong>s<strong>de</strong> <strong>Eclipse</strong>.Tenemos que coger los ficheros generados y hacer el<strong>de</strong>ploy manualmente en el motor <strong>de</strong> ejecución (ennuestro caso <strong>Active<strong>BPEL</strong></strong>) <strong>para</strong> probarlo.http://www.eclipse.org/bpel/
Crear Proyectos1. Crear Proyecto:1. New - Project -<strong>BPEL</strong> 2.0 - Especificar nombre - <strong>BPEL</strong> 2.0Facet.2. Añadir fichero <strong>BPEL</strong> al proyecto:1. New - Other -<strong>BPEL</strong>2.0 File - Escoger nombre <strong>para</strong>el proceso y espacio <strong>de</strong> nombres,2. Escoger p<strong>la</strong>ntil<strong>la</strong>1. Synchronous <strong>BPEL</strong> Process. Receive / Replysíncrono. El más a<strong>de</strong>cuado <strong>para</strong> <strong>la</strong> práctica.2. Asynchronous <strong>BPEL</strong> Process. Receive / Replyasíncrono3. Empty <strong>BPEL</strong> Process. Proceso vacío.3. Guardar en carpeta <strong>de</strong>l proyecto.
Editar y Crear Partner Links (1)1. Necesitamos un PartnerLink <strong>para</strong> el cliente y uno<strong>para</strong> cada servicio externo.2. Si usamos <strong>la</strong> p<strong>la</strong>ntil<strong>la</strong> “Synchronous Process”, se noscrea ya un PartnerLink <strong>para</strong> el cliente. Pue<strong>de</strong> serconveniente editarlo. Para ello, <strong>de</strong>bemos ir al ficheroMyProcess.wsdl que se creó junto con nuestroproceso:1. Po<strong>de</strong>mos editar <strong>la</strong>s partes <strong>de</strong> los mensajes <strong>de</strong> request yresponse ya creados, poniendo un nombre.2. Para <strong>la</strong> práctica, seguramente querremos fijar Referencekind a "type" y escoger string (en <strong>la</strong>s partes <strong>de</strong> ambosmensajes).3. También po<strong>de</strong>mos editar los nombres y parámetros <strong>de</strong> <strong>la</strong>operación (es <strong>la</strong> que nuestro servicio <strong>BPEL</strong> expondrá hacialos clientes).4. Para refrescar los cambios en el fichero <strong>BPEL</strong> pue<strong>de</strong> sernecesario cerrar <strong>Eclipse</strong> y volverlo a abrir.
Editar y Crear Partner Links ( y 2)3. Para añadir los PartnerLinks <strong>para</strong> los serviciosexternos:1. Pulsar ‘+’ al <strong>la</strong>do <strong>de</strong> PartnerLinks.2. Necesitamos crear un PartnerLinkType. Po<strong>de</strong>mos hacerlográficamente partiendo <strong>de</strong> un tipo <strong>de</strong> puerto WSDL:1. Pulsar Browse – Pulsar botón ‘Add WSDL’.2. Escoger ‘File’ y añadir el fichero .wsdl <strong>de</strong>l servicio externo.3. Aparecerán los tipos <strong>de</strong> puerto, se selecciona el <strong>de</strong>seado(normalmente sólo habrá uno y se pulsa ‘ok’).4. Proporcionar un nombre <strong>para</strong> el PartnerLinkType5. Añadir roles. Para cada rol hay que especificar un nombre yun tipo <strong>de</strong> puerto (en <strong>la</strong> práctica lo normal es quenecesitemos un solo rol por PartnerLinkType).6. Pulsar ‘Finish’.3. En <strong>la</strong>s propieda<strong>de</strong>s <strong>de</strong>l PartnerLink, escoger el nuevo rolcomo ‘Partner Role’.
Variables1. Si usamos <strong>la</strong> p<strong>la</strong>ntil<strong>la</strong> “Synchronous Process”, se noscrean ya variables <strong>para</strong> <strong>la</strong> entrada y <strong>la</strong> salida <strong>de</strong>lproceso:1. Po<strong>de</strong>mos editar <strong>la</strong>s variables haciendo click y cambiando sutipo. Pue<strong>de</strong> ser necesario hacerlo <strong>de</strong>spués <strong>de</strong> editar losmensajes <strong>de</strong>l PartnerLink con el cliente.2. Para añadir variables:1. Pulsar ‘+’ al <strong>la</strong>do <strong>de</strong> Variables.2. Pulsar ‘Browse’ <strong>para</strong> escoger el tipo.3. Si el tipo es <strong>de</strong> un mensaje <strong>de</strong>finido en un WSDL <strong>de</strong>lproyecto, marcar ‘Messages’ y escoger el a<strong>de</strong>cuado.4. Si es <strong>de</strong> un WSDL externo hay que marcar antes 'FromImports'.
Crear el Flujo1. Si usamos <strong>la</strong> p<strong>la</strong>ntil<strong>la</strong> “Synchronous Process”, se noscrea una actividad Sequence que tiene <strong>de</strong>ntro unreceive y un reply.2. Para añadir una actividad antes <strong>de</strong> otra, nosponemos sobre <strong>la</strong> segunda y usamos el menúcontextual ‘Insert Before’.3. Para añadir nuevas activida<strong>de</strong>s a un flow o unsequence pue<strong>de</strong> usarse el menú contextual ‘Add’.4. Para configurar una actividad hacemos click sobreel<strong>la</strong> y usamos el panel <strong>de</strong> propieda<strong>de</strong>s.5. Para añadir links en un flow, usamos el menúcontextual ‘Add Link’ <strong>de</strong>s<strong>de</strong> <strong>la</strong> actividad origen yllevamos <strong>la</strong> flecha a <strong>la</strong> actividad <strong>de</strong>stino.6. Para añadir una transitionCondition, nos ponemossobre el link y pulsamos ‘New Condition’ en <strong>la</strong>pestaña <strong>de</strong> propieda<strong>de</strong>s.
Expresiones y validación1. En <strong>la</strong>s activida<strong>de</strong>s ASSIGN y en <strong>la</strong>s condiciones <strong>de</strong>transición, po<strong>de</strong>mos tener que <strong>de</strong>finir expresiones.2. <strong>Eclipse</strong> <strong>BPEL</strong> Designer incluye un editor <strong>de</strong> condicionesque sugiere opciones válidas en cada paso.1. E.g. cuando tecleamos el prefijo utilizado <strong>para</strong> indicar unavariable en una expresión (‘$’) se nos abre un <strong>de</strong>splegable con<strong>la</strong>s variables <strong>de</strong>finidas. Si tras el nombre <strong>de</strong> <strong>la</strong> variableponemos ‘.’ se nos muestran <strong>la</strong>s partes <strong>de</strong> dicha variable,…3. El editor incluye un auto-validador. Los componentesmal configurados se muestran con un botón amarillo(warning) o rojo (error) en su parte inferior izquierda.Ratón sobre botón -> mensaje explicativo. Problemas:1. Guardar o incluso reiniciar <strong>Eclipse</strong> <strong>para</strong> que refresque.2. En ocasiones raras pue<strong>de</strong> indicar algún warning o inclusoalgún error que no lo son realmente (bugs).
Deploy en <strong>Active<strong>BPEL</strong></strong> (1)Los archivos .bpel y .wsdl generados los tenemos en elworkspace <strong>de</strong> <strong>Eclipse</strong>, en el directorio <strong>de</strong>l proyecto.Pue<strong>de</strong> haber que editar manualmente los ficheros.<strong>BPEL</strong> y .WSDL generados <strong>para</strong> que el <strong>de</strong>ploy en<strong>Active<strong>BPEL</strong></strong> sea exitoso.En Windows, <strong>BPEL</strong> Designer hace mal los imports <strong>de</strong> losWSDL externos (pone paths en lugar <strong>de</strong> URIs). Workaround:Ir al fichero MyProcessArtifacts.wsdl y modificar los import <strong>de</strong> loswsdl <strong>de</strong> los servicios web externos.Es suficiente con quitar <strong>la</strong> ruta, <strong>de</strong>jando sólo el nombre <strong>de</strong>lfichero .wsdl (asumiendo que dicho fichero .wsdl va incluido enel directorio wsdl <strong>de</strong>l fichero .bpr <strong>de</strong>l proceso <strong>de</strong> <strong>Active<strong>BPEL</strong></strong>,recordad instrucciones más atrás).
Deploy en <strong>Active<strong>BPEL</strong></strong> (y 2)<strong>Eclipse</strong> <strong>BPEL</strong> Designer pue<strong>de</strong> generar assigns <strong>para</strong>inicializar variables que no funcionan en <strong>Active<strong>BPEL</strong></strong>.Ocurre con JAX-WS cuando <strong>la</strong>s operaciones JAVAutilizan parámetros que pue<strong>de</strong>n ser nulos (e.g. String).Ejemplo: tipo creado por JAX-WS <strong>para</strong> representar unparámetro <strong>de</strong> entrada simple <strong>de</strong> tipo String <strong>para</strong> unaoperación l<strong>la</strong>mada getLastTra<strong>de</strong>Prices.Para que funcione correctamente, quitarminOccurs=0.Entonces, al inicializar una variable <strong>de</strong> ese tipo, <strong>Eclipse</strong><strong>BPEL</strong> <strong>la</strong> inicializará a <strong>la</strong> ca<strong>de</strong>na vacía. En casocontrario, <strong>la</strong> inicializará a nada y fal<strong>la</strong>rá en <strong>Active<strong>BPEL</strong></strong>.