我有一些查询 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.
我好像忘记在加载夹具后释放一些东西。
最佳答案
在查看OConsoleDatabaseApp
实现中的static main
方法时找到了答案。
实例化并使用控制台后,执行下一行。
Orient.instance().shutdown();
这似乎释放了锁定的数据库。
关于java - 无法访问 OrientDB plocal 数据库。文件 '.ocf' 被另一个进程锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34399334/