08.08.2015 Views

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 ...

SHOW MORE
SHOW LESS

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>.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!