viernes, 6 de junio de 2014

Oracle Human tasks solo con ADF? Implementando Human Tasks con Java EE - Parte 2

En el post anterior mostré como enlazar una aplicación desde Oracle Business Process Workspace. En este nuevo post, mostraré como interactuar con los servicios expuestos por Oracle SOA Suite para interactuar con el motor de Human Task.

¿Cómo interactuar con mis Human Tasks desde Java EE?

Esta es la segunda pregunta a responder. Como se menciono en el post anterior, estos son los servicios básicos necesarios para implementar la Interfaz de Usuario de una Human Task:
  • TaskQueryService: para la búsqueda de la tarea
http(s)://[host]:[port]/integration/services/TaskQueryService/TaskQueryService?wsdl

  • TaskService: para interactuar con la tarea
http(s)://[host]:[port]/integration/services/TaskService/TaskServicePort?wsdl

Para implementar una aplicación Java EE que interactue con las Human Task necesitamos:

  • URL de los servicios web SOAP
  • Y los XSD de las Human Task.
Como en cualquier aplicación Java EE, para interactuar con el servicio utilizaremos JAX-WS y para recrear los objetos Java desde XSD, usaremos JAXB.

Se realizarán los siguientes pasos para la implementación:
  • Crear los proxies para acceder a los servicios web.
  • Crear las clases Java desde XSD con JAXB.
  • Crear una clase de prueba de como acceder al detalle de una tarea.
  • Implementar el formulario con JSF.

Creación de Proxies de Servicios Web de Oracle SOA Suite

1. Crear un proyecto Java con Maven. Estoy utilizando NetBeans 8, pero puede ser Eclipse o JDeveloper o el IDE de preferencia. Utilizar JDK 7 con NetBeans.

2. Crear un proxy de servicio web utilizando las rutas antes mencionadas según su entorno de trabajo:


Validar que la propiedad de estilo "Wrapper" de las referencias a los servicios esté deshabilitada para no desempaquetar los atributos de mensajería (request/response):


Con esto, ya debemos tener acceso a los servicios de Oracle SOA Suite.

Ejecutar el siguiente caso de prueba:

Si no se puede visualizar el gist embebido ir a: ServiceAccessTest.java

Creación de Clases Java desde XSD de Human Task

1. Ubicar los XSD de la Human Task en el proyecto BPM:
Solo nos interesa los 2 XSD resaltados, el XSD del proceso, y el XSD del payload de la tarea.

2. Copiarlos en la siguiente ubicación dentro del proyecto:

3. Crear un JAXB binding del XSD "Humantask1Payload.xsd" que importa internamente al "ProcessSchema.xsd":

Construir el proyecto, y ahora deberíamos tener las clases Java para interactuar con el payload de las tareas de usuario:

Prueba de Acceso a Detalle de Tareas de Usuario

He creado la siguiente clase para probar el acceso al detalle de las tareas:

Si no se puede visualizar el gist embebido ir a: TaskDetailsAccessTest.java

Para poder utilizar el caso de prueba, se debe ingresar el número de una tarea que esté en ejecución. Este número lo podemos encontrar a través de la aplicación Enterprise Manager:

Con esto ya deberíamos tener todos los componentes preparados para utilizar el framework de nuestra preferencia (incluyendo ADF. ADF Essentials se puede ejecutar igualmente desde cualquier servidor de aplicaciones Java EE)

En mi caso voy a utilizar JSF 2.2 (con Primefaces).

Implementación de Formulario de Human Task con JSF

El proyecto implementado se encuentra en esta ruta: https://github.com/jeqo/htjavaee/tree/javaee_web

Este es el flujo de páginas:

Y esta el código fuente de la página JSF:


Se ha implementado el siguiente código en el "managed bean":


Si no se puede visualizar el gist embebido ir a: ApprovalTaskBean.java

En el método "init" se ubica la tarea por ID y se autentica utilizando el contexto otorgado por el Workspace.

El método "approve" se encarga de implementar la aprobación de la tarea utilizando el servicio TaskService.

Con esto se puede generar el siguiente comportamiento:

Repositorio GitHub: https://github.com/jeqo/htjavaee