Guice-Persist — Работа над этой темой уже началась. Похоже, вы дважды вызывали UnitOfWork.begin() без балансирующего вызова end() между ними.

Наше приложение представляет собой приложение Java-GWT, которое широко использует Guice-Persist и Guice-Servlet. У нас никогда не было проблем с использованием функции сеанса на HTTPRequest в Guice-Persist, которая похожа на то, что изначально использовал Warp-persist.

Мы фильтруем наше веб-приложение через класс PersistFilter в соответствии с документацией. Наш файл persistence.xml имеет тип транзакции = "RESOURCE_LOCAL" в соответствии с документацией Guice здесь.

Теперь по какой-то странной причине наша среда PROD показывает ошибку

«Работа над этим потоком уже началась. Похоже, вы дважды вызывали UnitOfWork.begin() без балансирующего вызова end() между ними».

введите здесь описание изображения

Похоже, существует проблема, из-за которой в Guice-Persist не поддерживаются вложенные единицы работы. ССЫЛКА

Мы также недавно перешли со спящего режима 3.6.3.Final на 4.1.4.Final. Не уверен, что у него будет какая-то несовместимость с guice...

На данный момент мы полностью в неведении относительно того, почему это происходит.


person benstpierre    schedule 08.06.2012    source источник


Ответы (2)


Я столкнулся с этим симптомом, когда транзакция была неявно открыта Hibernate, потому что я забыл добавить аннотацию @Transaction к самой внешней логической скобке транзакции.

Чтобы точно определить проблему, установите точки останова на уровне вашей базы данных, а также в функциях begin() и end(), чтобы определить случаи, когда сохранение (чтение или запись не имеет значения) происходит без существующей транзакции.

person Thilo-Alexander Ginkel    schedule 12.06.2012