ice 的 Nonmutating 和 Idempotent
来源:互联网 发布:马来西亚导航软件 编辑:程序博客网 时间:2024/06/07 11:18
from:http://duckweeds.blog.sohu.com/95754129.html
Nonmutating 操作
有一些操作,例如上面代码中的getTime操作,这个操作不会修改所操作的对象的值。它们在概念上等效于C plus plus的const 成员函数。你可以如下的指出这样的操作:
interface Clock
{
nonmutating TimeOfDay getTime();
void setTime(TimeOfDay time);
};
nonmutating关键字指出了getTime操作不会修改它所操作的对象的状态。这样使用有两个原因:
- 语言映射可以关于操作行为的附加知识的好处。例如:对于C plus plus来说,nonmutating操作映射到const成员函数。
- 当得知一个操作不会修改对象的状态,则允许Ice运行时更积极的进行错误恢复。特别的,Ice会保证操作调用的最多一次语义。
对于普通的操作,Ice运行时对于如何处理错误是保守的。例如,如果一个客户端发送一个操作调用到服务器,然后丢失了连接,对于客户端的 Ice运行时来说,没有办法知道调用是否成功。这就意味着,运行时不能通过尝试重新连接和再次发送请求来恢复错误,因为这可能第二次引发操作以及违背了最多一次语义。运行时没有选择,只能把错误报告给应用。对于nonmutating操作,换句话说,客户端的运行时可以尝试再次连接和安全的二次送出失败的请求。如果第二次发送能够到达服务器,那么万事OK。只有第二次再次失败,错误才会报告给应用(错误重试的次数可以在Ice的配置文件中配置)。
Idempotent操作
我们可以更进一步去修改上面的Clock接口的定义,从而可以让setTime操作是idempotent的:
interface Clock
{
nonmutating TimeOfDay getTime();
idempotent void setTime(TimeOfDay time);
};
对某一个操作进行两次成功的操作,其结果都一样,就像只调用了一次一样,那么这个操作就是idempotent操作。例如,x = 1; 是一个idempotent操作因为不管执行了一次还是两次,x的值都是1。换句话说,x += 1;就不是一个idempotent操作,因为它执行了两次后,结果不同了。
idempotent关键字指出了一个操作能够安全的执行多次。同nonmutating操作一样,Ice运行时使用idempotent来达到更积极地错误恢复。
一个操作只能是nonmutating或idempotent,不能两个都是。(nonmutating隐含了idempotent)
- ice 的 Nonmutating 和 Idempotent
- Ice 的 Nonmutating 和 Idempotent
- ICE编程中的 Nonmutating 和 Idempotent
- interface/class 的 Nonmutating 和 Idempotent
- ice中的nonmutating is not defined提示
- `nonmutating' is not defined (Ice)
- ICD和ICE的区别
- ICD和ICE的区别
- ICE的Timer和TimerTask
- ICD和ICE的区别
- ICD和ICE的区别
- Windows下安装Ice和设置Ice的环境变量
- Ice自学第一步——Windows下安装Ice和设置Ice的环境变量
- Ice自学第一步——Windows下安装Ice和设置Ice的环境变量
- ice:selectOneMenu 和 ice:selectManyCheckbox
- ICE:C#和Java共同的服务器
- ICE的日志和统计接口
- ICE的输入流和输出流
- .NET图片上传类(支持任何大小的缩略图)直接调用 简单易理解
- linux启动oracle服务
- 契
- 设备驱动模型初探
- SOAP和WSDL的一些必要知识
- ice 的 Nonmutating 和 Idempotent
- 在VC程序中使用调试语句
- 在Ubuntu下安装Gtk+的开发套件
- 使用Packet Sniffer分析Z-Stack协议数据
- Flex_与java的通信
- 有关int与unsigned的区别
- C# 操作线程的通用类[测试通过]
- Release版与Debug版程序的问题
- SQL中如何取得系统时间和日期(时间要求返回6位,比如152910;日期要求返回8位,比如20070517)