WS-Notification 故障诊断技巧

对 Web Service 的 WS-Notification 发布和预订消息传递进行故障诊断的技巧

[z/OS]为了帮助您确定并解决 WS-Notification 问题,请使用 WebSphere® Application Server 跟踪和日志记录工具(如设置组件跟踪 (CTRACE)所述)。

要对 WS-Notification 启用跟踪,请将应用程序服务器跟踪字符串设置为 SIBWsn=all=enabled:com.ibm.ws.sib.webservices.*=all=enabled。如果遇到您认为可能与 WS-Notification 有关的问题,那么可在 WebSphere Application Server 管理控制台中以及在应用程序服务器的 SystemOut.log 文件中检查错误消息。您还可以启用应用程序服务器调试跟踪来提供详细的异常转储。

注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.logSystemErr.logtrace.logactivity.log 文件。您还可以将 HPEL 与本机 z/OS 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。

WS-Notification:已知限制提供了使用 WS-Notification 时的主要已知限制列表。

WebSphere Application Server 系统消息是从各种来源(包括应用程序服务器组件和应用程序)记录的。由应用程序服务器组件和相关 IBM 产品记录的消息以唯一消息标识开头,此标识指示了发出该消息的组件和应用程序。WS-Notification 组件的前缀是 CWSJN

故障诊断者参考:消息主题包含有关所有 WebSphere Application Server 消息(按消息前缀建立了索引)的信息。每条消息都提供了问题说明以及有关任何可以用来解决该问题的操作的详细信息。

作为代理型通知的原始使用者的 JAX-WS 应用程序必须识别通知代理 SOAP 操作

JAX-WS 支持基于操作的派遣,并且 JAX-WS 原始使用者应用程序必须接受 http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify 操作 URI。可通过下列任一方法启用:
  • 在原始使用者应用程序 WSDL 文件中,修改 SOAP 绑定信息以包含通知操作 URI:
    <wsdl:operation name=“oneWayRawSubscriptionNotify”>
        <soap:operation soapAction=“http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify” />
        <wsdl:input name=“oneWayRawSubscriptionNotifyRequest”>
            <soap:body use=“literal” />
        </wsdl:input>
    </wsdl:operation>
  • 在原始使用者应用程序 WSDL 文件中,修改端口类型信息以包含通知操作 URI:
    <wsdl:operation name=“oneWayRawSubscriptionNotify”>
        <wsdl:input message=“impl:oneWayRawSubscriptionNotifyRequest”
                    name=“oneWayRawSubscriptionNotifyRequest”
                    wsam:Action=“http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify”>
        </wsdl:input>
    </wsdl:operation>
  • 使用 JAX-WS 注释以在应用程序代码中指定操作 URI http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify。有关更多信息,请参阅 JAX-WS 注释主题中 WebMethod 注释的 action 属性。

除非包括 JAX-WS 绑定文件,否则 wsimport 无法成功解析 PublisherRegistrationManager.wsdl 文件

将 WS-Notification 应用程序的 WSDL 文件发布至压缩文件,然后对 PublisherRegistrationManager.wsdl 文件运行 wsimport 命令时,将显示以下故障消息:
[ERROR] the following naming conflicts occurred: 
com.ibm.websphere.wsn.publisher_registration_manager.ResourceNotDestroyedFault
line 2 of file:/path_to_wsdl/PublisherRegistrationManager.wsdl

