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.

Comentarios

  1. 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.

    ResponderBorrar
    Respuestas
    1. Hola, muchas gracias.

      Me 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 :)

      Borrar
    2. Hola Sandra.


      Es 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:

      Borrar
    3. Hola Carlos

      Si 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!

      Borrar
  2. Buen día
    Me 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

    ResponderBorrar
  3. 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.
    Teradata stored procedures, tu sabes a que se debe esto?

    ResponderBorrar

Publicar un comentario

Entradas más populares de este blog

Conceptos básicos de Servicios Web SOAP, WSDL y XSD

OWSM and WS-Security: Username Token Authentication for SOAP and REST Services in OSB 12c.

Conversión de servicios SOAP a REST/JSON usando OSB 11g