消息传递故障诊断小贴士
这些小贴士将帮助您对 WebSphere® 消息传递配置进行故障诊断。
为了帮助确定并解决有关消息传递的问题,您可以使用 WebSphere Application Server 跟踪和日志记录工具。
为了帮助确定并解决有关消息传递的问题,您可以使用设置组件跟踪 (CTRACE) 中描述的 WebSphere Application Server 跟踪和日记记录工具。
如果在 WebSphere Application Server 消息和日志中看到 IBM MQ 错误消息或原因码,请参阅 IBM MQ 信息中心的消息章节。
使用诊断和修正问题:学习资源中的链接来检查是否已确定并记录了此问题。
- WebSphere MQ 资源适配器配置不会自动进行更新并且需要手动维护
- 安装修订包时发生 java.lang.ClassNotFoundException 异常
- JMS 应用程序不会使用来自 WebSphere MQ for z/OS 的消息
- JMS 应用程序不能再发送或接收消息
- MDB 侦听器无法启动
- 在启用安全性的情况下运行 JMS 应用程序发生的问题
当在 Solaris 上设置 zh_TW.EUC 语言环境时,应用程序服务器不会启动
- 处理 JMS 消息时的服务器内存消耗和 java.lang.OutOfMemoryError 异常
- TopicConnectionFactory 属性冲突错误
- “WSEC5061E: 未签署 SOAP 主体”异常
- 使用 IBM MQ 作为外部 JMS 提供程序时出错
javax.jms.JMSException: MQJMS3024:无法启动 MDB 侦听器
服务器启动期间显示 WebSphere MQ 消息传递提供程序通道框架消息
WebSphere MQ 资源适配器配置不会自动进行更新并且需要手动维护
通常,IBM MQ 资源适配器是在您应用 WebSphere Application Server 修订包时自动更新的。但是,如果您已在环境中的某些节点上手动更新 IBM MQ 资源适配器,那么应用修订包不会自动更新这些节点上的服务器所使用的资源适配器。
要解决此问题,请参阅维护 IBM MQ 资源适配器。
安装修订包时发生 java.lang.ClassNotFoundException 异常
J2CA0043E: 尝试对 ResourceAdapter 进行实例化时发生异常
已安装的 ResourceAdapter 的 JavaBean 实例由键 #removed# 定义
JMS 应用程序不会使用来自 WebSphere MQ for z/OS 的消息
被部署到 WebSphere Application Server 中的和使用连接工厂或激活规范的 JMS 应用程序将不会占用来自 WebSphere MQ for z/OS 的消息
JMS 应用程序不能再发送或接收消息
- 通过 Java™ 消息服务 (JMS) 激活规范连接的一个或多个消息 Bean。
- 通过 JMS 连接工厂和 JMS 目标连接的一个或多个企业 Bean。
- 有关给定应用程序的 JMS 资源的视图,请参阅以下面板:此应用程序的消息传递资源。
- 有关给定缺省消息传递提供程序目标的应用程序和 JMS 资源的视图,请参阅以下面板:此目标的应用程序资源。
MDB 侦听器无法启动
WMSG0019E: Unable to start MDB Listener {0}, JMSDestination {1} : {2}
- 请检查是否已经正确配置了管理资源。 例如,使用管理控制台来检查侦听器端口属性:目标 JNDI 名称和连接工厂 JNDI 名称。检查侦听器端口、目标和连接工厂的其他属性是否正确。
- 检查队列是否存在以及是否已添加到 JMS 服务器。
- 检查队列管理器和 JMS 服务器是否已启动。
- 检查远程队列管理器侦听器是否已启动。
如果启用安全性,那么检查是否在消息驱动的 Bean 使用的队列连接工厂或主题连接工厂上指定了组件管理的认证别名。
如果启用安全性,请检查用于启动 MDB 侦听器的用户标识的授权是否恰当。 有关更多信息,请参阅在启用安全性的情况下运行 JMS 应用程序发生的问题。
在启用安全性的情况下运行 JMS 应用程序发生的问题
WMSG0019E: Unable to start MDB Listener PSSampleMDB, JMSDestination Sample/JMS/listen :
javax.jms.JMSSecurityException:
此示例表明提供的安全性凭证无效。- 如果认证机制设置为应用程序,那么应用程序必须提供有效的凭证。
- 如果将认证机制设置到容器,那么您必须配置具有容器管理的认证别名的 JMS 连接工厂,并确保关联的用户标识和密码有效。
或者,当在绑定传输方式中运行时,您可以使用连接器线程标识支持。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
MQJMS2013 invalid security authentication supplied for MQQueueManager:
如果您要使用 IBM MQ 作为 JMS 提供程序,具有 JMS 连接并使用绑定传输方式,而指定的用户不是 WebSphere Application Server 进程的当前登录用户,那么通过 IBM MQ 的 JMS 绑定认证将生成无效的安全认证错误。- 使用安全凭证。要执行此操作,请确保指定的用户是 WebSphere Application Server 进程的当前登录用户。
- 不使用安全凭证。在 IBM MQ 连接工厂中,确保未设置组件管理的认证别名和容器管理的认证别名属性。
有关消息传递安全性的更多信息,请参阅对消息传递进行保护。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
当在 Solaris 上设置 zh_TW.EUC 语言环境时,应用程序服务器不会启动
在 Solaris 上,如果您将语言环境设置为 zh_TW.EUC 并且要使用 IBM MQ 作为 JMS 提供程序,那么应用程序服务器可能无法启动。
要解决此问题,请将 LANG 和 LC_ALL 变量设置为 zh_TW。
处理 JMS 消息时的服务器内存消耗和 java.lang.OutOfMemoryError 异常
当您使用缺省消息传递提供程序时,由消息传递引擎在应用程序服务器进程中处理 JMS 消息。这种方法将消耗应用程序服务器 Java 虚拟机堆的内存。如果存在大型消息的重要的并发处理,并且 Java 虚拟机堆可用内存量不足以处理此事件,那么将会抛出 java.lang.OutOfMemoryError 异常,并且应用程序服务器将终止。
- 当您部署并发地处理消息的消息驱动的 Bean 时,请估计并发端点可能消耗的应用程序服务器的内存。请注意并发地处理消息请求的每个端点将向服务器 Java 虚拟机堆中至少添加两倍的消息大小,并且可能添加更大的消息大小,尤其是存在两阶段事务的情况下。
- 启动 WebSphere Application Server 管理控制台。
- 导航至初始堆大小和最大堆大小属性来配置应用程序服务器 Java 虚拟机堆的可用内存量。 ,然后通过设置
- 导航至最大并发端点属性,来配置可以处理消息的并发 MDB 端点的数目。 ,然后通过设置用以此消息驱动的 Bean 的激活规范的
TopicConnectionFactory 属性冲突错误
WSVR0017E: Error encountered binding the J2EE resource, TopicConnectionFactory, as <JNDI_NAME>
from file:<RESOURCES_FILE> com.ibm.ws.runtime.component.binder.ResourceBindingException: invalid
configuration passed to resource binding logic. REASON: Failed to create connection factory:
Error raised constructing AdminObject, error code: TopicConnectionFactory attributes clash :
TopicConnectionFactory attributes clash
此问题是用于创建订户的 JMS 主题连接工厂的配置所导致的,该配置指定了代理版本“基本”和消息选择值“代理”。“基本”IBM MQ 代理(MA0C SupportPac 代理)不支持“代理”消息选择。
要解决此问题,请更改 JMS 主题连接工厂以指定消息选择值“客户机”,该值是 IBM MQ 基本代理(MA0C SupportPac 代理)支持的唯一值。
“WSEC5061E: 未签署 SOAP 主体”异常
com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5061E: The SOAP Body is not signed.; null
- 使用 Web Service 安全性配置的 Web Service 应用程序正在已启用 WebSphere Application Server 安全性的应用程序服务器中运行。
- 此 Web Service 应用程序使用 JMS 传输将 SOAP 请求发送至目标 Web Service。
- JMS 资源使用远程IBM MQ 服务器连接至 IBM MQ 队列。
- 另一个完全相同的 Web Service 应用程序(配置为使用通过同一 IBM MQ 服务器的同一队列)正在未启用 WebSphere Application Server 安全性的另一个应用程序服务器中运行。
当处理通过同一队列但指向不同(未启用安全性的)应用程序服务器的从原始应用程序发送的请求时,将发生此问题。
- 在 IBM MQ 服务器中创建具有唯一端口的唯一队列管理器。
- 重新配置 JMS 资源以使用新的队列管理器和端口;例如,通过使用 WebSphere Application Server 管理控制台来更改 IBM MQ 队列连接工厂的属性(如为 IBM MQ 消息传递提供程序配置队列连接工厂中所述)。
- 重新运行应用程序。
使用 IBM MQ 作为外部 JMS 提供程序时出错
使用 IBM MQ 作为外部 JMS 提供程序,并且将消息发送至用户管理的事务内的 IBM MQ 队列时,该消息可以在事务落实前到达目标队列。如果 IBM MQ 资源管理器未参与用户管理的事务,那么将发生此问题。
要解决此问题,请使用容器管理的事务。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
javax.jms.JMSException: MQJMS3024:无法启动 MDB 侦听器
- 使用 jmsadmin 工具将客户机标识设置为 tcf 的属性。例如,更改 tcf(myTCF) clientid(myID)。
- 使用 TopicConnection.setClientID() 以编程方式设置客户机标识
- 使用管理控制台来修改 IBM MQ 消息传递提供程序主题连接工厂设置 以通过管理方式设置客户机标识字段。
![[z/OS]](../images/ngzos.gif)
服务器启动期间显示 WebSphere MQ 消息传递提供程序通道框架消息
在服务器启动期间,控制区域助手进程中可能会多次显示以下消息,即使随后进行重试时连接成功也是如此。发出此消息的原因是,z/OS TCP 代理通道以异步方式启动,但该消息并不表示发生了任何错误。
跟踪时间:2009/06/17 08:24:41.434 01 t=9C6B58 c=UNK key=P8 (00000011)
描述:记录 Java 消息
消息:CHFW0030E: 启动链 _InboundTCPProxyBridgeService 时出错,
因为发生了异常 com.ibm.wsspi.channel.framework.exception.RetryableChannelException:
尝试启动 TCPProxyChannel 时抛出了异常
com.ibm.ws.channel.framework.imp l.ChannelFrameworkImpl
发出这些消息的同时,可能会显示首次故障数据捕获 (FFDC) 输入,其内容类似于以下示例:异常 = com.ibm.wsspi.channel.framework.exception.RetryableChannelException
源 = com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChainInternal
probeid = 2577
堆栈转储 = com.ibm.wsspi.channel.framework.exception.RetryableChannelException:
尝试启动 TCPProxyChannel 时抛出了异常
at com.ibm.ws.tcpchannelproxy.jfap.impl.TCPProxyInboundChannel.
start(TCPProxyInboundChannel.java:153)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChannelInChain(ChannelFrameworkImpl.java:1410)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChainInternal(ChannelFrameworkImpl.java:2863)
at com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl.
startChainInternal(WSChannelFrameworkImpl.java:960)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChainInternal(ChannelFrameworkImpl.java:2794)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChain(ChannelFrameworkImpl.java:2779)
at com.ibm.ws.runtime.component.ChannelFrameworkServiceImpl.
startChain(ChannelFrameworkServiceImpl.java:666)
at com.ibm.ws.sib.jfapchannel.framework.impl.ChannelFrameworkReference$TCPProxy
BridgeServiceInboundChainStartupRunnable.run(ChannelFrameworkReference.java:1641)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
原因:com.ibm.ws.tcpchannelproxy.jfap.NotYetInitializedException:
服务器尚未初始化
at com.ibm.ws.tcpchannelproxy.jfap.TCPProxyBridgeServicesImpl.
startListening(TCPProxyBridgeServicesImpl.java:558)
at com.ibm.ws.tcpchannelproxy.jfap.impl.TCPProxyInboundChannel.
start(TCPProxyInboundChannel.java:131)
... 8 more
跟踪时间:2009/06/17 08:24:51.449 01 t=9C6B58 c=UNK key=P8 (13007002)
ThreadId: 00000003
FunctionName: com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl
SourceId: com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl
Category: AUDIT
ExtendedMessage: BBOO0222I: CHFW0019I: 传输通道服务已启动
链 _InboundTCPProxyBridgeService。