此故障的发生原因是发布者注册管理器的 WSDL 同时使用 WS-Notification 和 WS-ResourceLifetime 规范;这两个规范都引用共用同一消息名称的 ResourceNotDestroyedFault 元素。以下是发布者注册管理器 WSDL 文件的相关部分:

  <wsdl:operation name=“DestroyRegistration”>
    <wsdl:input name=“DestroyRegistrationRequest” message=“wsn-brw:DestroyRegistrationRequest” 
      wsam:Action=“http://docs.oasis-open.org/wsn/brw-2/PublisherRegistrationManager/DestroyRegistrationRequest” 
      wsaw:Action=“http://docs.oasis-open.org/wsn/brw-2/PublisherRegistrationManager/DestroyRegistrationRequest”/>
    <wsdl:output name=“DestroyRegistrationResponse” message=“wsn-brw:DestroyRegistrationResponse” 
      wsam:Action=“http://docs.oasis-open.org/wsn/brw-2/PublisherRegistrationManager/DestroyRegistrationResponse” 
      wsaw:Action=“http://docs.oasis-open.org/wsn/brw-2/PublisherRegistrationManager/DestroyRegistrationResponse”/>
    <wsdl:fault name=“ResourceUnknownFault” message=“wsrf-rw:ResourceUnknownFault” 
      wsam:Action=“http://docs.oasis-open.org/wsrf/fault” 
      wsaw:Action=“http://docs.oasis-open.org/wsrf/fault”/>
    <wsdl:fault name=“ResourceNotDestroyedFault” message=“wsn-brw:ResourceNotDestroyedFault” 
      wsam:Action=“http://docs.oasis-open.org/wsn/fault” wsaw:Action=“http://docs.oasis-open.org/wsn/fault”/>
  </wsdl:operation>

<!-- Some parts have been omitted -->

<!-- An extract from WS-ResourceLifetime -->
  <wsdl:operation name=“Destroy”>
    <wsdl:input name=“DestroyRequest” message=“wsrf-rlw:DestroyRequest” 
      wsam:Action=“http://docs.oasis-open.org/wsrf/rlw-2/ImmediateResourceTermination/DestroyRequest” 
      wsaw:Action=“http://docs.oasis-open.org/wsrf/rlw-2/ImmediateResourceTermination/DestroyRequest”/>
    <wsdl:output name=“DestroyResponse” message=“wsrf-rlw:DestroyResponse” 
      wsam:Action=“http://docs.oasis-open.org/wsrf/rlw-2/ImmediateResourceTermination/DestroyResponse” 
      wsaw:Action=“http://docs.oasis-open.org/wsrf/rlw-2/ImmediateResourceTermination/DestroyResponse”/>
    <wsdl:fault name=“ResourceNotDestroyedFault” message=“wsrf-rlw:ResourceNotDestroyedFault” 
      wsam:Action=“http://docs.oasis-open.org/wsrf/fault” 
      wsaw:Action=“http://docs.oasis-open.org/wsrf/fault”/>
    <wsdl:fault name=“ResourceUnknownFault” message=“wsrf-rw:ResourceUnknownFault” 
      wsam:Action=“http://docs.oasis-open.org/wsrf/fault” 
      wsaw:Action=“http://docs.oasis-open.org/wsrf/fault”/>
    <wsdl:fault name=“ResourceUnavailableFault” message=“wsrf-rw:ResourceUnavailableFault” 
      wsam:Action=“http://docs.oasis-open.org/wsrf/fault” 
      wsaw:Action=“http://docs.oasis-open.org/wsrf/fault”/>
  </wsdl:operation>

为解决此命名冲突,必须将 JAX-WS 绑定文件 ibm-wsn-jaxws.xml 作为 wsimport 命令的参数包括。此绑定文件确保冲突元素映射至不同类名。

ibm-wsn-jaxws.xml 文件位于 app_server_root/util 目录中。例如:c:\was\util\ibm-wsn-jaxws.xml 此绑定文件要求在它自身所在的目录中查找它引用的 WSDL 文件,所以,在运行 wsimport 命令之前,必须将该绑定文件复制至保存 PublisherRegistrationManager.wsdl 文件的目录。 以下是有关如何运行 wsimport 命令以包括 ibm-wsn-jaxws.xml 文件的示例:
c:\was\bin\wsimport -b ibm-wsn-jaxws.xml -keep PublisherRegistrationManager.wsdl

WS-Notification 服务接收到 triggerActionNotSupportedFault

