面向 Java 开发人员的 db4o 指南: 事务、分布和安全性
2010-04-01 00:00:00 来源:WEB开发网在本系列中,我介绍了使用 db4o 进行面向对象数据管理的基本要素。但是还有一点没有讨论,那就是如何在 Web 应用程序中使用 OODBMS,以及与在 Swing 或 SWT 中使用 OODBMS 有何不同。可以说,我忽略的这些内容是 Java(或 .NET)开发人员不能忽略的。
一定程度上,我应该关注 OODBMS 最引人注目的功能:面向对象数据的存储、操作和检索。同样地,OODBMS 供应商也试图实现诸如事务管理和安全性之类的核心功能。这些功能与各种 RDBMS 的相应功能类似,并且具有类似的选项范围。
在面向 Java 开发人员的 db4o 指南 的最后一期中,我将要讨论任何数据存储系统(面向对象的、关系的,等等)都应该拥有的 3 个特性。了解 db4o 如何支持应用程序安全性、分布和事务。
多客户端连接
迄今为止,我为本系列编写的代码都假设数据库只有一个客户端。换句话说,只会为数据库创建一个逻辑连接,所有的交互都通过该连接来完成。对于要访问配置数据库或逻辑存储系统的 Swing 或 SWT 应用程序,这是一个非常合理的假设。但是对于 Web 应用程序,即使是所有的存储都是在 Web 表示层完成的程序,这个假设也不太符合实际。
在 db4o 系统中,打开第二个数据库逻辑连接非常简单,即使当数据库驻留在本地磁盘上时也是如此。我只需要首先添加一个调用创建 ObjectServer,并从 ObjectServer 获取 ObjectContainer 对象。让 ObjectServer 在端口 0 上监听,这样会告诉它以 “嵌入式” 模式运行,并且在进行下一个探察测试时不会打开(或威胁)实际的 TCP/IP 端口。
清单 1. 嵌入式连接
@Test public void letsTryMultipleEmbeddedClientConnections()
{
ObjectServer server = Db4o.openServer("persons.data", 0);
try
{
ObjectContainer client1 = server.openClient();
Employee ted1 = (Employee)
client1.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next();
System.out.println("client1 found ted: " + ted1);
ObjectContainer client2 = server.openClient();
Employee ted2 = (Employee)
client2.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next();
System.out.println("client2 found ted: " + ted2);
ted1.setTitle("Lord and Most High Guru");
client1.set(ted1);
System.out.println("set(ted1)");
System.out.println("client1 found ted1: " +
client1.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next());
System.out.println("client2 found ted2: " +
client2.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next());
client1.commit();
System.out.println("client1.commit()");
System.out.println("client1 found ted1: " +
client1.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next());
System.out.println("client2 found ted2: " +
client2.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next());
client2.ext().refresh(ted2, 1);
System.out.println("After client2.refresh()");
System.out.println("client2 found ted2: " +
client2.get(
new Employee("Ted", "Neward", null, null, 0, null))
.next());
client1.close();
client2.close();
}
finally
{
server.close();
}
}
更多精彩
赞助商链接