можете ли вы создать свою собственную транзакцию JTA?

#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:

http://wiki.eclipse.org/Using_Advanced_Unit_of_Work_API_(ELUG)#Integrating_the_Unit_of_Work_with_an_External_Transaction_Servicestrong текст**

Прочитайте, как получить единицу работы с помощью внешней службы транзакций. Очевидно, вы можете перехватить пользовательскую транзакцию и / или запустить свою собственную, запросив контейнер JNDI для UserTransaction

Комментарии:

1. Спасибо, мне нравится атрибут @TransactionAttribute, потому что это так просто, но похоже, что я могу проявить немного больше креатива в работе.

2. @grantk конечно, но предполагается, что вы используете атрибут EJB @TransactionAttribute, который