2012-05-08 7 views
2

다른 프로그램에서 동일한 db 파일을 병렬로 액세스하고 싶습니다. 모든 프로그램은 동일한 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이 발생합니다. 병렬로이 DB를 사용하는 방법?

답변

3

하나의 db4o 인스턴스 만 데이터베이스 파일에 동시에 액세스 할 수 있습니다. 객체 컨테이너가 열려있는 동안 다시 열려고하면이 DatabaseFileLockedException이 발생합니다.

같은 JVM 인스턴스 내에서 새로운 session containers like이를 열 수 있습니다 당신은 또한 같은 작업을 수행 할 .openClient() 메서드를 사용하여 코드와

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

합니다. 그러나 실제로 동일한 JVM 인스턴스에있는 한 클라이언트 서버는 필요하지 않습니다. 위의 내용을 일반 내장 객체 컨테이너와 함께 사용할 수 있습니다.

여러 데이터베이스에서 동일한 데이터베이스에 액세스해야하는 경우에는 client-server setup이 필요합니다.