2013-08-22 3 views
4

Так что я в основном делаю это.Закрытие «локального» OrientDB при использовании пулов соединений

OObjectDatabaseTx result = OObjectDatabasePool.global().acquire("local:orientdb", "admin", "admin"); 
//dostuff 
result.close; 

Проблема заключается в том, что, когда я передислоцировать свой веб-приложение (без перезагрузки контейнера Java EE) я получаю ошибку феллинг:

com.orientechnologies.orient.core.exception.OStorageException: Cannot open local storage 'orientdb' with mode=rw 

который я растолковать означает «Tomcat до сих пор FileLock от последнее приложение ".

Итак, мой вопрос: как я могу выйти из этого сценария? Я пробовал:

OObjectDatabasePool.global().close() 

и

new OObjectDatabaseTx("local:orientdb").close() 

но ни похоже на работу. Есть идеи? Документация не совсем ясна по этой проблеме.

ответ

4

Установить свойство «storage.keepOpen» ложь:

java ... -Dstorage.keepOpen=false ... 

или через Java-код:

OGlobalConfiguration.STORAGE_KEEP_OPEN.setValue(false); 
+0

Я хотел, чтобы моя программа, чтобы переместить каталог базы данных после ее использования, и обнаружили, что в дополнение к закрытию базы данных и всех хранилищ (либо путем установки упомянутого выше свойства, либо вызова close (true) для каждого объекта в Orient.instance(). getStorages()), мне также пришлось вызвать System.gc() для файла чтобы фактически быть выпущен, прежде чем я смогу переместить каталог. Я также назвал System.runFinalization() после GC для хорошей оценки. Я несколько раз повторяю в петле со сном, потому что нет никаких гарантий, которые GC собирает. Я использую версию OrientDB 1.4.1, встроенную в мой процесс. – PolyTekPatrick

+0

v1.4.1? Это довольно старый. В последних версиях мы предоставляем этот новый API: 'Orient.instance.closeAllStorages()' – Lvca

+0

Да, мне еще не удалось обновить его по разным причинам. Как насчет API для переименования/перемещения базы данных при закрытии? Было бы неплохо, если бы мне не пришлось называть сборщика мусора. Мне нужен API для работы, даже если база данных полностью повреждена или папка на самом деле не является базой данных. – PolyTekPatrick

Смежные вопросы