Я использую оптимистичную блокировку в приложении JPA2 (с использованием приложения EclipseLink v2.4) (без контейнера, только JavaSE). Я пытаюсь реализовать сильную согласованность, поэтому хочу, чтобы версии всех объектов, прочитанных во время транзакции, проверялись при фиксации.Проверка версий read set при фиксации в JPA 2 с оптимистичной блокировкой
Когда я использую MySQL как целевую БД, все происходит так, как я ожидаю: когда у меня есть клиент, выполняющий транзакции только для чтения одновременно с клиентом, выполняющим запись, некоторые транзакции только для чтения прерываются (и повторяются).
Однако, когда я использую HSQLDB (v2.2.9), транзакции только для чтения никогда не прерываются. Фактически, tcpdump ничего не показывает, что происходит через провод!
Что здесь происходит? Я пробовал играть с уровнем изоляции безрезультатно. Я не понимаю, почему это имеет значение в любом случае - похоже, что EclipseLink должен генерировать примерно такой же SQL независимо от изоляции. Может быть, какая-то странная оптимизация продолжается?
Чтение спецификации JPA сбивает с толку. Я даже гарантировал, что мои проверенные версии версий будут проверены, или только версии объектов, которые были изменены или удалены?
Почему бы вам не предоставить нам немного кода? –
Код - версия JPA [OO7 база данных] (http://pages.cs.wisc.edu/~dewitt/includes/benchmarking/oo7.pdf). Предполагается моделировать приложение САПР. Эти транзакции пересекают древовидный график «Ассембли» с листьями частей. Только транзакции только для чтения считывают детали, а транзакции записи изменяют поля частей. – Owen