2013-08-29 3 views
0

Я использую HSQLDB с одним DB и 4 таблицами. Я использую общий источник данных для пула Apache.Одновременное подключение к HSQLDB - вызов никогда не возвращается

Сценарий выглядит следующим образом:

Таблицы 1-3 Обновление в одной транзакции, таким образом, на одной и той же связи (различные SQL statents). Они используют auto commit false и вызывают executeUpdate() и executeBatch(). В конце этой транзакции иногда (не каждый раз) вызывается «контрольная точка».

Таблица 4 обновляется Одновременно с другими, но с использованием другого соединения. Обновляет пакет, а затем всегда вызывает «контрольную точку». На этой контрольной точке все зависает, вызов никогда не возвращается и доступ к любой таблице в этой БД невозможен. В файле журнала я вижу, что «контрольная точка» для этих четвертых таблиц никогда не появляется.

Может быть, я не могу выполнить контрольную точку, пока есть открытое соединение, использующее auto commit = false?

Может быть, тупик?

Я понятия не имею, в чем проблема ... Без этой таблицы №4 все работает нормально.

+0

Что происходит, когда вы оставляете «контрольную точку» (что не должно быть необходимо в любом случае) –

+0

Без этого остальная часть кода работает, я должен добавить контрольную точку, потому что я хочу, чтобы она была вставлена в БД, а затем кэшируется. – Sophie

+0

HSQLDB при необходимости очистит данные на диске. Просто убедитесь, что вы правильно держите двигатель. –

ответ

1

Вы можете выполнить ЗАПИСЬ, пока есть другие открытые соединения. Соединение, которое выполняет CHECKPOINT, ожидает, что все другие соединения будут зафиксированы до блокировки базы данных и выполнения контрольной точки.

Следовательно, вы должны выполнить все операции и совершить, прежде чем выполнять контрольную точку.

+0

Спасибо. Кажется, что если отдельные операции будут разделены на 2 потока, то проблему можно избежать. – Sophie

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