Crear un DBAdapter en OSB 11g
¡Hola!
El tema de este día es referente
a cómo hacer un query a una Base de Datos desde Oracle Service Bus 11g. Pareciera
un tema bastante burdo, sin embargo resulta que OSB está más orientado al
enrutamiento y mediación de servicios, procesamiento de mensajes, entre otras
cosas, no así a la composición de adaptadores y elementos que permitan
interactuar con entidades tales como Bases de Datos, EJB, FTP, etc. Esta
funcionalidad generalmente se delega a procesos BPEL.
Entonces se preguntarán ¿para qué
hacerlo en OSB si tenemos BPEL? La respuesta no es definitiva, depende del
diseño y arquitectura de las aplicaciones que estén implementando, quizás
necesiten ahorrarse el tiempo de invocación y procesamiento del BPEL, o que se
yo. El hecho es que OSB permite realizar actividades como la de este ejemplo.
Les advierto que no es tan sencillo ni rápido, pero es posible. Yo lo he hecho un
par de veces y debo decir que no me parece lo más adecuado, pero repito, si por
algún motivo prefieren hacerlo directamente en OSB, aquí les dejo la forma que
yo conozco para llevarlo a cabo.
El propósito de este ejercicio es
ejecutar un insert a una tabla llamada Producto, en una Base de Datos
relacional, desde el OSB versión 11g. Lo que necesitaremos para hacerlo es
JDeveloper, Eclipse con OEPE y obviamente OSB. Más adelante verán porque son
necesarias tantas cosas.
La tabla Producto contiene la
siguiente estructura y datos iniciales:
1. El primer paso es generar un
proyecto SOA en JDeveloper, después en el archivo composite.xml arrastramos el
adaptador de base de datos o DBAdapter. La razón de hacerlo aquí es porque se
generan automáticamente los archivos .jca, .wsdl, .xsd y .xml con la
configuración, tanto de la conexión a la base de datos, como al query que
ejecutaremos y su estructura de datos. De otra forma tendríamos que generar
manualmente todos ellos. Si no están familiarizados en como crear un proyecto SOA, recomiendo leer antes este post con el detalle.
2. Lo que sigue es configurar el
adaptador, comenzando por el nombre que le daremos
3. El siguiente paso es elegir o
configurar la conexión a la Base de Datos. Si aún no está configurada,
seleccionar el ícono verde para agregar una nueva.
4.
Introducir los datos de conexión a la BD y probarla. Si la ejecución de la
prueba es exitosa podemos continuar, si no es así, es necesario verificar los datos
y probar hasta lograr la conexión.
5. De
regreso a la pantalla anterior, una vez seleccionada la conexión, es necesario
introducir el nombre del jndi. Este
debe estar previamente configurado en el servidor Weblogic en el cual será
desplegado el servicio en el OSB. Si no saben cómo realizar este paso,
próximamente realizaré un post con ese detalle, prometo no tardar demasiado.
6. Seleccionar la operación
deseada en la BD para que sea generado el query y Next.
7. En
la siguiente pantalla dar clic en el botón Import
Tables…
8.
Seleccionar el esquema de BD, introducir el nombre de la tabla y presionar
Query para realizar la búsqueda de dicha tabla.
9. Seleccionar la tabla deseada y pasarla
hacia el lado derecho y OK.
10.
Esperar unos segundos y corroborar que realmente se hizo la importación de la
tabla.
11. En
la siguiente pantalla solo dar clic en Next.
12. Seleccionar los campos que se
desea incluir en el insert. Después
Next.
13. En
este momento ya se generaron los archivos necesarios; el archivo jca tiene la
información referente a la conexión de la BD, misma que estará configurada en
el data source del Weblogic, además de la información de la tabla y la
referencia al esquema xsd que representa sus campos. También tiene la
referencia al wsdl que se asocia a este, debido a que el DBAdapter de BPEL
expone cualquier acceso a la BD como un servicio web, y por último, la
referencia a los archivos de configuración de mapeo de datos y properties que
se usan internamente para relacionar las columnas con los datos y la
información de la tabla. Estos últimos dos archivos no siempre se generan,
depende de la sentencia que se ejecute en la BD.
14.
Para continuar necesitaremos el Eclipse con OEPE, o bien, directo desde la consola del OSB, para generar un Business Service a partir del
archivo jca. En el OEPE crear el proyecto
correspondiente, la estructura de carpetas es sugerida de acuerdo a las buenas
prácticas. Si no saben cómo crear el proyecto en OEPE sugiero leer este postdonde explico los pasos a seguir.
15. Lo
siguiente es copiar todos los archivos que generamos en el JDeveloper y
distribuirlos en las carpetas adecuadas para cada uno en OEPE. Notarán que se
generan algunos errores, no hay problema, los corregiremos.
16.
Para corregir estos errores es necesario abrir el archivo wsdl y cambiar la
ruta del archivo xsd.
17.
También es necesario cambiar las rutas del wsdl y los xml en el archivo jca
El
proyecto debe quedar de la siguiente manera
19.
Para generar el Business Service seleccionar el archivo jca, clic derecho, Oracle Service Bus y Generate Service.
20.
Nombrar los archivos y seleccionar la carpeta donde se generará el Business
Service y el wsdl.
21.
Debido a que los archivos previamente generados los deja en la misma ruta, es
necesario cortar y pegar el wsdl para reubicarlo en su correspondiente carpeta.
La estructura queda así:
22.
Ahora, para probar lo que acabamos de hacer generaremos un Proxy Service que
envuelva al Business Service. Seleccionar el Business Service recién generado,
clic derecho, Oracle Service Bus y Generate Proxy Service.
23.
Seleccionar la carpeta ProxyServices,
nombrar el servicio y Finish.
24.
Seleccionar el servicio recientemente creado, clic derecho, Run As, Run on
Server.
25.
Seleccionar el servidor en el que se desea desplegar el proyecto, éste debe
estar en ejecución. Si no están familiarizados con la configuración, en este post se explican los pasos.
26. Si
al hacer el despliegue ocurre este error, significa que no se ha creado el datasource en el Weblogic. Es necesario configurarlo para continuar.
27.
Una vez que el datasource está creado
y en ejecución, introducir datos válidos para la prueba y dar clic en Ejecutar.
28.
Podemos observar la traza completa de la ejecución, en este caso no regresamos
ninguna respuesta, por lo que estará vacía. Sin embargo no debe ocurrir ninguna
excepción.
29.
Finalmente para validar el resultado de la operación ejecutamos una consulta a
la tabla, el resultado ya tiene el registro que guardamos en la invocación al
Proxy Service.
Bien,
pues con eso es suficiente para ejemplificar el uso de adaptadores de Bases de
Datos en el OSB. Espero que sea clara la explicación.
¡Nos leemos pronto!
Si te interesa conocer más de ésta y otras tecnologías de Oracle, te recomiendo que visites la página de Oracle Technology Network Latinoamérica http://www.oracle.com/technetwork/es/index.html. Aquí podrás encontrar artículos, información, actividades y muchas otras cosas más, además de poder acercarte a los expertos en varios idiomas.
No habia escrito antes, pero no sabes como me ayuda a entender muchas cosas sobre SOA y Oracle tu blog, muchas gracias por compartir espero que sigas asi, ya que somos muchas personas autodidactas que nos gusta aprender nuevas cosas y yo me lance para intentar aprender sobre todo lo que hay en tu blog.
ResponderBorrarHola, muchas gracias.
BorrarMe alegra saber que aporto con algo que es de ayuda. La verdad entre tantos pendientes y trabajo me es difícil hacer publicaciones, pero trataré de dedicarle un poco de tiempo para no dejarlo.
Hasta pronto :)
Hola Sandra.
BorrarEs posible consumir mensajes de una cola Activemq desde OSB.
estoy haciendo un ejemplo y me manda el siguiente error
<11/11/2015 02:21:37 PM CST> <The Message-Driven EJB: RequestEJB2961596390693294845X5c17e3dc.150f82d312b.X7fde is unable to connect to the JMS destination: //topic:LabOrder. The Error was:
javax.naming.CommunicationException [Root exception is weblogic.socket.UnrecoverableConnectException: [Login failed for an unknown reason:
Hola Carlos
BorrarSi es posible hacerlo, este error me da la impresión de que se refiere a que quizás tu connection factory no está bien configurado, o bien, si estás usando una cola que no es dinámica podrías intentar usarla, me parece que funcionan mejor, aunque no estoy 100% segura de esto. Agregaste el jar de mq al managed server de OSB?
Si logro hacer tiempo trataré de replicar el ejemplo. Si tienes más datos me ayudaría mucho. ¿Te has basado en alguna guía o página?
Saludos!
Buen día
ResponderBorrarMe podrías ayudar con este error a la hora de crear el PS
Description Resource Path Location Type
Invalid xml: Expected element 'adapter-name@http://www.bea.com/wli/sb/transports/jca' before the end of the content in element provider-specific@http://www.bea.com/wli/sb/transports Unknown ALSB Conflict
Hola Sandra.. Que excelente blog, me has ayudado muchísimo. Sandra tengo un problema y no se que pueda ser, estoy realizando un DBAdapter para consumir un SP de Teradata pero me esta generando el siguiente error: The adapter configuration wizard does not support.
ResponderBorrarTeradata stored procedures, tu sabes a que se debe esto?