WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 db4o 指南: 事务、分布和安... 阅读

面向 Java 开发人员的 db4o 指南: 事务、分布和安全性

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示:在本系列中,我介绍了使用 db4o 进行面向对象数据管理的基本要素,面向 Java 开发人员的 db4o 指南: 事务、分布和安全性,但是还有一点没有讨论,那就是如何在 Web 应用程序中使用 OODBMS,让 ObjectServer 在端口 0 上监听,这样会告诉它以 “嵌入式” 模式运行,

在本系列中,我介绍了使用 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(); 
    } 
  } 

1 2 3 4 5  下一页

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接