Archivo

Posts Tagged ‘BPEL’

Invocar Servicios REST, tipo POST, con JSON en BPEL 12c

El adaptador REST es una importante característica en la versión 12c de Oracle Middleware. Nos permite la exposición e invocación de servicios REST de una forma sencilla, disponiendo también de integración con objetos JSON. En este post vamos a ver cómo podemos consumir un servicio REST de tipo POST que requiera de un objeto JSON como entrada al mismo, y cómo trabajar con dicho objeto desde un proceso BPEL. Empezaremos generando un nuevo proceso BPEL, sobre nuestro proyecto SOA (ya generado). En nuestro caso va a ser un proyecto síncrono.

Leer más…

Categorías:Tech - Integration Etiquetas: , , ,

ESADE: Oracle BPM migration from version PS3 to PS5

avanttic ESADE BPM Success Story

El 28 y 29 de abril se celebró en Barcelona un nuevo encuentro de Oracle EMEA WebCenter Partner Community Forum, focalizado en Customer Experience and Mobility mediante la combinación de Oracle WebCenter (Portal, Content, Sites), BPM y ADF.

avanttic asistió, presentando un caso de éxito con ESADE sobre el proyecto realizado hace unos meses de migración de BPM de PS3 a PS5. La organización imprimió a tamaño póster los casos de éxito presentados por los partners y los colgó en las estancias del hotel.

ESADE solicitó a avanttic actualizar su plataforma Oracle BPM, sobre nuevos servidores, para solucionar los problemas de caídas del sistema y por la necesidad de mejorar el rendimiento de la plataforma. La migración a una nueva versión de Oracle ADF también ha permitido una mejor compatibilidad con las últimas versiones de los navegadores.

The ESADE business are the students and the Academic Management is based in Oracle architecture that provides high availability, redundancy and business continuity. We stabilized the platform and now we can develop new business processes and new BPEL integrations over a robust platform.

Miguel López, CTO, TIC Departament

Lee los detalles del proyecto en el datasheet del caso de éxito (formato pdf).

avanttic fue el primer partner de España en obtener las certificaciones en Oracle ADF y en Oracle BPM, en diciembre del 2011 y en mayo del 2012, respectivamente.

Cómo recuperar el contenido de las excepciones en BPEL

octubre 11, 2013 Deja un comentario

Al contrario de lo que pasa en Oracle Service Bus, los procesos BPEL no disponen de una variable de sistema fault en la que consultar el detalle de las excepciones generadas en tiempo de ejecución. Con ello no quiero decir que no podamos conocer dichos detalles, pero nos conllevará algún paso extra.

En primer lugar, hemos de importar a nuestro proyecto la definición RuntimeFault.wsdl:

<wsdl:definitions
     name="Process"
     targetNamespace="http://xmlns.oracle.com/Process"
...
    >
    <plnk:partnerLinkType name="Process">
...
    </plnk:partnerLinkType>
    <wsdl:import namespace="http://schemas.oracle.com/bpel/extension"
                 location="oramds:/soa/shared/bpel/RuntimeFault.wsdl"/>
    <wsdl:types>
...
    </wsdl:types>
...
</wsdl:definitions>

Lo siguiente es crear una variable en nuestro proceso que pueda almacenar el contenido de la excepción y que tendrá la siguiente estructura:

RuntimeFaultMessage

Estructura del RuntimeFaultMessage

Una vez tengamos la variable creada (a la cual hemos llamado runtimeFault), es momento de asignarla a un controlador de excepciones, en el que podremos recuperar su contenido:

<faultHandlers>
  <catch faultName="bpelx:remoteFault" faultVariable="runtimeFault"
         faultMessageType="bpelx:RuntimeFaultMessage">
    <sequence>
      <assign name="RecuperarDetalle">
        <copy>
          <from>$runtimeFault.code</from>
          <to>$outputVariable.payload/ns1:Result/ns2:code</to>
        </copy>
        <copy>
          <from>$runtimeFault.summary</from>
          <to>$outputVariable.payload/ns1:Result/ns2:description</to>
        </copy>
      </assign>
    </sequence>
  </catch>
