2015-12-21 134 views
3

我有一些集成測試查詢OrientDB plocal圖形數據庫。無法訪問OrientDB plocal數據庫。文件'.ocf'被另一個進程鎖定

我有一個夾具,它將一些數據加載到數據庫中。如果夾具作爲每個測試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

OConsoleDatabaseApp實施中查看static main方法時找到了答案。

實例化並使用控制檯後,執行下一行。

Orient.instance().shutdown(); 

這似乎釋放鎖定的數據庫。