我有一些集成测试查询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.
在加载灯具后,我似乎忘了发布一些东西。
答案 0 :(得分:2)
在查看static main
实施中的OConsoleDatabaseApp
方法时找到答案。
实例化并使用控制台后,将执行下一行。
Orient.instance().shutdown();
这似乎释放了锁定的数据库。