Как я могу определить, почему JPA / eclipselink / J2EE выдает ROLLBACK для БД? - PullRequest
0 голосов
/ 26 сентября 2011

Я преследую проблему, когда вижу, что операторы SQL выполняются в журнале базы данных в транзакции, а затем вижу откат транзакции.

Это происходит как в Oracle, так и в Postgres, но только в некоторых установках.Само приложение является довольно стандартным приложением J2EE, использующим JPA и Eclipselink.

Я не вижу никаких исключений, и при этом код явно не сдается и не откатывается.

Лучшее, что я смогчтобы сделать это, найдите следующую запись в журнале:

    [#|2011-09-26T11:30:56.052-0700|FINER|sun-appserver2.1|org.eclipse.persistence.session.file:/opt/glassfish/domains/domain1/applications/j2ee-apps/myapp/myapp-ejb_jar/_myapp-ejbPU.transaction|_ThreadID=18;_ThreadName=httpSSLWorkerThread-8888-2;ClassName=null;MethodName=null;_RequestID=e78196
09-bf2e-4026-8cbb-87fdd047c5eb;|begin unit of work flush|#]

Это происходит в то же время, что и ROLLBACK в журнале postgres:

appuser @ dbname: 102012/7/67486 2011-09-26 18:30:56.052 UTC - LOG:  execute S_3: ROLLBACK

Обратите внимание, что БД находится в UTCпока приложение находится на Тихом океане.

Соответствующий код вызывается с помощью веб-службы с @TransactionAttribute(TransactionAttributeType.SUPPORTS)

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

Как узнать, какой код вызывает откат?

1 Ответ

2 голосов
/ 27 сентября 2011

Вы можете разрешить вход в систему с EclipseLink для устранения проблемы. Любое исключение, которое произошло в EclipseLink, будет зарегистрировано.

См, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging

Также убедитесь, что вы не выдаваете ошибку, чтобы вызвать откат вашего SessionBean.

...