Proveedor de mensajería predeterminado: consejos para la resolución de problemas
Utilice este conjunto de consejos específicos como ayudar para la resolución de problemas de mensajería JMS con el proveedor de mensajería predeterminado.
Para ver consejos generales sobre la resolución de problemas con la mensajería de WebSphere Application Server, consulte Sugerencias para la resolución de problemas de mensajería. Este tema proporciona consejos adicionales específicos del proveedor de mensajería predeterminado y su uso de tecnologías de integración de servicios.
- Un destino pasa a estar lleno y ya no puede recibir mensajes porque los mensajes existentes no se consumen.
- Una aplicación JMS ya no puede enviar ni recibir mensajes.
- Las aplicaciones cliente JMS en ejecución en el contenedor de cliente Java EE (Java Platform, Enterprise Edition) fallan al invocar al método ConnectionFactory.createConnection
Un destino pasa a estar lleno y ya no puede recibir mensajes porque los mensajes existentes no se consumen.
- Uno o más beans de mensajes conectados a través de las especificaciones de activación JMS (Java™ Message Service).
- Uno o varios beans de empresa conectados mediante fábricas de conexiones JMS y destinos JMS.
Puede utilizar el siguiente panel de la consola administrativa para inspeccionar la configuración de las aplicaciones y los recursos JMS que utilizan el destino: Recursos de aplicación para este destino.
Este panel puede ayudarle a encontrar la causa del problema facilitándole una vista de alto nivel de muchos recursos pertinentes.
Una aplicación JMS ya no puede enviar ni recibir mensajes.
- Uno o más beans de mensajes conectados a través de las especificaciones de activación JMS (Java Message Service).
- Uno o varios beans de empresa conectados mediante fábricas de conexiones JMS y destinos JMS.
Conecte la aplicación a los beans de mensajes o enterprise beans a través del descriptor de despliegue de la aplicación, o a través del código de la propia aplicación. Si ha conectado la aplicación a través del descriptor de despliegue, puede utilizar el siguiente panel de la consola administrativa para ver como un todo la aplicación de negocio instalada e inspeccionar la configuración de los recursos JMS que la aplicación está utilizando: Recursos de mensajería para esta aplicación.
Este panel puede ayudarle a encontrar la causa del problema facilitándole una vista de alto nivel de muchos recursos pertinentes.
Las aplicaciones cliente JMS en ejecución en el contenedor de cliente Java EE (Java Platform, Enterprise Edition) fallan al invocar al método ConnectionFactory.createConnection
CWSIJ0005E: No se puede encontrar una instancia de servicio Infraestructura de canales para
utilizarla para las comunicaciones.
- Causa
ConnectionFactory para el proveedor de mensajería predeterminado tiene una dependencia respecto al servicio Infraestructura de canales. Localiza el servicio Infraestructura de canales utilizando una búsqueda en el espacio de nombres JNDI. Para conectarse a un servicio de denominación, ConnectionFactory utiliza un objeto InitialContext creado mediante el constructor predeterminado.
Cuando el cliente JMS se ejecuta en un entorno de servidor de aplicaciones, el objeto InitialContext puede conectarse satisfactoriamente al servicio de denominación, el servicio Infraestructura de canales se localiza y la llamada a createConnection se completa satisfactoriamente.
Sin embargo, cuando el cliente JMS se ejecuta dentro del contenedor de cliente Java EE, el objeto InitialContext utiliza el valor de la propiedad del sistema java.naming.provider.url, para determinar la ubicación del servicio de denominación al que se conectará. Si no se especifica ningún valor para esta propiedad, intentará conectarse a un servicio de denominación situado en el puerto 2809 en la máquina cliente local. Si no hay ningún servidor ejecutándose en la máquina cliente, no habrá ningún servicio de denominación receptor en este puerto de la máquina local. Esto hará que el método createConnection falle con el siguiente error:
- Solución
- Una aplicación cliente JMS puede especificar el valor de java.naming.provider.url de manera programática, utilizando código con el formato:
String key = "java.naming.provider.url"; String value = "iiop://some.remote.machine:9810"; System.setProperty(key, value);
Este código debe ejecutarse antes de invocar el método createConnection en el objeto ConnectionFactory.
De forma alternativa, si utiliza el script launchClient desde la línea de mandatos para iniciar el contenedor de cliente Java EE, puede especificar cualquiera de los parámetros siguientes de la línea de mandatos:- launchClient <CLIENT EAR> -CCBootstrapHost=some.remote.machine -CCBootstrapPort=981
- launchClient <CLIENT EAR> -CCproviderURL=iiop://some.remote.machine:9810
Con ello se asegurará de que, si no se ha especificado programáticamente ningún URL de proveedor, los objetos InitialContext utilizarán de forma predeterminada el URL de proveedor especificado en la línea de mandatos.