viernes, 6 de junio de 2014

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

Oracle SOA Suite incluye un componente de tareas de usuario para manejar las interacciones humanas dentro de aplicaciones compuestas (SCA):



Al momento de implementar la Interfaz de Usuario de una Human Task, Oracle ofrece la opción de utilizar su framework, Oracle ADF, para la crear las páginas y la lógica de la interacción con usuarios.
Como esta opción se muestra por defecto en JDeveloper, nos puede dar la impresión de que ésta es la única opción de implementar las Human Tasks, pero no es así.



Como Mark Nelson muestra en el blog de RedStack, esto se puede implementar haciendo uso de .Net y cualquier tecnología que soporte el consumo de servicios SOAP.

A continuación, explicaré como funcionan los servicios básicos de Human Task y como utilizarlos desde Java EE, haciendo uso de Java EE 7 desde NetBeans 8.0.

El objetivo no es quitarle valor a ADF, ADF es un framework robusto y con grandes beneficios. Sin embargo, la experiencia en ADF no puede ser un limitante a la hora de evaluar Oracle BPM Suite.
Oracle ADF no figura entre los frameworks más populares de Java EE según este reporte de JRebel Labs, pero Oracle BPM esta situado en los líderes de plataformas BPM según el estudio de OVUM.

 

Implementando Human Tasks con Java EE

Para implementar tareas de usario con Java EE vamos a realizar los siguientes pasos:
  • Como llamar a mi aplicación desde Oracle BPM Workspace (Parte 1)
  • Como interactuar con mis Human Tasks desde Java EE (Parte 2)
Comencemos creando nuestro proyecto base: https://github.com/jeqo/htjavaee/tree/base_bpm_project

1 servicio expuesto (Servicio SOAP), 1 process BPMN, 1 Human Task (para 1 User task).

Proceso BPMN con 1 User Task, 1 Evento de Inicio y otro de fin (expuestas a través del servicio SOAP).


Estructura de datos utilizada por el proceso y la interfaz SOAP

Definición de la Human Task


El proyecto BPM está implementado con JDeveloper 11.1.1.7

Ahora que tenemos el proyecto BPM implementado, podemos comenzar a responder las preguntas:

¿Cómo llamar a mi aplicación desde Oracle BPM Workspace?

Como hace cualquier aplicación ADF cuando es desplegada como implementación de una Human Task:
1. Ingresar a Enterprise Manager.
2. Ir a la aplicación compuesta y acceder al componente de Human Task.

3. Ir a la pestaña de administración y agregar una URI:
En el detalle se debe ingresar el nombre de la aplicación y donde está desplegada (host, puerto y contexto). Aplicar cambios.

4. Para probar que esto funciona, agregemos al usuario "weblogic" al rol creado en el proceso y veamos que nos aparece en la aplicación BPM Workspace:

Generamos una instancia desde la aplicación Enterprise Manager:
Y desde la aplicación de Workspace deberiamos tener el siguiente resultado:

Como no tenemos ninguna aplicación desplegada aún, y el servidor de aplicaciones Glassfish está iniciado desde NetBeans, no se encuentra ninguna página con el contexto actual (aún).

5. Creemos un proyecto de aplicación web con Maven desde NetBeans y agregemos código JavaScript para obtener los parámetros enviados desde el Workspace:


Se puede utilizar Glassfish, Wildfly, JBoss, WebLogic, Tomcat, TomEE, etc. Asi como Java EE 6, Java EE 7.
 Probamos la aplicación:
Y probemos ahora desde el Workspace:

La pregunta ahora es: ¿Cómo mi aplicación sabe que información mostrar?. Oracle Workspace es el que envía la información de la instancia a través de parámetros en la URL. Para mostrar todos los parámetros enviados desde la aplicación Java EE agreguemos el siguiente código JavaScript para mostrar los valores:


Si no se puede visualizar el gist embebido ir a: index.html

Probar nuevamente la aplicación desde Workspace y ver todos los parámetros recibidos desde el Workspace hacia la aplicación que implementa la Human Task:


Con esta información ahora tengo el contexto de seguridad y el ID de la tarea. La siguiente pregunta es: ¿Cómo obtengo el detalle desde ésta instancia de la tarea (payload, metadatos, adjuntos, etc.)?. A través de los servicios web de Oracle SOA Suite:
  • 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

En el siguiente post, mostraré como acceder a estos servicios para completar la implementación de la Human Task.