已向 WS-Notification 服务的 V7.0 类型注册基于 JAX-WS 需求的发布者。该服务对发布者的 PausableSubscriptionManager 接口调用任何操作时,发布者将以 triggerActionNotSupportedFault 异常消息作为响应。触发此消息的操作包括 Renew、Unsubscribe、PauseSubscription 或 ResumeSubscription。

您会见到类似服务器的 SystemOut.log 文件中的以下文本的消息。在此示例中,对于尝试取消预订基于需求的发布程序的代理,将以触发故障消息作为响应。

triggerActionNotSupportedFault triggerActionNotSupportedFault: messageContext: 
[MessageContext: logID=urn:uuid:13616A3EB4F278A3DC1221827497002] problemAction: 
http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest

CWSJN1029W: An attempt was made to perform an operation on a remote NotificationProducer
 located with endpoint Address[[xxx/prod_service/NotificationProducerPort]], 
ReferenceParams[] but the operation could not be completed. This operation will be 
retried automatically in 2 seconds. 
The operation failed due to com.ibm.ws.sib.wsn.webservices.WSNWSException: 

CWSJN5035E: An internal error occurred: Unable to unsubscribe from remote publisher 
at endpoint reference Address[[xxx/prod_service/PausableSubscriptionManagerPort]], 
ReferenceParams[] due to javax.xml.ws.soap.SOAPFaultException: 
The [action] cannot be processed at the receiver.

服务器继续按不断增加的时间间隔尝试取消发布者的预订,但尝试失败。

基于需求的发布程序的 WSDL 文件未指定 SOAP 操作模式时,缺省情况下 WS-Addressing 会生成此模式。如果发布者将 PausableSubscriptionManager 端口类型用于其绑定,那么 WS-Addressing 生成的缺省操作模式与 WS-Notification 规范定义的操作不匹配。
注: 仅当发布者使用 PausableSubscriptionManager 端口类型时,才会发生此问题。如果发布者使用 SubscriptionManager 端口类型,那么 WS-Addressing 生成的缺省操作模式与 WS-Notification 规范中的操作相匹配。

为解决此问题,在基于需求的发布程序的 WSDL 文件中,必须显式指定要用于 PausableSubscriptionManager 接口上的每个操作的 SOAP 操作。要用于每个操作的操作 URI 是在 Web Services Base Notification 1.3 (WS-BaseNotification) 规范中定义的,该规范可从 http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsn 获取。例如,Unsubscribe 操作的 WS-Addressing 操作在规范中定义为 http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest,因此必须对发布者 WSDL 文件中的 Unsubscribe 操作使用此操作。以下是来自这类 WSDL 文件的绑定部分的摘录:

<wsdl:binding name=“PausableSubscriptionManagerBinding” type=“wsn-bw:PausableSubscriptionManager”>
<soap:binding style=“document” transport=“http://schemas.xmlsoap.org/soap/http” />

<wsdl:operation name=“Unsubscribe”>
<soap:operation soapAction=“http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest” />

同样,必须对发布者 WSDL 文件中的 Renew、PauseSubscription 和 ResumeSubscription 操作指定对应操作。

代理服务器日志中存在“连接超时”错误

如果在 WS-Notification 代理服务器日志中见到 WebServicesFault(“连接超时” ) 错误,并且有大量使用者预订 WS-Notification 服务,那么将出站通知消息发送至预订使用者时,代理的连接数可能会超过 HTTP 出站连接器连接池中的最大连接数。

要增加池中的出站 HTTP 连接数,应在运行代理的服务器上设置 com.ibm.websphere.webservices.http.maxConnection 定制属性。有关此属性的更多信息,请参阅 Web Service 应用程序的 HTTP 传输定制属性

代理服务器日志中存在“内存不足”错误

如果在 WS-Notification 代理服务器日志中见到“内存不足”错误,并且有大量使用者预订 WS-Notification 服务,那么代理的 JVM 堆大小可能会超过分配给运行该代理的服务器的可用 JVM 堆大小。

