martes, 8 de noviembre de 2016

Encuestar una Tabla de Base de Datos usando SOA 12c (Database Adapter - Poll New Records)

Recientemente estuve realizando pruebas de concepto (PoC - Proof of Concept) sobre está característica que posee el Database Adapter para encuestar una tabla de base de datos en especifica a la espera de nuevos registros o registros que cumplan con una condición especifica.

En el presente articulo, se pretende detallar la prueba de concepto llevada a cabo, explicando cada paso para entender bien el funcionamiento de esta característica.


 Pre-Requisitos
  • JDeveloper 12c (en este ejemplo se usa la versión 12.2.1.2.0)
  • Tabla de Prueba
  • Datos de Prueba

 Codigo SQL para Table y Datos de prueba:

CREATE TABLE POLL_TABLE
(
  PID     NUMBER NOT NULL PRIMARY KEY,
  OBJETO  VARCHAR2(50),
  LEIDO   VARCHAR2(2),
  ESTADO  VARCHAR2(16)
);

INSERT INTO POLL_TABLE VALUES (1, 'Objeto 1', 'NO', 'DESCONOCIDO');
INSERT INTO POLL_TABLE VALUES (2, 'Objeto 2', 'SI', 'POR DEFECTO');
INSERT INTO POLL_TABLE VALUES (3, 'Objeto 3', 'NO', 'DESCONOCIDO');

Pasos

1_ Crear una nueva aplicación SOA



Clic en OK y asignar como nombre a la aplicacion:  TestSoaApp -> Siguiente >


2_ Colocar como nombre del proyecto: Poller y clic en Siguiente >


Configurar el Proyecto con un tipo de Composite estándar: Empty Composite y Finish


3_ Arrastrar y soltar un Database Adapter en el carril Exposed Service:



y configuramos el adaptador de la siguiente forma:

3.1_ Nombre: PollerDB y Siguiente >


3.2_ Creamos una conexión a la base de datos haciendo clic en el bontón +



Configurar la conexión con los datos de la conexión de la base de datos, esto es:



Probar la conexion con el botón Test Connection

Advertencia: en este punto, se crea un JNDI que deberá configurarse en WebLogic Server (DBAdapter y DataSource) para que la comunicación entre el adaptador y la base de datos sea efectiva.


4_ Seleccionar la opción Poll for New or Changed Records in a Table



5_ Hacer clic en Import Tables... e importar la tabla de ejemplo POLL_TABLE



5.1_ Realizar una Query al esquema de base de datos y seleccionar la tabla POLL_TABLE


5.2_ Seleccionar la tabla POLL_TABLE y hacer clic en Siguiente >


6_ En Relaciones, no tocar nada... clic en Siguiente >


7_ Seleccionar todos los campos de la tabla y clic en Siguiente >


8_ Seleccionar Update a Field in the [POLL_TABLE] Table (Logical Delete)

Nota: Logical Delete solo sirve para actualizar un campo de la tabla de forma que solo aquellos registros donde el campo X tenga Y estado seran seleccionados para ser procesados, luego de ser procesados ese campo X cambia el estado de Y a Z para descartar estos registros en el proximo Poll a la tabla.


9_ Establecer las condiciones sobre las cuales el Poll tomará los registros que sean validos. Configurar del siguiente modo:


Esto significa que aquellos registros que tengan como dato en el campo LEIDO el valor NO serán tomados para ser procesados (cualquier otro valor, será descartado). Y una vez que terminen de ser procesados esos registro, se les asignará el valor SI al campo LEIDO (esto se lee: X registro fue LEIDO? SI/NO).

10_ Configurar la frecuencia del Polling (para este ejemplo, 10 segundos) y los parametros tales como la cantidad de registros por cada transacción, y el tipo de Polling:


La cantidad de registros por transacciones es una manera de configurar el rendimiento del componente BPEL que usara este Adaptador. Por ejemplo: si al consultar la tabla POLL_TABLE por la cantidad de registro NO LEIDOs, y nos trae 100 registros para ser procesados... al setear 10 registros por transacción, tomará de los 100 los primeros 10. Por lo cual, el proceso para terminar con los 100 registros deberá ejecutarse 10 veces ( 10x10=100 ).

11_ En el caso de necesitar un criterio para filtrar los registros tomados por la transacción, definir el criterio en esta pantalla. Para este caso, no es necesario ningun criterio. Simplemente avanzar haciendo clic en Siguiente >


12_ Para terminar, solo avanzar hasta terminar, haciendo clic en Siguiente > -> Siguiente > -> Finalizar



Creando Adapter para Actualizar Tabla

El ejercicio se trata de tomar registros de una tabla que NO hayan sido LEIDOs y actualizar el campo ESTADO del mismo. Para hacer la actualizacion de ese campo, arrastramos otro Database Adapter pero esta vez al carril External Services.


1_ Llamarlo WriteDB y hacer clic en Siguiente >


2_ Seleccionar la conexión creada anteriormente y clic en Siguiente >


2_ Seleccionar la opción Perform an Operation on a Table y tildar la acción Update Only


3_ Importar la tabla POLL_TABLE haciendo clic en Import Tables...


3.1_ Hacer clic en Query y seleccionar la tabla POLL_TABLE:



3.2_ Seleccionar POLL_TABLE y hacer clic en Siguiente >


4_ Relaciones... no tocar nada y clic en Siguiente >

5_ Seleccionar las columnas PID y ESTADO


6_ Para terminar, solo avanzar hasta terminar, haciendo clic en Siguiente > -> Siguiente > -> Finalizar



Creando el BPEL

1_ Añadir un BPEL vacío en el carril de componentes, para ello, clic derecho en dicho carril Insert -> BPEL Process



Llamarlo BPEL y definirlo como No Service -> Template: Define Service Later


2_Unir los dos adaptadores al BPEL usando las flechas de conexion:


2.1_ En este caso nos preguntará que tipo de Delivery implementará la conexión. Configuramos el Delivery a async.persist


2.2_ Quedando el Composite del siguiente modo:


3_ Abrir el BPEL e insertar un elemento Receive:


3.1_ Doble clic en el elemento Receive1 y configurarlo asi:


4_ Unir PollerDB con Receive1 y configurar la variable de entrada:


4.1_ Crear una variable de entrada y llamarla Input

 

5_ Insertar debajo del elemento Receive, un elemento Invoke 


5.1_ Unir Invoke1 con WriteDB:



5.2_ Crear una variable de entrada al WriteDB Adapter haciendo clic en el boton +:


5.3_ Llamarla WriteDB_Input


6_ Insertar un elemento Assign entre Receive1 e Invoke1:


6.1_ Doble clic en Assign1 y mapear las variables del siguiente modo:


Editado: en el mapeo de Estado -> Estado en realidad se debe establecer la constante 'Procesado'



7_ Quedando el BPEL del siguiente modo:


8_ Deployar el composite en el dominio local.

9_ En la configuración del Data Source configurar las transacciones globales del siguiente modo:


10_ Actualizar el componente DBAdapter en Deployments

11_ Testear el Composite.

No hay comentarios:

Publicar un comentario