无法访问 OrientDB plocal 数据库。文件“.ocf”被另一个进程锁定
Can not access OrientDB plocal database. File '.ocf' is locked by another process
我有一些查询 OrientDB plocal 图形数据库的集成测试。
我有一个装置可以将一些数据加载到数据库中。如果夹具作为每个测试的 setUp()
方法的一部分加载,那么一切正常,并且测试 运行 符合预期。
由于所有测试的夹具都是相同的,因此只加载一次夹具是有意义的,就在测试开始执行之前。
我正在使用 Maven 构建项目。在 pre-integration-test
阶段,我调用了 java class(通过 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();
此 class 的调用结束正常,但是当第一个集成测试尝试访问数据库时我失败了。
异常:
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();
这似乎释放了锁定的数据库。
我有一些查询 OrientDB plocal 图形数据库的集成测试。
我有一个装置可以将一些数据加载到数据库中。如果夹具作为每个测试的 setUp()
方法的一部分加载,那么一切正常,并且测试 运行 符合预期。
由于所有测试的夹具都是相同的,因此只加载一次夹具是有意义的,就在测试开始执行之前。
我正在使用 Maven 构建项目。在 pre-integration-test
阶段,我调用了 java class(通过 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();
此 class 的调用结束正常,但是当第一个集成测试尝试访问数据库时我失败了。
异常:
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();
这似乎释放了锁定的数据库。