缺省消息传递提供程序:故障诊断技巧
使用下面一组特定技巧帮助您对使用缺省消息传递提供程序的 JMS 消息传递时遇到的问题进行故障诊断。
有关诊断 WebSphere® Application Server 消息传递问题的一般技巧,请参阅消息传递故障诊断小贴士。本主题提供了特定于缺省消息传递提供程序及其对服务集成技术的使用的其他技巧。
- 目标变满,并且不能再接收消息,因为现有消息还未被使用。
- JMS 应用程序不能再发送或接收消息
- 当调用 ConnectionFactory.createConnection 方法时,在 Java Platform Enterprise Edition (Java EE) 客户机容器中运行的 JMS 客户机应用程序失败
目标变满,并且不能再接收消息,因为现有消息还未被使用。
- 通过 Java™ 消息服务 (JMS) 激活规范连接的一个或多个消息 Bean。
- 通过 JMS 连接工厂和 JMS 目标连接的一个或多个企业 Bean。
可使用以下管理控制台面板检查使用该目标的应用程序和 JMS 资源的配置:此目标的应用程序资源。
此面板可通过给出许多相关资源的高级视图来帮助您找到问题的原因。
JMS 应用程序不能再发送或接收消息
- 通过 Java 消息服务 (JMS) 激活规范连接的一个或多个消息 Bean。
- 通过 JMS 连接工厂和 JMS 目标连接的一个或多个企业 Bean。
通过应用程序的部署描述符或应用程序本身的代码将应用程序连接至消息 Bean 或企业 Bean。如果通过部署描述符连接应用程序,那么可使用以下管理控制台面板将已安装业务应用程序作为整体查看,并检查应用程序要使用的 JMS 资源的配置:此应用程序的消息传递资源。
此面板可通过给出许多相关资源的高级视图来帮助您找到问题的原因。
当调用 ConnectionFactory.createConnection 方法时,在 Java Platform Enterprise Edition (Java EE) 客户机容器中运行的 JMS 客户机应用程序失败
CWSIJ0005E: An instance of the channel framework service to use for communication
cannot be found.
- 原因
缺省消息传递提供程序的连接工厂依赖于“通道框架服务”。它通过在 JNDI 名称空间中查询来找到“通道框架服务”。要连接到命名服务,ConnectionFactory 将使用通过缺省构造函数创建的 InitialContext 对象。
当 JMS 客户机在应用程序服务器环境中运行时,InitialContext 对象能够成功地连接至命名服务,找到了“通道框架服务”,并且成功地完成了调用 createConnection。
然而,当 JMS 客户机正在 Java EE 客户机容器中执行时,InitialContext 对象使用 java.naming.provider.url 系统属性的值来确定要连接至的命名服务的位置。如果没有为此属性指定任何值,那么它会尝试连接至位于本地客户端机器的 2809 端口上的命名服务。如果没有任何服务器在客户端机器上运行,那么本地机器上没有在此端口侦听的命名服务。此问题会导致 createConnection 方法失败。
- 解决方案
- JMS 客户机应用程序可以使用以下格式的代码以编程方式指定 java.naming.provider.url 的值:
String key = "java.naming.provider.url"; String value = "iiop://some.remote.machine:9810"; System.setProperty(key, value);
应该在对 ConnectionFactory 对象调用 createConnection 方法之前运行此代码。
或者,如果您从命令行中使用 launchClient 脚本来启动 Java EE 客户机容器,那么可以指定下列任一命令行参数:- launchClient <CLIENT EAR> -CCBootstrapHost=some.remote.machine -CCBootstrapPort=981
- launchClient <CLIENT EAR> -CCproviderURL=iiop://some.remote.machine:9810
这将确保如果没有以编程方式指定任何提供程序 URL,那么任何 InitialContext 对象缺省为使用在命令行上指定的提供程序 URL。