WPS 和 WebSphere ESB中的异常处理

日期: 2007-12-09 作者:Pamela Fong 来源:TechTarget中国

  在生产环境中运行企业应用程序时,了解故障条件下系统的行为非常重要。本文介绍 IBM WebSphere Process Server(以下称为 Process Server)和 IBM WebSphere Enterprise Service Bus(以下称为 Enterprise Service Bus)中的异常的基本类别。本文介绍:

  系统在遇到问题时有何行为
  在何处记录问题
  如何从各种问题中恢复
  SCA 入门知识

  在深入研究错误处理之前,您需要了解服务组件体系结构 (SCA) 的一些基础知识,其中包括接口类型、调用模式和异常类别。

  接口类型

  SCA 支持两种接口类型:

  JTtype
  使用 Java™ 接口定义
  WType
  使用 WSDL 端口类型定义

  该类型用于描述接口和引用。使用引用的客户端编程人员必须与基于类型的引用交互。调用或服务提供程序的目标是可以使用引用方式不同的类型(J 类型或 W 类型)。SCA 将消除该差异。

  可以在 JType 和 WType 接口上声明业务异常。JType 接口使用一个抛出子句,而 WType 接口则是声明错误。

  调用模式

  SCA 提供以下两种调用样式:

  同步
  阻止对目标进行的请求和在同一线程上返回的响应。
  异步
  不阻止进行的请求,并在单独的线程中提供响应。
  在异步样式中,SCA 异步编程模型提供三种类型的异步调用模式:

  单向

  作为“即发即弃”(Fire and Forget) 调用模式使用。客户端调用通过引用提供的操作,并立即返回控制。不返回任何响应、异常或错误。

  延迟响应
  请求–响应异步调用模式。客户端进行请求,并在客户端适宜时间请求响应。
  回调
  请求–响应异步调用模式。当响应准备就绪时,客户端实现由 SCA 运行时调用的回调接口。
  了解调用模式之间的差异对理解您可能面临的错误条件至关重要。

  异常类别

  在 Process Server 和 Enterprise Service Bus 中,应用程序是使用 SCA 编程模型构建的。它定义两种类型的错误条件:业务异常和系统异常 – 在编程模型中称为 ServiceBusinessException 和 ServiceRuntimeException。

  业务异常

  业务异常是在 业务方法的函数签名中声明的、经过检查的异常(WSDL 错误或 Java 抛出)。使用业务异常可标识应用程序或服务预期的错误条件。一个示例是用于股票报价服务的 InvalidSymbolException。此类异常由 ServiceBusinessException 包装,并传递回客户端。

  系统异常

  系统异常也称为运行时异常。它们 不是在方法签名中声明的。通常,它们表示应用程序无法预知的错误条件,如 Java 组件中的 NullPointerException。这些异常由 ServiceRuntimeException 包装,并传递回客户端,该客户端可以查询 ServiceRuntimeException 来确定原因。

  在 SCA 编程模型中,将一些内置系统异常定义为 ServiceRuntimeException 的子类:

  ServiceExpirationRuntimeException

  指示异步 SCA 消息已过期。可以使用服务引用上的 RequestExpiration 或 ResponseExpiration 限定符设置过期时间。

  ServiceTimeoutRuntimeException

  指示在指定的时间限制内不接收对异步请求的响应,该时间限制是在使用延迟响应异步通信模式时,在 invokeResponse() 调用过程中以编程方式设置的。

  ServiceUnavailableException

  指示在通过导入调用外部服务时抛出异常。
  ServiceUnwiredReferenceRuntimeException
  指示组件上的服务引用连接不正确。
  异步调用的异常处理

  当同步调用服务组件时,客户端和服务提供程序在同一线程中执行。目标可以向客户端返回响应消息、异常返回,或者不返回任何内容(在单向操作中)。如果结果为异常,则它可以是业务异常或系统异常。本例中的客户端可以是应用程序代码或系统代码的某一形式。

  图 1. 调用组装图

  下面是一个示例客户端,它调用使用 JType 接口声明的 Java 组件。该接口具有一个按以下方式声明的方法:

  清单 1. 股票报价接口

  public interface StockQuote {
  float getQuote(String symbol) throws InvalidSymbolException;
  }

  客户端代码与以下内容类似:

  清单 2. 股票报价同步客户端报价

  try {
  float quote = StockQuoteService.getQuote(String symbol);
  } catch (InvalidSymbolException s) {
  System.out.println(This is business exception declared in the Java interface.);
  } catch (ServiceRuntimeException e) {
  System.out.println(Unchecked system exception detected);
  }

  在上面的场景中,第一个异常 InvalidSymbolException 指示请求已到达不能识别客户端输入的服务提供程序。服务提供程序然后抛出业务异常,指示提供的符号无效。此业务异常就是方法签名声明的唯一异常。

……

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