要增大一个或多个运行代理的服务器的最大堆大小,请参阅调整 IBM Java 虚拟机

WebSphere Application Server V6.1 客户机应用程序必须处理其他出错条件

WebSphere Application Server V6.1 中,对 WS-Notification 的支持基于 WS-Notification 标准的预先最终许可公共复审草稿。在更高版本中,此支持扩展为包括最终许可标准。WS-Notification 公共复审草稿与最终标准之间的差别如下所示:
  • • 添加了称为 UnableToGetMessagesFault 的新故障条件。它作为对 GetMessages 操作的请求的响应返回(如果某个内部条件暗示无法返回消息)。请注意,这不同于没有要返回的消息的情况,后者以不同方式处理,并且发生机率更高。
  • • GetMessages 操作的模式不再要求传递表示要返回的消息数的值。如果未传递任何值,那么会返回所有可用消息。这不会影响 V6.1 客户机应用程序,这些客户机应用程序已编码为提供值。
  • • DestroyPullPoint 操作现在会抛出 ResourceUnknownFault 故障条件以补充先前声明的故障条件。

WebSphere Application Server V7.0 或更高版本 附带的 WSDL 和模式文件更新为反映最终 V1.3 WS-Notification 标准。

不必更改现有 WS-Notification 服务。现有客户机应用程序也将继续按原样工作,但如果它们现在也使用新的 WS-Notification 服务,并且您希望它们显式处理新故障条件,请使用新服务的 WSDL 文件重新生成客户机存根。

由于未正确配置 SDO 存储库而发生异常

如果尝试创建 V6.1 WS-Notification 服务,并且获取以下堆栈跟踪,那么表示未正确配置 SDO 存储库。要解决此问题,请参阅安装和配置 SDO 存储库

java.lang.Exception: com.ibm.ws.sib.webservices.admin.config.SIBConfigException: CWSWS5010E: 
Failed to store WSDL located at http://www.ibm.com/websphere/wsn/notification-broker 
due to the following exception: com.ibm.ws.sib.webservices.exception.SIBWSUnloggedException: 
CWSWS1007E: The following exception occurred: 
com.ibm.ws.sdo.config.repository.impl.RepositoryRuntimeException: 
javax.transaction.TransactionRolledbackException: CORBA TRANSACTION_ROLLEDBACK 0x0 No; 
nested exception is: org.omg.CORBA.TRANSACTION_ROLLEDBACK: 
javax.transaction.TransactionRolledbackException: ; nested exception is: 
javax.ejb.TransactionRolledbackLocalException: ; nested exception is: 
com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException: 
PMGR1014E: Exception occurred when getting connection factory: 
com.ibm.websphere.naming.CannotInstantiateObjectException: 
threw NameNotFoundException while the JNDI NamingManager was processing a 
javax.naming.Reference object. [Root exception is javax.naming.NameNotFoundException: 
Context: smeagolNode03Cell/nodes/smeagolNode03/servers/server1, name: 
jdbc/com.ibm.ws.sdo.config/SdoRepository: 
First component in name com.ibm.ws.sdo.config/SdoRepository not found. 
[Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: 
IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]] vmcid: 0x0 minor code: 0 completed: No.

每个事件通知的通知使用者接收到多个消息

在某些情况下,在给定通知使用者上接收到的通知数可能会超出发布者插入到通知代理中的事件通知数。例如,发布了 4 条消息,但在通知使用者上接收到 8、12 或 16(或者 4 的其他倍数)条消息。

这通常是由于存在两个或更多个针对该通知使用者的活动订户而导致的 - 如果多次运行订户应用程序,就会发生这种情况。每次调用预订操作时,预订代理都必须创建新的预订(请参阅 Web Services Base Notification 规范的 4.2 节),如果已存在先前的预订,就会产生重复的消息。

