在生产环境中运行企业应用程序时,了解故障条件下系统的行为非常重要。本文介绍 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中国
作者
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
总线技术究竟该不该用?
曾几何时企业服务总线(ESB)被视为企业IT的核心。今天,不仅ESB受到了比被废弃还要糟糕的攻击,若干开发趋势似乎对更简单的消息总线也发起了质疑。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?