在CORBA应用程序中,程序员需要调用远程对象引用的方法.然而远程对象引用可能由于某些原因而失效使得调用过程失败.一般情况下这种失败只要捕获异常再做决定即可.然后某些关键调用过程要求必须成功,对于这种需求将其抽象出一个代码框架,实现了对于远程调用失败的一种保护方法.
带保护的远程调用宏
REMOTE_PROTECT_CALL(METHOD, METHOD_NAME, FAILED_ACTION, LOCK)
参数意义:
METHOD:调用函数,就是实际的方法调用代码
METHOD_NAME:函数名字,字符串,框架使用它打印出错误信息
FAILED_ACTION:调用失败时的处理代码,程序员自定义的调用失败时的处理办法
LOCK:多线程环境下的同步锁,有些情况下,可能多个线程在调用同一个方法,如果多个线程都调用失败则都会执行错误处理代码.使用锁确保只有一个线程在做错误处理
使用例子,假设有这样的接口
interface Remote{
short fun(in short arg);
};
如果调用失败,则调用unBindObj和bindObj重新获取对象引用
代码如下:
Remote_var obj = ...//获取对象引用
MTLMonitor lock;
REMOTE_PROTECT_CALL(obj->fun(3),
"obj->fun(3)",
unBindObj();bindObj();,
lock);
框架代码如下:
//
定义带有保护的远程调用框架
#define MAX_TRY_REMOTE_CALL_FAILED_CT 5
#define MAX_TRY_REMOTE_CALL_FAILED_CT 5