无法访问OrientDB本地数据库。文件'.ocf'被另一个进程

时间:2015-12-21 15:40:11

标签: java maven orientdb nosql

我有一些集成测试查询OrientDB plocal 图形数据库。

我有一个夹具可以将一些数据加载到数据库中。如果夹具作为每个测试的setUp()方法的一部分加载,那么一切正常,测试按预期运行。

由于所有测试的夹具都是相同的,因此在测试开始之前,只需加载夹具一次是有意义的。

我正在使用maven构建项目。在pre-integration-test阶段,我调用了一个java类(通过exec-maven-plugin),它做了类似这样的事情:

 String[] consoleArgs = { scriptUrl.getPath() };
 OConsoleDatabaseApp consoleApp = new OConsoleDatabaseApp(consoleArgs);
    try {
    consoleApp.dropDatabase(iURL, TESTDB_USER, TESTDB_PASSWORD, storageType);
    consoleApp.createDatabase(iURL, TESTDB_USER, TESTDB_PASSWORD, storageType, "graph");
    } catch (IOException e1) {
         throw new IllegalStateException(e1);
   }

if (consoleApp.run() != 1) {
    throw new IllegalStateException(ERROR_LOADING_SCHEMA);
}

consoleApp.disconnect();
consoleApp.close();

这个类的调用结束很好,但是当第一个集成测试试图访问数据库时,我就会失败。

例外:

com.orientechnologies.orient.core.exception.OStorageException: Cannot open local storage 'target/databases/benchmark-integration' with mode=rw
Caused by: com.orientechnologies.orient.core.exception.OSerializationException: Cannot load database's configuration. The database seems to be corrupted.
Caused by: com.orientechnologies.common.concur.lock.OLockException: File 'target\databases\benchmark-integration\database.ocf' is locked by another process, maybe the database is in use by another process.

在加载灯具后,我似乎忘了发布一些东西。

1 个答案:

答案 0 :(得分:2)

在查看static main实施中的OConsoleDatabaseApp方法时找到答案。

实例化并使用控制台后,将执行下一行。

Orient.instance().shutdown();

这似乎释放了锁定的数据库。