2

我想从不同的程序并行访问同一个数据库文件。所有程序都在同一个虚拟机上运行。这是我使用的代码:

private ObjectContainer db;

public DatabaseManager(String dbName) {
    ObjectServer server = Db4oClientServer.openServer(Db4oClientServer
            .newServerConfiguration(), dbName, 0);
    try {
         db = server.openClient();

        // Do something with this client, or open more clients

    } catch(Exception ex) {
        ex.printStackTrace();
    }
}

当我运行第二个程序时,我得到了 DatabaseFileLockedException。如何并行使用这个数据库?

4

1 回答 1

3

只有一个 db4o 实例可以同时访问数据库文件。如果您在对象容器打开时尝试重新打开它,您将收到此 DatabaseFileLockedException。

在同一个 JVM 实例中,您可以像这样打开新的会话容器

 ObjectContainer rootContainer = // the one you've opened the file with
 ObjectContainer session = rootContainer.ext().openSession()

使用您的代码,您也可以使用 .openClient() 方法来做同样的事情。但是,只要您在同一个 JVM 实例中,您实际上就不需要客户端服务器的东西。您可以将上述内容与常规嵌入式对象容器一起使用。

如果您需要从多个数据库访问同一个数据库,那么您需要一个完整的客户端-服务器设置

于 2012-05-08T12:36:23.257 回答