Мой вопрос касается транзакций и исключений
Требования:
У меня есть 10 записей для вставки в таблицу базы данных. И после вставки каждой записи я вставляю данные в другую таблицу. Поэтому, если вставка во вторую таблицу не удалась, я хочу откатить эту запись.
Бывший. Скажем, обрабатывать денежные переводы (с одного счета на счет) для 10 человек за раз.
псевдокод: ------------- Запуск метода EJB
for(int i = 0; i < TransferRecords.length; i++)
{
try
{
//Deduct cash from TransferRecord.accountFrom --- Includes use of Hibernate Session
//Add cash in TransferRecord.accountTo -- Includes use of Hibernate Session
} catch(AppException exception)
{
//Rollback the transaction only for this particular transfer (i)
// But here when I go for next record it says session is closed
}
}
--------- Конец метода EJB
Здесь AppException создается с помощью аннотации @ApplicaitonException (rollback = true).
Функциональность, которую мы хотим: даже если транзакция не выполняется для TransferRecord (скажем, 2), я хочу, чтобы данные были зафиксированы для записи 0, записи 1, записи 3, записи 4 (и т. Д., Но не для записи 2)
Но проблема здесь в том, что при сбое TransferRecord 2 и при переходе на TransferRecord 3 я получаю сообщение об ошибке «Сессия закрыта».
Мои сомнения: 1. Правильный ли это подход? или мне следует запустить цикл for (для каждого TransferRecord) вне EJB 2. Как я могу убедиться, что сеанс не закрыт, но транзакция откатывается (только для этого для конкретной неудачной транзакции)
Заранее спасибо.
Я использую EJB3, Hibernate 3.x, Jboss 4.2.x, и я использую транзакцию, управляемую контейнером.