要检查是否发生了这种情况,请检查通知使用者所接收的通知的 SubscriptionReference 属性。此端点引用包含导致发送通知的预订的标识。如果找到多个不同的预订标识,那么表示有多个活动的预订。

订户应用程序应该对不需要的预订进行清理(或对它们设置超时),但是,您也可以使用运行时面板对它们进行清理,如列示或删除活动的 WS-Notification 预订所述。

删除受管订户和消息传递引擎时可能发生问题

删除受管订户

在删除并重新创建总线成员上已配置了 WS-Notification 受管订户的消息传递引擎时,务必十分谨慎。这是因为,在某些情况下,这样做会导致远程 Web Service 预订保持活动状态并将通知消息传递到本地服务器,即使不再有它的任何记录亦如此。

要避免这种情况,应该删除 WS-Notification 配置,或者在一个用于删除消息传递引擎的单独步骤中仅仅删除受管订户。以后,在处理动态配置更新时,或者在服务器重新启动时,就会彻底地清理远程 Web Service 预订。

注: 如果这是唯一被修改的 WS-Notification 配置,那么不会发生此问题;只有在同时删除消息传递引擎的情况下,才会发生此问题。
集群中的受管订户

从集群中移除消息传递引擎时,应该按数字顺序从高到低执行移除操作。例如,这样就可以避免出现存在编号为 001 和 002 的消息传递引擎但没有编号为 000 的消息传递引擎的情况。这样做可以避免使用 WS-Notification 时发生问题,WS-Notification 对于集群中第一个创建的消息传递引擎非常重要。

在集群拓扑中,在一个“总线成员”(集群)上可以运行多个消息传递引擎。受管订户是针对服务点(总线成员)定义的,因此,在选择消息传递引擎以便让它负责创建对远程 Web Service 的预订时,有多个备选项。在这种情况下,集群中的“第一个”消息传递引擎负责进行预订。例如,在包含三个消息传递引擎的集群中,消息传递引擎的名称模式为 xxx-000-yyy、xxx-001-yyy 和 xxx-002-yyy,受管订户的预订将由“000”消息传递引擎管理。

如果从集群中删除了“000”消息传递引擎,然后重新启动服务器,受管预订现在将由“001”消息传递引擎管理 -“001”是集群中的最小引擎号。但是,如前所述,在删除并重新创建已配置了受管订户的总线成员上的消息传递引擎时,将导致远程 Web Service 预订保持处于活动状态(并将通知消息传递到本地服务器),即使不再有它的任何记录也是如此。因此,如果以后将另一个消息传递引擎添加到集群中,并且当前未定义 xxx-000-yyy 消息传递引擎,新引擎的名称将是 xxx-000-yyy。因此,在这种情况下,两个消息传递引擎有可能同时相信它们负责管理该受管预订,从而导致向远程 Web Service 发出多个预订。

在需要重新创建消息传递引擎 xxx-000-yyy 这种可能性不大的情况下,可以通过完成以下步骤来避免受管预订发出重复的消息:
  • 删除对此集群定义的受管预订。
  • 允许现有的消息传递引擎遵循更改。这将导致集群中的消息传递引擎删除它们所管理的受管预订。
  • 在集群中创建新的消息传递引擎。
  • 重新创建受管预订。

将总线目标与 V6.1 WS-Notification 服务配合使用时存在差别

通常,可按总线目标中所述使用总线目标。但是,对于 V6.1 WS-Notification 服务,情况不是这样。与 V6.1 WS-Notification 服务相关的目标不能与 WS-Notification 服务可对其处理请求的主题相关,并且不应改变或调解该目标。在 WS-Notification 中,主题的配置是通过主题名称空间处理的。有关更多信息,请参阅 创建新 WS-Notification 永久主题名称空间

创建 V6.1 WS-Notification 服务时,向导为 WS-Notification 服务配置三个服务集成总线入站服务,三个 WS-Notification 服务角色中的每一个对应一个服务:
  • 通知代理
  • 预订管理器
  • 发布者注册管理器
