2

異なるプログラムから同じdbファイルに並行してアクセスしたい。すべてのプログラムが同じVMで実行されています。私が使用するコードは次のとおりです。

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();
    }
}

2番目のプログラムを実行すると、DatabaseFileLockedExceptionが発生します。このデータベースを並行して使用するにはどうすればよいですか?

4

1 に答える 1

3

同時に 1 つの 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 に答える