martes, 16 de abril de 2013

Oracle Service Registry Cannot obtain new connection


En algunas ocasiones es posible que el Oracle Service Registry (OSR) no pueda obtener una conexión desde el pool de conexiones creadas por el Data Source, esto puede producirse después de volver a realizar el despliegue de la aplicación del OSR.

Si buscamos errores en el log del Managed Server donde está desplegada la aplicación es posible que no encontremos información relevante. El log que se debería revisar es entonces:

$DOMAIN_HOME/servers/<server_name>/tmp/_WL_user/registry/<random_directory>/public/serviceRegistry_errorEvents.log

En éste log vemos que las siguientes líneas aparecen:

<2013-04-11 15:46:02,557> - <ID1365713947710> <ERROR> <WSP4005> com.systinet.uddi.webui.WebUIRawService -  - EXCEPTION: org.systinet.uddi.account.AccountException: Initialization of accounts has failed. For help please contact the administrator of the registry.
<2013-04-11 15:46:03,518> - <ID1365713947711> <WARN> <WSP4005> database_core.com.systinet.uddi.config.management.DatabaseConfig - Ignoring exception in event handler, it may be caused by unavailablity of database. - EXCEPTION: java.lang.RuntimeException: com.systinet.uddi.database.DatabaseCoreException: (12021) Cannot obtain new connection.
<2013-04-11 15:46:03,561> - <ID1365713947712> <WARN> <WSP4005> database_core.com.systinet.uddi.config.management.DatabaseConfig - Ignoring exception in event handler, it may be caused by unavailablity of database. - EXCEPTION: java.lang.RuntimeException: com.systinet.uddi.database.DatabaseCoreException: (12021) Cannot obtain new connection.
<2013-04-11 15:46:03,563> - <ID1365713947713> <ERROR> <WSP4005> uddi_inquiry_v3.com.systinet.uddi.inquiry.v3.database.Get - DatabaseCoreException - EXCEPTION: com.systinet.uddi.database.DatabaseCoreException: (12021) Cannot obtain new connection.
<2013-04-11 15:46:03,565> - <ID1365713947714> <ERROR> <WSP4005> permission.com.systinet.uddi.permission.database.DBPermissionApiImpl - DatabaseCoreException - EXCEPTION: com.systinet.uddi.database.DatabaseCoreException: (12021) Cannot obtain new connection.
<2013-04-11 15:46:05,471> - <ID1365713947715> <ERROR> <WSP4005> uddi_inquiry_v3.com.systinet.uddi.inquiry.v3.database.Get - DatabaseCoreException - EXCEPTION: com.systinet.uddi.database.DatabaseCoreException: (12021) Cannot obtain new connection.

Como se logra ver en las lineas del log, claramente la conexión a la base de datos no se puede realizar. Entonces el problema puede ser causado por lo siguiente:

  1. El Data Source está creado en el weblogic con credenciales no validas.
  2. No hay comunicación entre la aplicación desplegada y el Data Sorce.

Sin embargo, al testear el Data Source desde el weblogic, se confirmó que el Data Source sí era válido y que las credenciales utilizadas eran correctas. Entonces solo queda una opción, el despliegue no se comunica con el Data Source.

Y aquí es donde viene la pregunta: ¿Cómo hace el despliegue para comunicarse con su Data Source?

Por intuición me recordé de aquella herramienta que el Oracle Service Registry trae con sus binarios llamada "setup.sh" o "setup.exe" según sea el SO sobre el cual este el OSR, me recordé que esta herramienta trae una opción de "reconfigurar la conexión a la base de datos", donde se puede elegir en crear un tablespace, utilizar un tablespace existe y crear el esquema adecuado o simplemente conectarse a un esquema ya existente.


Para ejecutar esta herramienta en modo consola agregar la opción " -c", ejemplo "./setup.sh -c"

Esta herramienta está ubicada en:

$REGISTRY_HOME/bin

Utilicé esta herramienta para reconfigurar la conexión a la base de datos. Seleccioné la opción de "conectarse a un esquema existente", ingresé los datos correctos de la base de datos: host, puerto, username, password, etc. La herramienta no retornó errores por lo que asumí que había realizado su tarea exitosamente.

Es necesario detenernos en este punto y revisar el log de la herramienta setup.sh, la cual se encuentra en:

$REGISTRY_HOME/log/setup.log

En este punto puede ser que muestre algún error relacionado con la librería "ojdbc6.jar" que debe estar agregada en el CLASSPATH del Managed Server donde está el OSR. Pero para mi problema, esta no fué la causa, pues la librería estaba correctamente agregada.

Bueno, prosigamos. Como indicaba, en el log del setup.sh no habian errores. Reinicié el Managed Server del OSR volví a ingresar a la aplicación y no, el problema no se habia solucionado, en el log seguía mostrando "Cannot obtain new connection". Por intuición pensé que esta herramienta "setup.sh" volvía a reconfigurar todo lo necesario para restablecer la conexión entre la aplicación y el Data Source, pero no, no fue así. Entonces volví a la misma pregunta  ¿Cómo hace el despliegue para comunicarse con su Data Source?

Investigando llegué a la solución, el despliegue utiliza un archivo XML para comunicarse con el Data Source, este archivo es llamado "database.xml" y está ubicado en:

$DOMAIN_HOME/servers/<server_name>/tmp/_WL_user/registry/<random_directory>/public/app/uddi/conf/database.xml

Este archivo es el que debe modificarse manualmente, indicando todos los datos correctos para lograr la conectividad con el Data Source: host, puerto, username, password, instance_name, data source name, etc.

Al modificar dicho archivo, reinicié el Managed Server del OSR, ingresé a la aplicación y pude por un momento imitar a Arquimides y exclamé ¡Eureka!

No hay comentarios:

Publicar un comentario

Oracle ACE Director Award - Deiby Gómez

Thanks #OracleACE Program for this awesome certificate recognizing the work I have done in the community for the last year. Looking forwa...