Problemas de acceso a datos
Las herramientas de diagnóstico de WebSphere Application Server proporcionan servicios para ayudarle a la resolución de problemas de conexión de base de datos. Adicionalmente, el sitio web de IBM® proporciona funciones de búsqueda flexibles para buscar soluciones documentadas para problemas de conexión específicas de base de datos.
Los pasos siguientes le ayudan a aislar rápidamente los problemas de conectividad.
- Examine los archivos de anotaciones cronológicas del servidor de
aplicaciones para obtener alguna sugerencia.
Consulte el tema Establecimiento del registro cronológico de errores.
Consulte el tema Visualización de registros de JVM. De forma predeterminada, estos archivos son: raíz_servidor_aplicaciones/nombre_servidor/SystemErr.log y SystemOut.log.
Nota: En este tema se hace referencia a uno o más de los archivos de registro del servidor de aplicaciones. Como alternativa recomendada, puede configurar el servidor para utilizar la infraestructura de registro y rastreo HPEL en lugar de utilizar los archivos SystemOut.log , SystemErr.log, trace.log y activity.log en sistemas distribuidos y de IBM i. Puede también utilizar HPEL junto con sus recursos de registro nativos de z/OS. Si utiliza HPEL, puede acceder a toda la información de registro y rastreo utilizando la herramienta de línea de mandatos LogViewer desde el directorio bin de perfil de servidor. Consulte la información sobre la utilización de HPEL para resolver problemas de aplicaciones para obtener más información sobre la utilización de HPEL. - Examine la propiedad de la clase de ayudante del origen de datos para comprobar que sea correcta y que esté en la classpath de WebSphere Application Server. Los errores o un comportamiento extraños pueden deberse a que falta un nombre de clase de ayudante o a que el nombre es incorrecto. Si WebSphere Application Server no puede cargar la clase especificada, utiliza una clase de ayudante por omisión que es posible que funcione de forma incorrecta con su gestor de bases de datos.
- Compruebe que el nombre de la JNDI (Java™ Naming and Directory Interface) del origen de datos coincida con el nombre que utiliza el cliente que intenta acceder a la misma. Si los mensajes de error indican que puede tratarse de un problema relacionado con el nombre, por ejemplo, si hacen referencia al servidor de nombres o al servicio de nombres, o si incluyen algún ID de error que empieza por NMSV, consulte los temas Problemas relacionados con nombres y Resolución de problemas del componente de servicio de nombres.
- Habilite el rastreo del adaptador de recursos utilizando la especificación de rastreo RRA=all=enabled. Siga las instrucciones para volcar y analizar la salida de rastreo para aislar el origen del problema. Consulte el tema "Habilitación del rastreo".
Para obtener una lista completa de las sugerencias de resolución de problemas específicas de la base de datos, consulte la página de soporte de WebSphere Application Server. (Puede encontrar el enlace al final de este artículo). En el campo de búsqueda de soporte, escriba un nombre de proveedor de base de datos entre sus términos de búsqueda. Seleccione Solve a problem y pulse Search.
Recuerde que siempre puede encontrar referencias sobre soporte en el tema Ayuda de IBM para la resolución de problemas que se encuentra en este Information Center.
Actualmente este centro de información proporciona un número limitado de sugerencias para la resolución de problemas para las bases de datos siguientes:
Problemas generales de acceso a datos
- Se ha producido una excepción "IllegalConnectionUseException"
- WTRN0062E: Se ha producido un intento no permitido de utilizar varios recursos que sólo tienen capacidad de una fase.
- ConnectionWaitTimeoutException.
- com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N No se ha encontrado el nombre de alias de base de datos o el nombre de base de datos "NULL". SQLSTATE=42705
- java.sql.SQLException: java.lang.UnsatisfiedLinkError:
- Recibe los mensajes "J2CA0030E: El método enlist ha captado java.lang.IllegalStateException" en el error "WTRN0063E: Se ha producido un intento no permitido de incluir un recurso con capacidad de una fase con recursos con capacidad de dos fases" cuando intenta ejecutar una transacción.
- Excepción java.lang.UnsatisfiedLinkError:xaConnect al intentar realizar una operación de base de datos
- "J2CA0114W: No se ha encontrado ningún alias de autenticación gestionada por contenedor para la fábrica de conexiones o el origen de datos datasource" cuando se intenta una operación de base de datos
- Aparece un error si utiliza el mandato ws_ant para realizar la personalización de la base de datos para el lenguaje de consulta estructurada Java en plataformas HP
- La persistencia gestionada por contenedor, CMP, no puede obtener correctamente la función de acceso a base de datos, como se ha definido.
IllegalConnectionUseException
Este error puede deberse a que se ha obtenido una conexión desde un WAS40DataSource que se está utilizando en más de una hebra. Este uso es una violación del modelo de programación de J2EE 1.3 y se genera una excepción cuando se detecta en el servidor. Este problema le ocurre a los usuarios que acceden a un origen de datos mediante servlets o mediante enterprise beans BMP (Persistencia gestionada por bean).
Para confirmar este problema, examine el código del compartimiento de conexiones. Accidentalmente, el código puede ser la causa de que se compartan las conexiones si no sigue las recomendaciones del modelo de programación, por ejemplo, si almacena una conexión en una variable de instalación de un servlet, lo que puede hacer que la conexión se utilice en varias hebras al mismo tiempo.
WTRN0062E: Se ha producido un intento no permitido de utilizar varios recursos que sólo tienen capacidad de una fase.
- Se ha intentado compartir una conexión de una sola fase pero no todas las llamadas getConnection utilizan las mismas propiedades de conexión como, por ejemplo, AccessIntent.
- Se ha intentado que más de una conexión no compartible participe en una transacción global, cuando el origen de datos no es un recurso XA.
- Se ha intentado que un recurso de una sola fase participe en una transacción
global mientras que un recurso XAM u otro recurso de una fase ya ha participado en
esta transacción global. La siguiente información puede ayudarle a identificar por qué la condición de error se produce:
- Si está utilizando un origen de datos que no sea de XA y espera compartir una conexión, establezca todos los recursos resource-ref como compartibles. Si no utiliza un resource-ref, por omisión, pasará a conexiones que no se pueden compartir.
- Su conexión no se comparte si no utiliza las mismas propiedades de conexión, como IsolationLevel o AccessIntent, en cada solicitud de conexión.
- Sus conexiones no se pueden compartir si utiliza beans CMP que puedan utilizar varias configuraciones de AccessIntent. Para obtener más información sobre los beans CMP que comparten una conexión con componentes no de CMP, consulte la información sobre las extensiones de las API de acceso a datos.
- Compruebe qué pasa el código del cliente en sus peticiones getConnection, para asegurarse de que son coherentes entre sí.
- Compruebe el ámbito en que se comparte la conexión en el enlace del
recurso, utilizando una herramienta de
ensamblaje. Consulte el tema Herramientas de ensamblaje.
- Si ejecuta un ámbito de conexión que no se puede compartir, compruebe que el origen de datos sea un origen de datos XA.
- Si ejecuta un ámbito de conexión que se puede compartir, compruebe que todas las propiedades de las conexiones, incluido AccessIntent, se puedan compartir.
- Compruebe la clase de implementación del proveedor de JDBC en el panel Gestionar recurso JDBC de la consola administrativa para asegurarse de que se trata de una clase que da soporte a las transacciones de tipo XA.
La excepción ConnectionWaitTimeoutException al acceder un origen de datos o un adaptador de recursos
- El número máximo de conexiones para una agrupación determinada se ha establecido demasiado bajo. La demanda de uso simultáneo de conexiones es mayor que el valor máximo configurado para la agrupación de conexiones. Una indicación de que este puede ser el problema es cuando se reciben estas excepciones de forma regular, pero la utilización de CPU no es demasiado alta. Esta excepción indica que hay muy pocas conexiones disponibles para mantener las hebras del servidor ocupadas.
- El valor de tiempo de espera de conexión se ha establecido demasiado bajo. La demanda actual de conexiones es lo suficientemente alta como para que algunas veces no haya una conexión disponible durante breves períodos de tiempo. Si el valor de tiempo de espera de conexión es demasiado bajo, es posible que sobrepase el tiempo de espera justo antes de que un usuario devuelva una conexión a la agrupación. Si ajusta el tiempo de espera de conexión es posible que mejore de algún modo. Una indicación de que este puede ser el problema es si utiliza prácticamente el número máximo de conexiones durante un período de tiempo prolongado y recibe este error de forma regular.
- No está cerrando algunas conexiones o está devolviendo las conexiones a la agrupación a una velocidad muy baja. Esta situación puede darse cuando utiliza conexiones que no se pueden compartir, cuando se olvida de cerrarlas o si las cierra mucho después de haber acabado de utilizarla, lo que impide que la conexión se devuelva a la agrupación para que se pueda volver a utilizar. De este modo, la agrupación se vaciará rápidamente y todas las aplicaciones obtendrán ConnectionWaitTimeoutExceptions. Una indicación de este problema es cuando se queda sin conexiones en la agrupación de conexiones y recibe este error en la mayoría de solicitudes.
- Está dirigiendo más carga de la que los recursos del servidor o del sistema de fondo pueden manejar. En este caso debe determinar qué recursos necesita más y actualizar las configuraciones o el hardware para cubrir esta necesidad. Una indicación de este problema es que el servidor de aplicaciones o el procesador de servidores de base de datos esté ocupado prácticamente al 100%.
- Modifique una aplicación para que utilice menos conexiones
- Cierre correctamente las conexiones.
- Cambie los valores de la agrupación MaxConnections o ConnnectionWaitTimeout.
- Ajuste los recursos y sus configuraciones.
com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N No se ha encontrado el nombre de alias o el nombre de base de datos "NULL"
com.ibm.websphere.ce.cm.StaleConnectionException: [IBM][CLI Driver] SQL1013N No se ha encontrado el nombre de alias o el nombre de base de datos "NULL". SQLSTATE=42705. Este error se produce cuando se ha definido un origen de datos pero el atributo databaseName y el valor correspondiente no se han añadido al panel de propiedades personalizadas.
- Pulse en la consola administrativa.
- Seleccione el proveedor_JDBC que da soporte al origen de datos problemático.
- Seleccione Orígenes de datos y, a continuación, seleccione el origen de datos problemático.
- En Propiedades adicionales, pulse Propiedades personalizadas.
- Seleccione la propiedad databaseName, o añada una si no existe, y escriba el nombre real de la base de datos como el valor.
- Pulse Aplicar o Aceptar y, a continuación, pulse Guardar en la barra de acciones.
- Vuelva a acceder al origen de datos.
java.sql.SQLException: java.lang.UnsatisfiedLinkError
Este error indica que el directorio que contiene las bibliotecas binarias que dan soporte a una base de datos no están incluidas en la variable de entorno LIBPATH para el entorno en el que se inicia WebSphere Application Server.
La vía de acceso que contiene las bibliotecas del proveedor de DBM varían según cada dbm. Una forma de localizarlas es explorar la biblioteca que falta y que se ha especificado en el mensaje de error. A continuación, se puede corregir la variable LIBPATH para que incluya el directorio que falta, ya sea en .profile de la cuenta desde la que se ejecuta WebSphere Application Server, o añadiendo una sentencia en un archivo .sh que ejecute a continuación el programa startServer.
Configure la propiedad LIBPATH Java (java.library.path) con la variable de entorno dominio_region_libpath, como control_region_libpath,
server_region_libpath, adjunct_region_libpath. Consulte el tema acerca de cómo
cambiar los valores de las variables a las que se hace referencia en los
mensajes BBOM0001I para obtener instrucciones sobre cómo establecer las
variables libpath de región.
Error J2CA0030E incluido en el error WTRN0063E
Recibe los mensajes "J2CA0030E: El método enlist ha captado java.lang.IllegalStateException" en el error "WTRN0063E: Se ha producido un intento no permitido de incluir un recurso con capacidad de una fase con recursos con capacidad de dos fases" cuando intenta ejecutar una transacción. Este error puede producirse cuando falta o está inhabilitado el soporte de último participante. El soporte de último participante permite que un recurso con capacidad de una fase y un recurso con capacidad de dos fases puedan utilizar la misma transacción.
- Se han instalado las PME (Programming Model Extensions) de WebSphere Application Server. Las PME se incluyen con el producto Application Server Integration Server.
- La opción Integration Server Extensions adicional se habilita cuando se instala PME. Si efectúa una instalación típica, esta función se habilita por omisión. Si efectúa una instalación personalizada, tiene la opción de inhabilitar esta función, que puede inhabilitar el soporte de último participante.
- La aplicación que incluye el recurso de una fase se ha desplegado con la opción Aceptar riesgos heurísticos habilitada. Este despliegue se lleva a cabo con una herramienta de ensamblaje.
Excepción java.lang.UnsatisfiedLinkError:xaConnect al intentar realizar una operación de base de datos
- La causa más común es que falte el controlador JDBC que da soporte a la conectividad con la base de datos o que no sea la versión correcta. Otra causa habitual es que las bibliotecas nativas que dan soporte al controlador no estén en la vía de acceso del sistema.
- Para resolver este problema en una plataforma Windows, verifique que el archivo JAR del controlador JDBC esté en la variable de entorno PATH del sistema:
- Si utiliza DB2, compruebe que al menos se haya instalado el producto de cliente DB2 en el host de WebSphere
- En DB2 versión 7.2 o anterior, el archivo donde se instala el producto de cliente en WebSphere Application Server es db2java.zip. Compruebe que se haya ejecutado el programa usejdbc2.bat después de instalar la base de datos y después de toda actualización del producto de base de datos.
- En DB2 versión 8.1 o posterior, utilice el controlador del proveedor del
controlador universal JDBC de DB2 cuando se define un proveedor de JDBC en WebSphere Application
Server. El archivo del controlador es db2jcc.jar. Si utiliza la opción de tipo 2 (valor predeterminado), compruebe que al menos esté
instalado el producto de cliente DB2 en el host WebSphere Application
Server. Si especifica la opción de tipo 4, el cliente DB2 no es necesario que esté instalado, pero el archivo db2jcc.jar sí que
tiene que estar presente.
Cuando se especifica la ubicación del archivo del controlador, se recomienda que especifique la vía de acceso y el nombre de archivo de la instalación de DB2 de destino, en lugar de simplemente copiar el archivo en un directorio local, si es posible. De lo contrario, pueden surgir problemas si se actualiza la instalación de DB2 y el controlador que utiliza WebSphere Application Server no se actualiza.
- Si utiliza DB2, compruebe que al menos se haya instalado el producto de cliente DB2 en el host de WebSphere
- En los sistemas operativos como, por ejemplo, AIX o Linux, asegúrese de que las bibliotecas nativas necesarias para dar soporte al cliente de base de datos del producto de base de datos están especificadas en la variable de entorno LD_LIBRARY_PATH en el perfil de la cuenta
con la que se ejecuta WebSphere Application
Server. Si utiliza DB2, la biblioteca nativa es libdb2jdbc.so. La mejor forma de garantizar que WebSphere accede correctamente a esta biblioteca es llamar al script db2profile que se suministra con DB2 desde el script .profile de la cuenta (como "root") con la que se ejecuta WebSphere.
- Si utiliza DB2 versión 7.2 o anterior, asegúrese de que se llama al usejdbc2,script que se proporciona con DB2 desde el perfil de la cuenta con la que se ha iniciado WebSphere Application Server.
- Si utiliza DB2 versión 8.1 o posterior, consulte las instrucciones anteriores para el sistema operativo Windows.
- Para resolver este problema en una plataforma Windows, verifique que el archivo JAR del controlador JDBC esté en la variable de entorno PATH del sistema:
- Si el gestor de base de datos es
DB2, es posible que haya
seleccionado la opción para crear una instancia de 64 bits. Algunas veces no se da soporte a una
configuración de 64 bits. Si
este es el caso, elimine la instancia de base de datos y cree una nueva con el valor predeterminado de 32 bits.
Si está utilizando el controlador Universal JDBC T2, WebSphere Application Server da soporte a la interacción con el servidor UDB de DB2 de 64 bits, pero debe ser a través de un cliente UDB de DB2 de 32 bits. El entorno de WebSphere Application Server (CLASSPATH, etc.) debe utilizar el código del cliente de 32 bits para garantizar el funcionamiento correcto.
Con un controlador Universal JDBC T4, no necesita el cliente DB2. Sólo es necesario que configure la vía de acceso de clase para incluir db2jcc.jar y sus archivos de licencia en el entorno WebSphere Application Server.
Nota: Si necesita información general sobre la configuración de controladores JDBC y orígenes de datos en WebSphere Application Server, consulte el tema Acceso a datos de aplicaciones.
"J2CA0114W: No se ha encontrado ningún alias de autenticación gestionada por contenedor para la fábrica de conexiones o el origen de datos datasource" cuando se intenta una operación de base de datos
Este error se puede producir en el archivo SystemOut.log cuando se ejecuta una aplicación para acceder a un origen de datos después de crear el origen de datos utilizando el script JACL.
$AdminConfig create MappingModule $cmpConnectorFactory "{mappingConfigAlias
DefaultPrincipalMapping} {authDataAlias $authDataAlias}
Para corregir este problema, añada la línea que falta al script JACL y vuelva a ejecutarlo. Consulte el tema Ejemplo: creación de un proveedor de JDBC y un origen de datos con la API de Java Management Extensions y la herramienta de scripts para obtener un ejemplo de script JACL.
Se genera un error al utilizar el mandato ws_ant para realizar la personalización de la base de datos para SQLJ en plataformas HP
[java] [ibm][db2][jcc][sqlj]
[java] [ibm][db2][jcc][sqlj] Begin customization
[java] [ibm][db2][jcc][sqlj] encoding not supported!!
La causa de este error puede ser que las bases de datos se han creado
utilizando el juego de caracteres por omisión de HP. El controlador JCC (Java Common Client) depende del SDK (Software Development Kit) para realizar las conversiones de
página de códigos. No obstante, el SDK que se suministra con este producto no admite
la página de códigos por omisión de HP.export LANG=en_US.iso88591
Consulte el sitio de soporte de IBM de Information Management Software para acceder
a las notas técnicas más recientes para DB2.La persistencia gestionada por contenedor, CMP, no puede obtener correctamente la función de acceso a base de datos, como se ha definido
Cuando WebSphere Application Server guarda en la memoria caché un código generado concreto al que se accede en la base de datos de la fábrica de conexiones y si cualquier cambio en el archivo JAR (Java Archive) requiere que se vuelva a generar el acceso a la base de datos, los cambios no entran en vigor hasta que se detiene y reinicia el servidor.
- Al añadir un método finder personalizado de enterprise bean; se crea una excepción NullPointerException.
- Al actualizar un método finder de enterprise bean; no se ejecuta la nueva sentencia SQL.
- Al cambiar la correlación de esquemas; la nueva sentencia SQL no se ejecuta.
En resumen, si añade o actualiza un enterprise bean que contiene un método finder personalizado, debe detener y luego reiniciar el servidor.