En post pasados ya he hablado de que es una Composición SOA y de los Componentes que ofrece Oracle SOA Suite sin embargo es esta ocasión nos enfocaremos al DataBase Adapter para crear una composición la cual se conecte a una base de datos y guarde los datos de un registro de usuario.
En este punto asumimos que ya sabes como crear un proyecto SOA, configurar un Data Source y un Connection Pool desde la consola de WebLogic.
Una vez creado nuestro proyecto SOA lo que sigue es crear un Schema el cual contenga los tipos de datos que usaremos para el Request y Response de nuestro servicio el cual quedaría a sí.
fig.1: Muestra la estructura del schema necesario para crear el servicio de registro de usuarios.
Ya con el schema procedemos a crear un proceso BPEL con el schema anterior y configuramos para que quede de la siguiente manera:
Fig.2: Muestra la configuración del BPEL con el Reques y Response del Schema anterior.
El paso siguiente es crear la tabla de USUARIOS en nuestra base de datos la cual deberá estar accesible con el usuario que usaremos en el registro del DataSource.
En este punto tendremos la Composición SOA de la siguiente manera:
Fig.3: Estado de la Composición después de crear el proceso BPEL.
Lo que sigue a continuación es crear un DataBase Adapter para lo cual arrastramos el DataBase Adaper de la paleta a la sección de External References y nos saldrá el Wizzard y presionamos siguiente en la primera pantalla llevándonos a la siguiente pantalla:
En esta pantalla solo podremos el nombre que le daremos al Adaptador dentro de Composite por lo que ponemos un nombre que lo identifique rápidamente y presionamos Next para continuar.
La siguiente tendremos que definir la forma en que nos vamos a conectar a la base de datos para lo cual vamos a requerir dos conexiones distintas, la primera(Arriba) es una conexión diracta con la base de datos que se utilizara exclusivamente en tiempo de desarrolla, ya que sera necesaria para introspectar la base de datos y crear los Schemas necesarios para hacer la comunicación. En caso de no tener ninguna disponible tendremos que crear una nueva con el botón verde de +.
Una vez configurada nuestra conexión tendremos que configurar la segunda(Abajo) esta es exclusiva para tiempo de ejecución y tendremos que poner el nombre del JNDI de un Connection Pool (Como crear un Connection Pool) registrado en WebLogic y presionamos Next para continuar.
En la siguiente pantalla tendremos que especificar el tipo de operaciones que realizaremos, En este caso como solo haremos Insert y Select seleccionamos las opciones siguientes y presionamos Next.
La siguiente pantalla es para seleccionar las tablas con las que estaremos trabajando por lo que el botón de Import Tables y seleccionamos la tabla de usuarios para continuar.
La siguiente pantalla es para realizar las asociaciones pero como no tenemos solo presionamos Next.
El wizzard nos dirigirá a la pantalla para seleccionar los campo con lo cuales podremos interactuar por lo que seleccionamos todos y continuamos.
En el siguiente paso configuramos el Query del Select de la siguiente manera pues buscaremos al Usuario por medio de su nombre de usuario o correo.
Finalmente presionamos Next en las dos siguientes pantalla para finalizar y tendremos el DBAdapter en nuestra composición.
El siguiente paso sera asociar el DBAdapter al BPEL como se muestra en la siguiente imagen:
En este punto la composición SOA ya esta lista pero faltara programar el BPEL para que realice las operaciones necesaria para registrar al usuario.
En este caso la lógica del BPEL sera la siguiente, Cuando llega una solicitud validara que el nombre de usuario no exista consultando la tabla por medio del nombre de usuario, si no existe registrara al usuario y regresara el código ‘000’ y la leyenda ‘Registro Exitoso’, en caso de que el usuario ya exista regresaremos el error ‘111’ y la leyenda ‘Usuario existente’ y finalizara.
DESARROLLO DEL BPEL
Primero que nada abrimos el BPEL dando doble click sobre el, esto nos llevara al editor y veremos lo siguiente en pantalla:
Si prestamos atención en la imagen veremos en rojo el DBAdapter que configuramos hace un momento como un PartnerLink lo cual indica que todo va bien hasta ahorita.
El siguiente paso sera crear una actividad Invoke de la siguiente manera:
En esta pantalla tendremos que definir primero que nada el nombre de la actividad en en el campo Name, después seleccionar el PartnerLink que deseamos invocar y tener cuidad de seleccionar la Operación de Select, Otro paso importante es crear la variables Input y Output de la parte de abajo y ponerles el nombre QueryUserInputVariable y QueryUserOutputVariable para finalizar.
Seguido creamos un actividad Assign para asignar los valores de entrada(InputVariable) a la variable de entrada del servicio (QueryUserInputVariable) para lo cual aremos la siguiente asignación:
El BPEL nos quedara de la siguiente manera:En este momento la variable QueryUserOutputVariable contendrá los resultados de la invocación del servicio por lo que tendremos que validar si encontró resultados mediante una actividad IF debajo del la actividad Invoke y la configuraremos de la siguiente manera:En este IF contamos los nodos del resultado, si es mayor que cero entonces quiere decir que el usuario ya existe y tendremos que regresar el error. Por lo cual agregamos una actividad Assign y un Reply quedando el IF de la siguiente manera:
La actividad ErrorAssign lo configuramos de la siguiente manera:
La actividad ErrorReply la configuramos de la siguiente manera:
Con esto lograremos que el BPEL regrese el error al detectar que ya existe el usuario.
El siguiente paso sera crear otra actividad Invoke para el mismo PartnerLink pero esta vez para la operación de Insert y definiremos las variables de entrada(InsertUsuarioInputVariable).
Creamos una actividad Assign para asignar los valores de la variable InsertUsuarioInputVariable para que quede de la siguiente manera:
Finalmente con un assign modificamos la variable OutputVariable para regresar el código 000 y la leyenda Registro Exitoso.
y el BPEL quedara de la siguiente manera:
Solo nos queda deployar y probar el servicio.