面向 Java 开发人员的 db4o 指南: 事务、分布和安全性
2010-04-01 00:00:00 来源:WEB开发网刷新对象视图
注意,当运行该测试时,我向测试代码中添加了一些输出行。需要对发生的行为进行跟踪,因为 db4o 需要一直保持对打开对象的引用。还应该确保了解内存中对象的更新是在什么时候和什么位置 “传递” 给第二个客户端的。
适用用例:当我进行 set(ted1) 调用时,db4o 系统修改其内部状态,以了解 ted1 是脏对象并需要更新。但是,在使用 ObjectContainer 上的 commit() 方法提交显式事务之前,它不会进行实际更新。此时,数据被写入磁盘,但是跟磁盘上的数据相比,内存中 client2 的对象视图仍然是陈旧的(回顾一下探察测试的输出。在阅读本系列时,您已经 在流览器旁边的控制台窗口运行了该代码)。
改进方法很简单:client2 使用 extension 对象上的 refresh() 方法刷新它在内存中的对象图视图,extension 对象由 ext() 返回。注意激活深度是一个重要因素:当刷新对象时,您希望 db4o 深入到对象图的哪个深度?在本例中,逐步降低深度(single step down)就可以检索修改的 Employee 了,但是对于不同的情形,应该重新考虑。
一旦其对象视图被刷新,client2 就会了解到所做的更改。快速查询将会显示出公司领导的新头衔。
跨多个进程
大多数时候,多个客户端不会只具有单个进程,而是可以跨多个进程。例如,在典型的客户机-服务器风格中,将有多个客户机而不是一个 servlet 容器与单个服务器会话。在 db4o 中实现此功能的方法与 清单 1 大体相同。惟一的区别在于需要用一个非 0 的端口号来打开服务器。该端口号表示服务器监听的 TCP/IP 端口。所有基于 TCP/IP 的通信都是这样,当进行连接时,客户端必须指定主机名和端口。
更多精彩
赞助商链接