这些入站服务是在 V6.1 WS-Notification 服务所在服务集成总线上定义的,并且这些入站服务中的每个服务都引用同一个总线目标。

入站(应用程序到代理)通知未成功

希望将事件通知发布到代理的应用程序使用通知操作。此操作定义为单向 (Web Service) 操作,这表示无法完成此操作时不可能返回故障(异常)。因此,应用程序将假定通知成功,但预订应用程序不会接收到通知消息。

通知可能不成功的原因是应用程序错误(主题语法无效)或者应用程序代码与服务器配置不匹配(使用了未定义的主题名称空间)。入站通知可能不成功的特定原因包括:
  • 主题无效:提供的主题表达式与所指定方言的语法不匹配,或者它们指定了不受支持的方言。发生了应用程序错误。
  • 主题名称空间无效:应用程序指定了未配置的主题名称空间,但管理员对 WS-Notification 服务指定(在 WS-Notification 服务上)不允许使用动态名称空间。
  • 主题不受支持:提供给主题名称空间的主题名称空间文档禁止使用指定的主题(例如,该主题是已被标记为“终态”的主题的子主题)。
  • 凭证无效:指定的用户标识或密码无效或者没有必需的权限。此问题是由于应用程序配置与服务器安全策略不匹配导致的。
  • 发布者未注册:应用程序在未首先向代理注册的情况下尝试发送通知,但管理员已将 WS-Notification 服务配置为要求应用程序注册。此问题是由应用程序错误导致的 - 正确的应用程序在向代理进行发布前应该首先检查是否需要进行注册。
  • 相关联的服务集成总线主题空间已被禁用。

由于此类故障可能表示存在“拒绝服务”攻击,并且肯定表示应用程序的工作不正常,所以,您需要严密地监视此类异常。来自特定生产应用程序的入站通知第一次失败时,会将一条警告消息发送到服务器的 SystemOut 日志中。接着,如果该生产者的通知继续失败,就会每 30 分钟记录一次定时警告消息。每条定时消息都附带提供了其他信息以指示在 30 分钟的时间间隔内对该生产者接收到的失败通知数。

当系统生成每条警告消息时,它通过两个标识中的一个来标识生产应用程序:
  • 通知操作中提供的通知消息的 ProducerReference 元素。此元素唯一地标识应用程序。但是,此元素是可选的。
  • 发出请求的主机的 IP 地址。此地址可能未唯一地标识应用程序,但能够缩小搜索范围。
注: 系统无法在所有情况下标识主机 IP 地址。例如,对于 SOAP over JMS 传输来说,发出请求的主机的 IP 地址将不可用或不适用。

出站(代理到应用程序)通知不成功

如果远程应用程序不可调用,那么出站 Web Service 调用(代理到应用程序)不会成功。这可能是由于应用程序故障、网络错误或防火墙配置问题所致。如果未将事件通知传递至预订的应用程序,那么会导致预订消息在服务器上积压。您可以使用运行时面板来查看给定预订的累积消息,如列示或删除活动的 WS-Notification 预订所述。当在 WS-Notification 预订运行时管理面板上进行查看时,以此方式失败的最新事件通知尝试的相关预订将被标记为处于错误状态。

如果 WS-Notification 服务点未能成功地通知通知使用者应用程序,就会将警告消息发送到应用程序服务器的 SystemOut 日志中,并且将指示预订等待 2 分钟。此类故障的原因可能是远程 Web Service 当前不可用,或者网络状态导致本地服务器与服务之间的联系中断。

在 2 分钟过后,将再次尝试该通知。如果仍然无法进行传递,就会使该预订重新进入等待状态并且再等待 2 分钟。如果此故障是由瞬态 I/O 错误导致的,此模式就会不断反复,直到成功地传递该通知或者您删除该预订为止。如果此错误是由远程端的应用程序故障导致的,就会重试该通知,直到达到从中接收该消息的服务集成总线主题空间目标的“最大失败传递次数”设置所定义的次数为止。在将第一条警告消息输出到 SystemOut 日志之后,后续的定时警告消息将每 30 分钟记录一次。

