分类:
2009-10-11 02:33:55
4.7 系统异常处理器
除了CORBA::TRANSIENT的某些情况,所有调用过程中发生的系统异常都默认地被传递给应用程序代码。一些应用程序或许希望捕获代理对象中的异常以便于应用层逻辑无需处理这些错误。例如,当CORBA::COMM_FAILURE异常被捕获时,应用程序也许只想重新激发调用直到成功为止,这在服务对象是持久的而且具有幂等操作(idempotent operation)时非常有用。omniORB提供了一些函数来创建异常处理器,当ORB运行库抛出异常时,代理对象就可以自行调用这些代码来进行处理。应用程序可以为CORBA::TRANSIENT、CORBA::COMM_FAILURE和CORBA::SystemException创建异常处理器,其中CORBA::SystemException的处理程序用来应对其它两个无法处理的异常。可以为单个代理对象创建异常处理器,也可以为地址空间中的所有代理对象创建。
omniORB 4.0的一个新特性就是用异常次级代码/次要代码(exception minor code)来反映系统异常时的环境。文件include/omniORB4/minorCode.h里定义了omniORB用到的所有异常次级代码,涵盖了CORBA标准以及omniORB本身定义的。如果编译器支持命名空间,这些代码存在于omni命名空间中,否则为全局定义。
应用程序可以利用异常次级代码来根据不同情况予以调整,例如:
try {
...
}
catch (CORBA::TRANSIENT& ex) {