面向 Java 开发人员的 db4o 指南: 事务、分布和安全性
2010-04-01 00:00:00 来源:WEB开发网保护数据
保护有线形式(wire-format)的数据传输比较困难,因为 db4o 6.3 及以前的版本都没有提供工具跨安全的传输线(比如通过 SecureSocket 传输的 SSL)进行通信。这意味着任何敏感数据都必须以加密的方式传输,这暗示着对象本身应该包含某种形式的加密(如果 db4o 可以直接实现这一功能就太好了;在撰写本文的时候,db4o 6.4 版已经计划支持将 SocketFactory 传递到 openServer 调用,因此您可以使用 SecureSocket 连接取代完全开放的 Socket 连接)。
注意可以使用定制编组程序 通过 “横切(cross-cutting)” 方式进行传递以保护数据。顾名思义,这使您能够控制数据的打包(和解包)方式,以在线路上进行传输。这种方法与通过 Externalizable 接口定制串行化非常相似:编写一个实现 ObjectMarshaller 接口的类,实现 readFields() 和 writeFields() 方法,然后告诉 db4o 系统对特定类的对象使用定制的编组程序,具体方法是在目标类的 ObjectClass 上调用 marshallWith()。完整的代码如下:
Db4o.configure().objectClass(Item.class).marshallWith(customMarshaller);
这样做不会保护整个线路 — 攻击者仍然可以查看保存的对象类型 — 但是它会在网络上进行节点到节点传输时阻止数据被别人查看。
当 db4o 选项 “嵌入式和客户机/服务器” 不能满足需要时,比如将数据存储到特定的文件格式或非传统的数据存储资源中,db4o 库允许创建 IoAdaptor 的一个子类,该类是 db4o 在存储对象时写入数据的关键抽象。这让存储具有一定程度的灵活性,而大多数 RDBMS 系统都不具有这种灵活性。
结束语
关于 OODBMs 和 db4o,还有大量内容值得讨论和研究,但是我已经完成了预定目标并决定暂时结束本系列。我相信我展示了一个关于 db4o 和面向对象数据管理的良好示例,并从 Java 开发人员的角度介绍了 RDBMS 不同于 OODBMS 的特性。我展示了如何使用 db4o 轻松地跟踪关联(track association);db4o 如何获得作为数据库优秀概念的继承性;db4o 如何使用定义对象的原生编程语言简化对象检索。
我也讨论了 OODBMS 的一些不足,以及 db4o 与 RDBMS 都存在的缺陷,比如在处理客户机-服务器网络中的 “往返传输” 时出现的性能问题。
只要跟随本系列的示例并试用了其中的代码,就会获得使用任何 OODBMS 系统(不只是 db4o)的必备技巧。您可以尝试将所学知识应用到 Cache' 或 Versant 上。大多数 OODBMS 都遵循相同的基本编码约定和惯用表达式,而且实际上 db4o 对原生查询的支持已逐渐成为一种标准,使该特性成为所有 OODBMS 的一部分。
希望您能在本系列中找到所需的内容,并已准备好在您自己的项目中使用 OODBMS。这将是一种轻松的体验,不用担心关系模式和所有相关的内容。因此,请放松心情:试验、实现、在实践中体验乐趣,不要忘了来信告诉我您的经验(或者给我发送电子邮件)。
更多精彩
赞助商链接