清理未自动删除的有状态资源

向代理进行预订或者注册发布者的操作将在服务器上创建有状态资源,该资源在活动状态下会耗用系统资源。通常,应用程序在创建这些资源时将指定终止时间,因此达到终止时间时将自动删除这些资源。但是,应用程序也可以请求使该资源的生存期不受限制。如果这样做,这些资源就可能会无限期地留在服务器上,即使应用程序永远不再使用(或破坏)它们亦如此。

您可以使用运行时面板来查看有状态资源(预订和发布者注册),如在运行时与 WS-Notification 进行交互所述。这些面板还使您能够根据需要删除这些资源。仅当您确定应用程序不再使用这些资源时才应该将它们删除,这是因为,如果在删除资源后引用它们,应用程序就会发生故障。

使用服务集成总线面板时无法删除由 WS-Notification 创建的持久预订

在使用 WS-Notification 应用程序创建预订时(即,通过使用“预订”操作来创建预订时),将在相关服务集成总线主题空间目标中创建一个或多个持久预订。可以在发布点的服务集成总线运行时面板中查看这些持久预订。

发布点的运行时面板还使您能够删除一个或多个持久预订。但是,如果使用此功能来删除由 WS-Notification 应用程序创建的预订,删除操作就会失败。原因是 WS-Notification 实现在服务器的运行期间为此持久预订维护活动使用者,如果存在活动使用者,就不能删除该持久预订。
注: 此项删除限制还适用于由其他应用程序(例如 JMS 应用程序)创建的持久预订。

要删除由 WS-Notification 应用程序创建的预订,请使用 WS-Notification 实现提供的运行时面板,如在运行时与 WS-Notification 进行交互所述。此方法将关闭活动使用者并自动删除相关服务集成总线持久预订。

消息传递引擎的管理性停止

WebSphere Application Server 必须能够访问运行中的服务集成总线消息传递引擎才能发送和接收消息,以及创建和检索各种已创建的 Web Service 资源的状态。

可以使用 MBean 接口或运行时面板来停止消息传递引擎。这将导致 WS-Notification 在消息传递引擎停止期间无法成功地为任何来自应用程序的请求提供服务。在这种情况下,将记录错误消息,如入站(应用程序到代理)通知未成功出站(代理到应用程序)通知不成功所述。停止消息传递引擎时,所有 WS-Notification 处理都将停止,并且所有消息传递应用程序都将停止工作。重新启动消息传递引擎后,WS-Notification 处理将继续进行。

由于更改主题空间配置和主题名称空间配置而导致的故障

WS-Notification 配置工件通常依赖于其他服务器配置领域中定义的对象。例如(对于 V6.1 WS-Notification 服务),这些对象包括用来接收应用程序请求的端点侦听器以及发送和接收消息时使用的服务集成总线主题空间。

下列内容描述了 WS-Notification 运行时代码在满足它所依赖的对象的相关更改时执行的操作。

删除服务集成总线主题空间

服务集成总线主题空间是 WS-Notification 在运行时依赖的主消息传递对象。来自应用程序的通知消息将被发送到管理员指定的(永久)主题名称空间映射所指定的主题空间。

删除服务集成总线主题空间时,会对新的和现有的 WS-Notification 应用程序产生下列影响:
  • 使用了引用已删除的主题空间的 WS-Notification 主题名称空间的“注册发布者”请求将接收到 TopicNotSupportedFault 错误消息。
  • 已删除的主题空间的相关主题的通知请求不会将消息发布到该主题空间(这是因为它已被删除)。由于通知操作不会抛出任何故障,所以应用程序不会接收到通知(请参阅入站(应用程序到代理)通知未成功)。
  • 使用了 WS-Notification 主题名称空间并引用了已删除的主题空间的“预订”请求将接收到 SubscribeCreateFailedFault 错误消息。
  • 不会将其他消息传递到对已删除的主题空间拥有预订的应用程序。现有的预订将被删除,任何对该预订调用操作(例如 getCreationTime)的尝试都将导致 ResourceUnknownFault 错误消息。
  • 删除与重新创建服务集成总线主题空间被视为两个单独的步骤。作为对第一个步骤的响应,将删除现有的预订,因此,在重新创建主题空间时,该预订已不存在。
