#java #jpa-2.0 #eclipselink #jta
#java #jpa-2.0 #eclipselink #jta
Вопрос:
Я загружаю большой набор данных в базу данных из веб-сервиса. Я использую eclipslink для сохранения и запускаю приложение на glassfish 3.0. Я столкнулся с проблемами в моем наборе тестовых данных, поскольку есть несколько нарушений ограничений внешнего ключа. Я согласен с нарушением, мне не нужны эти данные, если они неполные. Однако моя проблема заключается в том, что исключение генерируется в контейнере. Затем это помечает мою транзакцию для отката, и тогда я вообще не получаю никаких данных.
Я хотел бы продолжать использовать JTA, но не уверен, смогу ли я сделать то, чего я хочу достичь, а именно создать свою собственную транзакцию JTA, чтобы я мог контролировать, когда она фиксируется, и т.д. Я не уверен, что это хорошая идея, хотя, как я чувствую, поступая таким образом, я могу разрушить некоторые преимущества использования JTA.
Итак, возможно ли получить транзакцию JTA?
Комментарии:
1. выдается ли вам исключение при попытке сохранения? Можете ли вы перехватить ее до того, как она загрузится в контейнер и выполнит откат транзакции?
Ответ №1:
Работает ли база данных в методе сессионного компонента. Прокомментируйте этот метод с помощью:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
Ему будет предоставлена собственная транзакция. Внешняя транзакция будет приостановлена, пока она выполняет свои функции.
Ответ №2:
Прочитайте, как получить единицу работы с помощью внешней службы транзакций. Очевидно, вы можете перехватить пользовательскую транзакцию и / или запустить свою собственную, запросив контейнер JNDI для UserTransaction
Комментарии:
1. Спасибо, мне нравится атрибут @TransactionAttribute, потому что это так просто, но похоже, что я могу проявить немного больше креатива в работе.
2. @grantk конечно, но предполагается, что вы используете атрибут EJB @TransactionAttribute, который