2012-05-08 7 views
2

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

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を取得し、第2のプログラムを実行すると。このデータベースを並行して使用するには?

答えて

3

データベースファイルに同時にアクセスできるdb4oインスタンスは1つだけです。オブジェクトコンテナが開かれている間に再度開くと、このDatabaseFileLockedExceptionが発生します。あなたのコードで

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

あなたも同じことを行うために.openClient()メソッドを使用することができます。

同じJVMインスタンス内では、このsession containers like新しいを開くことができます。しかし、実際には、同じJVMインスタンスにいる限り、クライアント・サーバーは必要ありません。上記のものは、通常の埋め込みオブジェクトコンテナで使用できます。

複数のデータベースから同じデータベースにアクセスする必要がある場合は、フルブローclient-server setupが必要です。

関連する問題