删除永久主题名称空间映射

删除用来建立(当前活动)预订的主题名称空间映射等同于删除先前定义的底层服务集成总线主题空间, 并且还将删除使用此名称空间映射创建的预订。

还将删除所删除的主题名称空间映射的相关发布者注册和拉出点。

更改永久主题名称空间映射

永久主题名称空间映射的字段是只读的,因此,“更改”这些字段的唯一方法是删除该名称空间映射并使用新的值来重新创建它。上面的内容描述了删除永久主题名称空间映射的效果。

在未配置 SDO 存储库的情况下无法创建 V6.1 WS-Notification 服务

创建 V6.1 WS-Notification 服务时,WSDL 文档将保存至 SDO 存储库。成功配置 SDO 存储库前,如果尝试使用管理控制台或通过脚本编制创建 V6.1 WS-Notification 服务,您就会看到以下异常消息。
java.lang.Exception: com.ibm.ws.sib.webservices.admin.config.SIBConfigException: CWSWS5010E: Failed to 
store WSDL located at http://www.ibm.com/websphere/wsn/notification-broker due to the following 
exception:
    com.ibm.ws.sib.webservices.exception.SIBWSUnloggedException: CWSWS1007E: The following exception 
        occurred: com.ibm.ws.sdo.config.repository.impl.RepositoryRuntimeException: 
        javax.transaction.TransactionRolledbackException: CORBA TRANSACTION_ROLLEDBACK 0x0 No; nested 
        exception is: org.omg.CORBA.TRANSACTION_ROLLEDBACK: 
        javax.transaction.TransactionRolledbackException: ;
    nested exception is: javax.ejb.TransactionRolledbackLocalException: ;
    nested exception is: com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException: PMGR1014E: 
        Exception occurred when getting connection factory: 
        com.ibm.websphere.naming.CannotInstantiateObjectException: threw NameNotFoundException while 
        the JNDI NamingManager was processing a javax.naming.Reference object.
    [Root exception is javax.naming.NameNotFoundException: Context: 
        KADGINNode01Cell/nodes/KADGINNode01/servers/server1, name: 
        jdbc/com.ibm.ws.sdo.config/SdoRepository: First component in name 
        com.ibm.ws.sdo.config/SdoRepository not found.
    [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: 
        IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]] vmcid: 0x0 minor code: 0 completed: No.
有关如何配置 SDO 存储库的详细信息,请参阅安装和配置 SDO 存储库

没有因特网访问权的 JAX-WS 客户机尝试与 WS-Notification 服务联系时发生异常

通常,客户机应用程序通过追踪 Web 链接来解析服务的 WSDL 部件。如果运行客户机的机器没有因特网访问权,那么将发生类似于以下示例的异常:
WSDLException (at /definitions/import[1]): faultCode=OTHER_ERROR:
Unable to resolve imported document at 'http://docs.oasis-open.org/wsn/brw-2.wsdl', 
relative to 'http://localhost:9082/WSNService1WSNServicePt1NB/Service/WEB-INF/wsdl
/NotificationBroker.wsdl': java.net.UnknownHostException: docs.oasis-open.org

通过按照配置 JAX-WS 客户机以在不访问以下 Web 链接的情况下解析 WS-Notification 服务 WSDL主题中的指示信息执行操作,将客户机配置为改为使用 WSDL 文件的本地副本。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rjwsn_prob0
文件名:rjwsn_prob0.html