java - 无法访问 OrientDB plocal 数据库。文件 '.ocf' 被另一个进程锁定

标签 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.

我好像忘记在加载夹具后释放一些东西。

最佳答案

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

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

Orient.instance().shutdown();

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

关于java - 无法访问 OrientDB plocal 数据库。文件 '.ocf' 被另一个进程锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34399334/

相关文章:

java - GAE 必须先调用 set*BlobStorage() 之一

java - XML解析、动态结构、内容

java - 初始化 DTO 中的字段

GWT 在编译器的类路径上获取继承的模块

java - ANTLR4 运行时 JAR

java - 使用本地更改覆盖 Maven 依赖项时发生冲突

java - orientdb本地节点不是master

java - 我可以动态更改 org.apache.tomcat.jdbc.pool.DataSource 的 maxActive 属性吗?

java - Orientdb - 导出具有特定数据表的数据库

orientdb - 用于删除数据库(如果存在)并在 OrientDB 中创建新数据库的命令