Я использую сервер Glassfish 4.1 с базой данных H2 в tcp/многопользовательском режиме. Я пытаюсь программно обновить таблицы в одноэлементном компоненте. Я всегда получаю следующее исключение:
org.h2.jdbc.JdbcSQLException: Timeout trying to lock table "GLOBALS"; SQL statement: ALTER TABLE "PUBLIC".GLOBALS ADD STARTFLAG VARCHAR(512) [50200-176]
Я знаю, что таблица заблокирована, так как один из менеджеров сущностей, управляемых контейнером, похоже, имеет открытое соединение с этой таблицей. Но во время оператора alter table не было бы необходимости в каком-либо соединении...
Поэтому мне интересно, есть ли возможность закрыть все соединения jdbc с помощью JPA, управляемого контейнером?
Вот строка инициализации, которую я использую для запуска/подключения к базе данных H2:
jdbc:h2:tcp://localhost/~/datastore/database;AUTO_SERVER=TRUE;MVCC=TRUE
Я уже пытался закрыть диспетчер сущностей, управляемый контейнером, и фабрику менеджеров сущностей (но я думаю, что это неправильный подход, поскольку он обрабатывается контейнером) до выполнения операторов обновления.
Я попытался отсоединить управляемые объекты до выполнения операторов обновления.
Я попытался добавить параметр MVCC=TRUE (параллелизм нескольких версий).
Также пытался установить FILE_LOCK=NO, но затем я получаю другое исключение, которое говорит мне, что эта комбинация параметров недействительна.
но пока безуспешно...
Любые идеи высоко ценятся - заранее спасибо!