</faultHandlers>

Como decía al principio, es posible obtener el detalle de aquellas excepciones generadas en tiempo de ejecución, con el fin de facilitar nuestras investigaciones cuando recibamos los bonitos “el proceso me da error”.

Compensación en procesos BPEL (Compensation Handler)

septiembre 3, 2013 Deja un comentario

Es común encontrarse con procesos BPEL que contienen transacciones anidadas. Si el proceso falla una vez procesada alguna de estas transacciones, podemos vernos con la necesidad de compensar nuestro proceso o reaccionar al fallo.

avanttic - Compensación en procesos BPEL

Con esta finalidad, el lenguaje BPEL proporciona lo que denomina Compensation Handler(CH). Cada scope o actividad invoke de nuestro proceso puede tener un CH y cada CH está formado por una o varias actividades. Un CH, puede ser ejecutado de forma directa (especificando el nombre del scope a compensar) o indirecta mediante una actividad compensate.

La ejecución de un CH de forma explícita (o directa) puede realizarse, únicamente, desde un scope o CH de nivel directamente superior al CH que queremos llamar.

Una ventaja principal con los Error Handlers es que, en el caso de que el scope contenga iteraciones, las actividades compensatorias se ejecutarán por cada iteración en orden inverso.

En la documentación oficial (en inglés) encontraréis un ejemplo práctico del uso de esta funcionalidad: Using Compensation.

Gracias a este gestor de compensación CH, conseguimos un mayor control sobre las transacciones de nuestros procesos BPEL.

Cabeceras personalizadas y procesos Oracle BPEL

En el momento de definir nuestros servicios web, nos podemos encontrar con la necesidad de incluir cabeceras personalizadas que aporten información añadida a las distintas operaciones del mismo.

Si estos servicios van a ser consumidos por una aplicación SCA, como puede ser un proceso BPEL, recomiendo seguir el siguiente consejo: incluir nuestra cabecera en la definición el mensaje.

Seguimos el orden de definición del WSDL para explicar nuestro caso. Si nos ceñimos a los elementos del contrato que nos conciernen, empezamos por la definición de mensajes.

Es común crear un mensaje que represente nuestra cabecera personalizada para reutilizarlo e implementar el siguiente formato:

<wsdl:message name="HeaderPersonalizado">
 <wsdl:part name="cabecera" element="client:miCabecera"/>
</wsdl:message> 
...
<wsdl:operation name="operacion1">
 <soap:operation style="document" soapAction="http://xmlns.Avanttic.com/Blog/HeaderPersonalizado/operacion1"/>
 <wsdl:input>
  <soap:body use="literal" parts="payload"/>
  <soap:header message="client:HeaderPersonalizado" part="cabecera" use="literal"/>
 </wsdl:input>
 <wsdl:output>
  <soap:body use="literal" parts="payload"/>
 </wsdl:output>
</wsdl:operation>

Aún siendo correcto, generar un contrato con este formato implica que el envío de la cabecera desde un proceso BPEL sea ligeramente más complejo. Veamos los pasos que realizaríamos para este caso:

  1. Generar una variable del tipo miCabecera:
    <variable name="miCabecera" element="client:miCabecera"/>
  2. Asignar los valores correspondientes a la cabecera mediante la actividad Assign.
  3. Asignar esta variable a la cabecera de la actividad Invoke.

En este punto nos encontramos con la particularidad de que la IDE de JDeveloper no permite realizar este paso y es necesario acceder al código fuente de la actividad y agregar la propiedad bpelx:inputHeaderVariable:

<invoke name="Ejecutar"
 partnerLink="ServicioWeb"
 portType="client:HeaderPersonalizado"
 operation="operacion1"
 inputVariable="Ejecutar_InputVariable"
 outputVariable="Ejecutar_OutputVariable"
 bpelx:invokeAsDetail="no"
 bpelx:inputHeaderVariable="miCabecera"/>

Veamos ahora otra forma de pasar nuestra cabecera siguiendo la recomendación inicial: incluir la cabecera en la definición del mensaje.
Leer más…