Standard-Messaging-Provider: Tipps zur Fehlerbehebung
Verwenden Sie die folgenden spezifischen Tipps für die Fehlerbehebung beim JMS-Messaging mit dem Standard-Messaging-Provider.
Allgemeine Tipps zur Behebung von Problemen mit dem Messaging in WebSphere Application Server finden Sie im Artikel Tipps zur Fehlerbehebung beim Messaging. Dieser Artikel enthält zusätzliche spezielle Tipps für den Standard-Messaging-Provider und die Verwendung der Serviceintegrationstechnologien.
- Die Kapazität eines Ziels ist erschöpft, und es kann keine Nachrichten mehr empfangen, weil die vorhandenen Nachrichten nicht konsumiert werden.
- Eine JMS-Anwendung kann keine Nachrichten mehr senden oder empfangen
- JMS-Clientanwendungen, die im Java EE-Client-Container ausgeführt werden, schlagen beim Aufruf der Methode "ConnectionFactory.createConnection" fehl
Die Kapazität eines Ziels ist erschöpft, und es kann keine Nachrichten mehr empfangen, weil die vorhandenen Nachrichten nicht konsumiert werden.
- Einer oder mehreren Message-Beans, die über JMS-Aktivierungsspezifikationen (Java Message Service) miteinander verbunden sind.
- Einer oder mehreren Enterprise-Beans, die über JMS-Verbindungsfactorys und JMS-Ziele miteinander verbunden sind.
Sie können die folgende Anzeige in der Administrationskonsole verwenden, um die Konfiguration der Anwendungen und JMS-Ressourcen zu überprüfen, die das Ziel verwenden: Anwendungsressourcen für dieses Ziel.
Diese Anzeige kann Ihnen helfen, die Ursache des Problems zu ermitteln, weil sie Ihnen eine Übersicht über viele relevante Ressourcen liefert.
Eine JMS-Anwendung kann keine Nachrichten mehr senden oder empfangen
- Einer oder mehreren Message-Beans, die über JMS-Aktivierungsspezifikationen (Java Message Service) miteinander verbunden sind.
- Einer oder mehreren Enterprise-Beans, die über JMS-Verbindungsfactorys und JMS-Ziele miteinander verbunden sind.
Sie verbinden Ihre Anwendung mit den Message-Beans oder Enterprise-Beans über den Implementierungsdeskriptor der Anwendung oder über Code in der Anwendung selbst. Wenn Sie Ihre Anwendung über den Implementierungsdeskriptor mit den Beans verbinden, können Sie die folgende Anzeige in der Administrationskonsole verwenden, um die installierten Geschäftsanwendungen in einer Übersicht anzuzeigen und die Konfiguration der JMS-Ressourcen zu überprüfen, die von der Anwendung verwendet werden: Messaging-Ressourcen für diese Anwendung.
Diese Anzeige kann Ihnen helfen, die Ursache des Problems zu ermitteln, weil sie Ihnen eine Übersicht über viele relevante Ressourcen liefert.
JMS-Clientanwendungen, die im Java EE-Client-Container ausgeführt werden, schlagen beim Aufruf der Methode "ConnectionFactory.createConnection" fehl
CWSIJ0005E: Es wurde keine Instanz des Kanalframeworkservice für die Kommunikation
gefunden.
- Ursache
Die Verbindungsfactory für den Standard-Messaging-Provider ist vom Kanalframeworkservice abhängig. Sie sucht den Kanalframeworkservice mit einer Lookup-Operation im JNDI-Namespace. Für die Verbindungsherstellung zu einem Namensservice verwendet die Verbindungsfactory ein InitialContext-Objekt, das mit dem Standardkonstruktor erstellt wird.
Wenn der JMS-Client in einer Anwendungsserverumgebung ausgeführt wird, kann das InitialContext-Objekt die Verbindung zum Namensservice herstellen, den Kanalframeworkservice finden und den Aufruf der Methode "createConnection" ordnungsgemäß durchführen.
Falls der JMS-Client jedoch im Java EE-Client-Container ausgeführt wird, verwendet das Objekt "InitialContext" den Wert der Systemeigenschaft "java.naming.provider.url", um die Position des Zielnamensservers zu bestimmen. Wenn für diese Eigenschaft kein Wert definiert ist, versucht das Objekt, die Verbindung zu einem Namensservice herzustellen, der an Port 2809 auf der lokalen Clientmaschine ausgeführt wird. Wenn auf der Clientmaschine keine Server ausgeführt werden, ist an diesem Port der lokalen Maschine kein Namensservice empfangsbereit. Dies führt zum Scheitern der Methode "createConnection".
- Lösung
- Eine JMS-Clientanwendung kann den Wert der Eigenschaft "java.naming.provider.url" über das Programm mit Code wie dem folgenden angeben:
String key = "java.naming.provider.url"; String value = "iiop://some.remote.machine:9810"; System.setProperty(key, value);
Dieser Code muss vor dem Aufruf der Methode "createConnection" für das ConnectionFactory-Objekt ausgeführt werden.
Wenn Sie das Script "launchClient" in der Befehlszeile ausführen, um den Java EE-Client-Container zu starten, können Sie alternativ einen der folgenden Befehlszeilenparameter angeben:- launchClient <CLIENT EAR> -CCBootstrapHost=some.remote.machine -CCBootstrapPort=981
- launchClient <CLIENT EAR> -CCproviderURL=iiop://some.remote.machine:9810
Falls über das Programm kein Provider-URL bereitgestellt wird, stellen Sie damit sicher, dass alle InitialContext-Objekte standardmäßig den in der Befehlszeile angegebenen Provider-URL verwenden.