Так что я в основном делаю это.Закрытие «локального» 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()
но ни похоже на работу. Есть идеи? Документация не совсем ясна по этой проблеме.
Я хотел, чтобы моя программа, чтобы переместить каталог базы данных после ее использования, и обнаружили, что в дополнение к закрытию базы данных и всех хранилищ (либо путем установки упомянутого выше свойства, либо вызова close (true) для каждого объекта в Orient.instance(). getStorages()), мне также пришлось вызвать System.gc() для файла чтобы фактически быть выпущен, прежде чем я смогу переместить каталог. Я также назвал System.runFinalization() после GC для хорошей оценки. Я несколько раз повторяю в петле со сном, потому что нет никаких гарантий, которые GC собирает. Я использую версию OrientDB 1.4.1, встроенную в мой процесс. – PolyTekPatrick
v1.4.1? Это довольно старый. В последних версиях мы предоставляем этот новый API: 'Orient.instance.closeAllStorages()' – Lvca
Да, мне еще не удалось обновить его по разным причинам. Как насчет API для переименования/перемещения базы данных при закрытии? Было бы неплохо, если бы мне не пришлось называть сборщика мусора. Мне нужен API для работы, даже если база данных полностью повреждена или папка на самом деле не является базой данных. – PolyTekPatrick